Ansibleのインストール
本記事では主にOSX(yosemite)における環境構築を目的として、Homebrewがインストール済みであることを前提に進めます。その他の環境で導入する場合は、Ansibleの公式ドキュメントを参照してください。
$ brew install ansible $ ansible --version ansible 1.9.1 configured module search path = None
AnsibleでHello World
それでは、早速Ansibleを使ってタスクを実行します。まず、Ansibleの実行には、タスクの実行対象サーバーの一覧を定義したinventory fileが必要です。ローカルマシンに対して実行する場合においても、ansibleコマンドの実行時に必要となるため、自身を表す127.0.0.1
を記述したhostsファイルを作成します。
$ echo 127.0.0.1 > hosts
次に、ping moduleを使って自身に対してタスクの実行が正常に行われるかを確認します。-i
は、inventoryの略ですが、先ほど作成したhostsファイルへのパスと、定義された実行対象サーバーを指定します。また、--connection=local
はssh接続を行わず、そのままローカルで実行させるためのオプションです。-m
には実行するAnsibleのModuleの名前を渡します。
$ ansible -i hosts 127.0.0.1 -m ping --connection=local 127.0.0.1 | success >> { "changed": false, "ping": "pong" }
ModuleとはAnsible上でタスクを定義する上で基本となるライブラリの一群です。標準でさまざまなModuleが含まれており、基本的にはそれらを使うことになりますが、必要に応じて独自に拡張することも可能です。
サンプルで使用されていた、ping moduleは対象のサーバーとの通信を確認するModuleですが、他にもhomebrew moduleを使うとbrew install ~
に該当するコマンドを実行できます。このように、AndibleではすべてのタスクがModuleを経由して実行されることになります。標準モジュールについては、公式ドキュメントのModule Indexから一覧を確認することができます。
Playbookと基本構成
タスクの定義は、Playbookと呼ばれるyaml形式のファイルに記述します。タスクはroleという単位に分割可能ですが、再利用性を考慮し、roleは極力他のroleとの依存関係を持たせないようにします。GitHubリポジトリにPlaybookの公式サンプルがありますので、はじめはそれらに倣うと良いでしょう。
一般的なPlaybookの構成は以下のとおりです。
root │ hosts │ site.yml ├─ group_vars │ {group name} └─ roles └─ {role name} ├─ files │ {file name} ├─ handlers │ main.yml ├─ tasks │ main.yml └─ templates {template name}
ディレクトリ/ファイル | 説明 |
---|---|
hosts | 実行対象サーバーの定義ファイル。複数のマシンをグループにわけて定義します。 |
site.yml | サーバーに実行させるroleを定義します。 |
group_vars | グループ変数の定義ファイルの格納ディレクトリ。hosts内で定義されたグループごとに別々の変数を定義します。 |
roles/handlers | 起動コマンドなどを定義するファイルの格納ディレクトリ。例えばMySQLのrestartコマンドなどはここで定義します。 |
roles/tasks | メインタスクを定義するファイルの格納ディレクトリ。 |
roles/files | システムで使用される静的なファイルの格納ディレクトリ。packageのrepファイルやconfigのファイルを格納します。 |
roles/templates | システムで使用される動的に書きかわるファイルの格納ディレクトリ。taskの実行結果やgroup_varsの値によってconfigを書き換える必要がある場合に利用します。 |