Ansibleを実用的に。Ansibleを実用的に。ansible-galaxyのロールをファイル管理しようAnsibleを実用的に。篤司Chefを使っている方はBerkshelfやLibrarian-Chefを使って、利用するクックブックのリストをファイルにまとめて管理するのは珍しくないことかと思います。コマンドにそうした機能が備わっていて、同じように利用するロールをファイルで管理することができます。このコマンドはAnsibleをインストールすれば使えるようになりますので、Ansibleはデフォルトでその機能を持っていると言ってもいいでしょう。Galaxyへアップロードされたもののみとなっており、例えばGitHubのプライベートリポジトリなどを使うためにはlibrarian-ansibleのようなサードパーティ製のツールを使う必要がありました。Galaxyにアップロードしたロール以外も使うことができるようになりました。これによりAnsible単体でもほぼChefでBerkshelfやLibrarian-Chefを使う時と遜色なく運用することが可能になったと言えます。Galaxy以外のソースを使う方法を紹介したいと思います。1.8以降をインストールした環境があれば簡単に試すことができますので、実際にファイルを作成して試してみてください。オプションで指定します。このファイルはテキストファイルもしくはYAMLのフォーマットで記述することができ、ファイル名はどんなものを使えますが、通常はrequirements.txtやrequirements.ymlといった名前をつけるのが通例です。requirements.txt(テキストフォーマット)まずテキスト形式のファイルではシンプルなフォーマットでロールを管理することができます。SCMの指定など柔軟な機能を使うことはできませんが、そうした機能が必要なければテキスト形式でも十分に実用的です。指定した場所にインストールされます。次のようなコマンドです。この時、指定したロールに依存性のあるロールも自動的にインストールしてくれます。コマンドを実行した場合も同様です。肝心のファイルの内容は以下のように書きます。zzet.rbenvJasonGiedymin.nodejsロールがバージョニングされていればバージョンの指定も可能です。zzet.rbenv,1.3.0JasonGiedymin.nodejsなおSCMの指定はできませんが、GitHubのURLであれば問題なくインストールできるようです(今のところアンドキュメンテッドのようなので今後も使えるかどうかはわかりませんので注意してください)。https://github.com/bennojoy/nginx,masterプライベートリポジトリもOKです。URLの前にgit+を付けます。git+git@github.com:moongift/private-sample-0.githttps経由でもGitHubのユーザIDとパスワードをプロンプトで入力すればOKです。https://github.com/moongift/private-sample-1.gitユーザIDの入力は省くことができます。https://moongift@github.com/moongift/private-sample-2.git推奨はしませんが、パスワードの入力を省くこともできます。https://moongift:password@github.com/moongift/private-sample-3.gitrequirements.yml(YAMLフォーマット)YAML形式のファイルを使うとより柔軟な記述を行うことが可能となります。このファイルのファイル名は先述のように自由ですが、YAMLのフォーマットを使うと認識させるために、拡張子はymlである必要があります。コマンドで指定する方法はテキスト形式のファイルと同様です。ファイルの内容は以下のようになります。zzet.rbenvプライベートリポジトリももちろん使えます。git+git@github.com:moongift/private-sample-0.gitロールのインストール先のパスを指定できます。これは-pで指定した場所よりも優先されます。ex_rolesバージョンの指定は以下のように行います。masterロールの名前を指定することができます。Galaxyをソースにした場合にユーザ名を取り除いたロール名にすることもできます。運用次第で便利に使えそうです。SCMの指定ができるためBitBucketでMercurialのリポジトリを使うことが可能となります。hgそれからコメントを使うことができるのも地味ですがメリットが大きいです。このためだけにでもYAMLフォーマットの方を使いたくなります。Galaxyのロールのファイルでの管理について見てみました。1.8からは外部のプライベートリポジトリからロールを取得できるようになったため、個人的にはAnsibleを実際のサービスでも使えるようになったと感じています。プライベートリポジトリが使えないというのは実運用する上で大きなネックだったと言えます。冒頭で述べたようにサードパーティ製のツールを使えば可能でしたが、そうではなくAnsibleのデフォルトのツールでできるようになったのは標準のワークフローを作っていく上で大きな意味があると言えます。