今度は自分で作ったロールをAnsible Galaxyで公開する際の手順を紹介します。
ロールをAnsible Galaxyに公開するに当たり、READMEファイルとメタ情報ファイルの2つを編集する必要があります。どちらのファイルもロールのテンプレート作成時に自動生成したファイルに「どのような内容を書くべきか」の説明が書かれています。
書くべき内容については後述しますが、具体的な記述内容についてはAnsible Galaxyで公開されているロールを参考にしてみてください。参考までに、筆者が作成した「CentOSの初期設定用にポート変更やファイアウォール設定を行う」ロールを以下で公開しています。
ロールを作成するに当たり、自分でロールのディレクトリ構成を作成してもよいですが、Ansible Galaxyでの公開用にロールのテンプレートを作成するコマンドがあるため、これを利用します。適当なディレクトリで以下のコマンドを実行してください。
$ ansible-galaxy init {ロール名}
これにより、「ロール名」ディレクトリが作成され、その配下に以下の構成でロールのテンプレートが作成されます。
.travis.yml README.md defaults/ - main.yml files/ handlers/ - main.yml meta/ - main.yml tasks/ - main.yml templates/ tests/ - inventory - test.yml vars/ - main.yml
先ほど説明したロールの構成と同じですが、幾つか説明していないファイルやディレクトリがあるため概要を説明します。
Ansible Galaxyのサイトで表示されるREADMEファイルとなります。README.mdはAnsible Galaxyでの公開に必要なため、詳細は後述します。
meta/main.ymlにはAnsible Galaxyでの検索や表示に使われるメタ情報と、依存するロールを記述します。Ansible Galaxyで公開しない場合は依存するロールを記述するだけでOKです。meta/main.ymlもAnsible Galaxyで公開するのに必要となるため、詳細は後述します。
これらは「TravisCI」を利用する際に必要なファイルです。TravisCIとは、GitHubと連携するCI(継続的インテグレーション)ツールです。TravisCIの利用方法については本記事では説明しませんので、利用したい場合はAnsible Galaxy公式サイトの「Automated Testing」を参照してください。
モジュールの実行で状態に変更があった(結果がchangedである)場合にのみタスクを動かすためのhandlerという仕組みを使う場合に、実行するタスクをhandlers/main.ymlに記述します。
「template」というモジュールでファイルを転送する際に使うファイルを格納します。templateモジュールでは、転送するファイルに変数名を埋め込んでおき、転送時に変数の値を置換する、といったことを行います。
ロールのテンプレート作成後、tasks/main.ymlなど必要なファイルを記述してロールを完成させてください。なお、自動生成されたディレクトリ、ファイルの中に不要なものがある場合、削除しても、そのまま残していてもどちらでも問題ありません。
README.mdはマークダウン形式で記述するようになっており、あらかじめ以下の見出しが用意されています。必ずこの内容を記述しなければいけないわけではありませんが、最初はテンプレートに従った方がよいでしょう。見出しとその中に記載するべき情報は以下の通りです。
ロールが行う内容の概要を記載します。見出しのRoleNameは実際のロール名に変更します。
実行に必要なAnsibleの最小バージョンや、ロールを実行する際に必要な準備について記載します。
ロール利用時に書き換えることのできる変数の説明を記載します。
その他のロールを先行して実行する必要がある場合はそのロール名を記述します。
書き換えるべき変数なども含めてロールを実行するためのプレイブック例を記述します。
作成したロールのライセンスを記述します(BSDやGPLなど)。
作成者名や作成会社名を記述します。
次にmeta/main.ymlを見てみます。このファイルはその拡張子の通り、YAML形式で記述します。そのため、テンプレートのインデントを崩さないよう気を付けて編集してください。もし不正な構造となった場合はAnsible Galaxyでの公開時にエラーとなります。
meta/main.ymlに記述する内容は以下の通りです。README.mdと重複する内容もありますが、同じ内容を書いても問題ありません。
作成者の名前を記述します。
Ansible Galaxyで表示される概要を記述します。この項目は必須項目です。
作成者の所属する会社名を記述します。
選択可能なライセンスの候補があらかじめテンプレートに記載されているため、その中から選択します。この項目は必須項目です。
ロールを実行するのに必要なansibleの最小バージョンを記載します。利用しているモジュールやモジュールの引数がどのバージョンから追加されたものかについては、Ansible公式のモジュールページを参照してください。
ロールが対象とするOSとバージョンのリストを記述します。この項目は必須となります。
Ansible Galaxyで検索される際に利用されるタグを記述します。リスト形式で複数登録できます。この項目は必須となります。
依存するロール名を記載します。この値はAnsible Galaxyでの表示だけでなく、ロールの実行時にも利用されます。ここで定義したロールはansible-galaxyコマンドでインストールした場合に自動でダウンロードされ、ロールの実行時にここで定義したロールが先行して実行されます。この項目は必須です。
このファイルの実際の記述内容も公開されているロールを参考にしてみてください。なお、もし必須項目がコメントアウトされていたりして存在しない場合、Ansible Galaxyで公開するときにエラーとなります。
Copyright © ITmedia, Inc. All Rights Reserved.