Galaxy 開発者ガイド

Ansible コミュニティーと共有するには、Galaxy でコレクションおよびロールをホストできます。Galaxy のコンテンツは、ロール などの事前にパッケージ化された作業単位でフォーマットされ、Galaxy 3.2 では コレクション が新たに提供されました。 インフラストラクチャーのプロビジョニング、アプリケーションのデプロイ、および日々の作業を行うすべてのタスクにロールを作成できます。これに加えて、複数の Playbook、ロール、モジュール、およびプラグインを含む、自動化の包括的なパッケージを提供するコレクションを作成できます。

Galaxy のコレクションの作成

コレクションは、Ansible コンテンツのディストリビューション形式です。コレクションを使用して Playbook、ロール、モジュール、プラグインをパッケージ化および配布できます。 Ansible Galaxy <https://galaxy.ansible.com>_ を使用してコレクションを公開および使用できます。

コレクションの作成方法は、「コレクションの開発」を参照してください。

Galaxy のロールの作成

init コマンドを使用して新規ロールの基本構造を初期化し、ロールに必要なさまざまなディレクトリーおよび main.yml ファイルを作成する際の時間を短縮します。

$ ansible-galaxy init role_name

上記により、現在の作業ディレクトリーに以下のディレクトリー構造が作成されます。

role_name/
    README.md
    .travis.yml
    defaults/
        main.yml
    files/
    handlers/
        main.yml
    meta/
        main.yml
    templates/
    tests/
        inventory
        test.yml
    vars/
        main.yml

ロールのリポジトリーを作成する場合、リポジトリーのルートは role_name である必要があります。

Force

ロール名に一致するディレクトリーが現在の作業ディレクトリーに存在する場合は、init コマンドによりエラーが発生します。エラーを無視するには、 –force オプションを使用します。上記のサブディレクトリーとファイルを強制的に作成し、一致するものをすべて置き換えます。

Container enabled

Container Enabled ロールを作成する場合は、--type containeransible-galaxy init に渡します。これにより、上記と同じディレクトリー構造が作成されますが、 Container Enabled ロールに適したデフォルトファイルが置かれます。たとえば、README.md の構造は少し異なり、.travis.yml ファイルテストは、 Ansible Container を使用するロールをテストし、メタディレクトリーには container.yml ファイルが含まれます。

カスタムロールのスケルトンの使用

カスタムロールのスケルトンディレクトリーは、以下のように指定できます。

$ ansible-galaxy init --role-skeleton=/path/to/skeleton role_name

スケルトンを指定すると init は以下のことを行います。

  • すべてのファイルおよびディレクトリーをスケルトンから新しいロールにコピーします。
  • templates ディレクトリー外で見つかった .j2 ファイルは、すべてテンプレートとして表示されます。現時点で唯一有用な変数は role_name です。
  • .git ディレクトリーおよび .git_keep ファイルはコピーされません。

または、role_skeleton とファイルの無視は、ansible.cfgで設定できます

[galaxy]
role_skeleton = /path/to/skeleton
role_skeleton_ignore = ^.git$,^.\*/.git_keep$

Galaxy での認証

Galaxy Web サイトでロールを管理するために import コマンド、delete コマンド、および setup コマンドを使用するには認証が必要ですが、 そのためには、login コマンドを使用できます。login コマンドを使用する前に、Galaxy の Web サイトにアカウントを作成する必要があります。

login コマンドでは、GitHub の認証情報を使用する必要があります。ユーザー名とパスワードを使用するか、個人用アクセストークン <https://help.github.com/articles/creating-an-access-token-for-command-line-use/>_ を作成できます。トークンの作成を選択した場合は、識別の検証のみに使用されるため、トークンに最小限のアクセス権限を付与します。

以下は、GitHub のユーザー名とパスワードを使用した Galaxy Web サイトでの認証を示しています。

$ ansible-galaxy login

We need your GitHub login to identify you.
This information will not be sent to Galaxy, only to api.github.com.
The password will not be displayed.

Use --github-token if you do not want to enter your password.

GitHub Username: dsmith
Password for dsmith:
Successfully logged into Galaxy as dsmith

