Playbookを再利用しやすくするRoleの基本と共有サービスAnsible Galaxyの使い方:Ansibleで始めるサーバ作業自動化入門(4)(3/4 ページ)
本連載では、「マニュアルやシェルスクリプトを使ったサーバ管理に課題を持つ方」を対象に、Ansibleの基本的な使い方を紹介。今回は、プレイブックを再利用しやすくするための機能と、「ロール」と呼ばれる推奨ディレクトリ構成、共有サービスAnsible Galaxyの使い方を紹介します。
Ansible Galaxyに自作ロールを登録するには
今度は自分で作ったロールを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
先ほど説明したロールの構成と同じですが、幾つか説明していないファイルやディレクトリがあるため概要を説明します。
- README.md
Ansible Galaxyのサイトで表示されるREADMEファイルとなります。README.mdはAnsible Galaxyでの公開に必要なため、詳細は後述します。
- meta
meta/main.ymlにはAnsible Galaxyでの検索や表示に使われるメタ情報と、依存するロールを記述します。Ansible Galaxyで公開しない場合は依存するロールを記述するだけでOKです。meta/main.ymlもAnsible Galaxyで公開するのに必要となるため、詳細は後述します。
- .travis.yml、tests
これらは「TravisCI」を利用する際に必要なファイルです。TravisCIとは、GitHubと連携するCI(継続的インテグレーション)ツールです。TravisCIの利用方法については本記事では説明しませんので、利用したい場合はAnsible Galaxy公式サイトの「Automated Testing」を参照してください。
- handlers
モジュールの実行で状態に変更があった(結果がchangedである)場合にのみタスクを動かすためのhandlerという仕組みを使う場合に、実行するタスクをhandlers/main.ymlに記述します。
- templates
「template」というモジュールでファイルを転送する際に使うファイルを格納します。templateモジュールでは、転送するファイルに変数名を埋め込んでおき、転送時に変数の値を置換する、といったことを行います。
ロールのテンプレート作成後、tasks/main.ymlなど必要なファイルを記述してロールを完成させてください。なお、自動生成されたディレクトリ、ファイルの中に不要なものがある場合、削除しても、そのまま残していてもどちらでも問題ありません。
READMEの作成
README.mdはマークダウン形式で記述するようになっており、あらかじめ以下の見出しが用意されています。必ずこの内容を記述しなければいけないわけではありませんが、最初はテンプレートに従った方がよいでしょう。見出しとその中に記載するべき情報は以下の通りです。
- ロールの概要(RoleName)
ロールが行う内容の概要を記載します。見出しのRoleNameは実際のロール名に変更します。
- 前提条件(Requirements)
実行に必要なAnsibleの最小バージョンや、ロールを実行する際に必要な準備について記載します。
- ロールで利用する変数(Role Variables)
ロール利用時に書き換えることのできる変数の説明を記載します。
- 依存するロール(Dependencies)
その他のロールを先行して実行する必要がある場合はそのロール名を記述します。
- ロールを利用するプレイブックの記述例(Example Playbook)
書き換えるべき変数なども含めてロールを実行するためのプレイブック例を記述します。
- ライセンス(License)
作成したロールのライセンスを記述します(BSDやGPLなど)。
- 作成者の情報(Author Information)
作成者名や作成会社名を記述します。
メタ情報の作成
次にmeta/main.ymlを見てみます。このファイルはその拡張子の通り、YAML形式で記述します。そのため、テンプレートのインデントを崩さないよう気を付けて編集してください。もし不正な構造となった場合はAnsible Galaxyでの公開時にエラーとなります。
meta/main.ymlに記述する内容は以下の通りです。README.mdと重複する内容もありますが、同じ内容を書いても問題ありません。
- 作成者名(author)
作成者の名前を記述します。
- ロールの概要(description)
Ansible Galaxyで表示される概要を記述します。この項目は必須項目です。
- 作成会社名(company)
作成者の所属する会社名を記述します。
- ライセンス(license)
選択可能なライセンスの候補があらかじめテンプレートに記載されているため、その中から選択します。この項目は必須項目です。
- min_ansible_version
ロールを実行するのに必要なansibleの最小バージョンを記載します。利用しているモジュールやモジュールの引数がどのバージョンから追加されたものかについては、Ansible公式のモジュールページを参照してください。
- platforms
ロールが対象とするOSとバージョンのリストを記述します。この項目は必須となります。
- galaxy_tags
Ansible Galaxyで検索される際に利用されるタグを記述します。リスト形式で複数登録できます。この項目は必須となります。
- dependencies
依存するロール名を記載します。この値はAnsible Galaxyでの表示だけでなく、ロールの実行時にも利用されます。ここで定義したロールはansible-galaxyコマンドでインストールした場合に自動でダウンロードされ、ロールの実行時にここで定義したロールが先行して実行されます。この項目は必須です。
このファイルの実際の記述内容も公開されているロールを参考にしてみてください。なお、もし必須項目がコメントアウトされていたりして存在しない場合、Ansible Galaxyで公開するときにエラーとなります。
関連記事
- インフラ自動化ツール「Ansible 2.0」が正式版がリリース
インフラ自動化ツール「Ansible」がメジャーバージョンアップ。リファクタリングによるアーキテクチャの整理に加え、Block文や動的なIncludeなどの新機能が含まれています。 - 「Puppet Enterprise」と「Red Hat Satellite」の連携が実現。一方、レッドハットは「Ansible」を買収へ
Puppet EnterpriseとRed Hat Satelliteが連携可能に。一方、米レッドハットはPuppetの競合とされるAnsibleの買収を発表し、自社ソリューションへの取り込みを表明した。 - レッドハットのホワイトハーストCEOに、OpenStack、Ceph、Ansibleについて聞いた
レッドハットは11月4日、東京都内でRed Hat forum 2015を開催した。来日した米レッドハットのCEO、ジム・ホワイトハースト氏は、プレス向けの説明会で同社の戦略を説明するとともに質問を受け付けた。筆者は、同社にとってのOpenStackの戦略的な意味、およびCephのInktank、Ansibleを買収した狙いについて聞いた。
Copyright © ITmedia, Inc. All Rights Reserved.