ユーザー名とパスワードの使用を選択すると、パスワードは Galaxy に送信されません。これは、GitHub で認証し、個人用アクセストークンを作成するために使用されます。 次にトークンを Galaxy に送信し、Galaxy は ID を確認し、Galaxy アクセストークンを返します。認証が完了すると、 GitHub トークンは破棄されます。

GitHub パスワードを使用しない場合や、GitHub で 2 段階認証を有効にしている場合は、–github-token オプションを使用して、作成する個人用アクセストークンを渡します。

ロールのインポート

import コマンドには、最初に login コマンドを使用して認証する必要があります。認証後、所有またはアクセス権が付与された GitHub リポジトリーをインポートできます。

以下を使用してロールにインポートします。

$ ansible-galaxy import github_user github_repo

デフォルトでは、コマンドは Galaxy がインポートプロセスを完了するまで待機し、インポートが進行するにつれて結果を表示します。

Successfully submitted import request 41
Starting import 41: role_name=myrole repo=githubuser/ansible-role-repo ref=
Retrieving GitHub repo githubuser/ansible-role-repo
Accessing branch: master
Parsing and validating meta/main.yml
Parsing galaxy_tags
Parsing platforms
Adding dependencies
Parsing and validating README.md
Adding repo tags as role versions
Import completed
Status SUCCESS : warnings=0 errors=0

ブランチ

–branch オプションを使用して、特定のブランチをインポートします。指定されていない場合は、リポジトリーのデフォルトブランチが使用されます。

ロール名

デフォルトでは、ロールに指定される名前は GitHub リポジトリー名から作成されます。ただし、–role-name オプションを使用してこれを上書きし、名前を設定できます。

待機なし

–no-wait オプションを指定すると、コマンドは結果を待ちません。ロールに関する最新のインポート結果は、Galaxy Web サイトで My Imports に移動して利用できます。

ロールの削除

delete コマンドには、最初に login コマンドを使用して認証する必要があります。認証後、Galaxy Web サイトからロールを削除できます。GitHub のリポジトリーにアクセスできるロールのみを削除できます。

ロールを削除するには、以下を使用します。

$ ansible-galaxy delete github_user github_repo

これは、Galaxy からロールを削除するだけです。実際の GitHub リポジトリーを削除したり、変更したりしません。

Travis 統合

Galaxy と Travis のロールの間に統合またはコネクションを作成できます。接続が確立されると、 Travis でのビルドは自動的に Galaxy でのインポートをトリガーし、そのロールに関する最新情報で検索インデックスを更新します。

setup コマンドを使用して統合を作成しますが、統合を作成する前に、最初に login コマンドを使用して認証する必要があります。 Travis のアカウントおよび Travis トークンも必要になります。準備が整ったら、次のコマンドを使用して統合を作成します。

$ ansible-galaxy setup travis github_user github_repo xxx-travis-token-xxx

setup コマンドには Travis トークンが必要ですが、トークンは Galaxy に保存されません。これは、 「Travis ドキュメント」で説明されたとおりにハッシュを作成するために、GitHub のユーザー名およびリポジトリーと共に使用されます。ハッシュは Galaxy に保存され、Travis から受け取った通知の検証に使用されます。

setup コマンドは、Galaxy が通知に応答できるようにします。Travis を設定してリポジトリーでビルドを実行し、通知を送信するには、 「Travis getting started guide」の手順に従ってください。

ビルドの完了時に Galaxy に通知するように Travis に指示するには、.travis.yml ファイルに以下を追加します。

notifications:
    webhooks: https://galaxy.ansible.com/api/v1/notifications/

Travis 統合の一覧表示

–list オプションを使用して、Travis 統合を表示します。

$ ansible-galaxy setup --list


ID         Source     Repo
---------- ---------- ----------
2          travis     github_user/github_repo
1          travis     github_user/github_repo

Travis 統合の削除

–remove オプションを使用して、Travis 統合を無効化および削除します。

$ ansible-galaxy setup --remove ID

無効にする統合の ID を指定します。–list オプションを使用して ID を見つけることができます。

See also

コレクションの使用
モジュール、Playbook、およびロールの共有可能なコレクション
ロール
Ansible ロールに関するすべて
メーリングリスト
ご質問はございますか。サポートが必要ですか。ご提案はございますか。 Google グループの一覧をご覧ください。
irc.freenode.net
#ansible IRC チャットチャンネル