こんにちは。makiです。
先月札幌で開催したPHP Matsuri 2013 では、Ansibleについて LT 発表してきました。
発表スライドはSlideshareにおいてあります。
Ansibleとは
- 構成管理ツール(ChefやPuppet等と同じ)
- playbookという脚本ファイル(Chefでいうrecipe)にやりたいことをyaml形式で書いて実行するだけ
- 別にVagrantとの関係が必須じゃない
vagrant provisionよりもansible-playbookを単体実行のほうが便利なことも多い
READMEには設計思想としてこのように書かれています。
- とってもシンプルなセットアップ
- デフォルトで超速くて並列処理ができる
- サーバーもデーモンもいらない。sshdだけ
- クライアントのboxに追加で必要なものなどない
- どんな言語でもモジュールを書くことができる
- スクリプト作成のために用意されたステキなapi
- rootユーザでなくても使える
- とっても簡単な設定管理で利用できるよ
難しいことは何もなく、我々がやることはyaml形式の設定ファイルを書いて実行するだけです。
今回は、120以上ある標準モジュールの中から、特によく使うものを7つ厳選してご紹介します。
command
shell コマンドを実行したい場合に使用。 <, >, | を使用する場合は、shell の方を使う。
| パラメータ | 選択肢 | 説明 |
|---|---|---|
| chdir | コマンドの実行前に 指定ディレクトリへcdする | |
| creates | 指定のファイル名が存在するなら、commandの実行をスキップする | |
| removes | 指定のファイル名が存在しないなら、commandの実行をスキップする |
例:
- command: /usr/bin/make_database.sh arg1 arg2 creates=/path/to/database
file
ファイル、シンボリックリンク、ディレクトリの属性設定・削除を行う
copy,template,assembleモジュールが同様のパラメータを指定可能
| パラメータ | 選択肢 | 説明 |
|---|---|---|
| path | ファイルのパス | |
| mode | パーミッション設定 | |
| owner | 所有者 | |
| group | グループ | |
| recurse | yes no |
再帰的(state=directoryのみ有効) |
| src | state=linkのみ |
|
| state | file link directory hard absent |
例:
- file: path=/etc/foo.conf owner=foo group=foo mode=0644 - file: src=/file/to/link/to dest=/path/to/symlink owner=foo group=foo state=link
copy
ローカル端末のfilesディレクトリにあるsrcのファイルを リモートのdestにコピーする
| パラメータ | 選択肢 | 説明 |
|---|---|---|
| src | コピー元(ローカル) | |
| dest | コピー先(リモート) | |
| others | fileモジュールのパラメータ(owner,group,mode等)が指定可能 |
例:
copy: src=/srv/myfiles/foo.conf dest=/etc/foo.conf owner=foo group=foo mode=0644
template
- ローカル端末の
templatesディレクトリにあるsrcのファイルをテンプレートとして、リモートのdestにファイルを生成する - テンプレートエンジンとしてjinja2 が使われている
varsで指定した値を挿入することが可能{{ user_name }}もしくは${{user_name}}の形式
| パラメータ | 選択肢 | 説明 |
|---|---|---|
| src | コピー元(ローカル) | |
| dest | コピー先(リモート) | |
| others | その他fileモジュール同様のパラメータを指定可能 |
例:
- template: src=/mytemplates/foo.j2 dest=/etc/file.conf owner=bin group=wheel mode=0644
get_url
http経由でファイルをダウンロードする場合に使用する
| パラメータ | 選択肢 | 説明 |
|---|---|---|
| url | DLしたいファイルのurl | |
| dest | ファイルの保存先 | |
| others | その他fileモジュール同様のパラメータを指定可能 |
例:
- get_url: url=http://example.com/path/file.conf dest=/etc/foo.conf mode=0440
git
git clone の処理を行う
| パラメータ | 選択肢 | 説明 |
|---|---|---|
| repo | リポジトリ(ssh,https等が利用可能) | |
| dest | clone先 | |
| depth | 履歴取得数 最低1 |
|
| update | yes no |
yes(デフォルト値)の場合pullも行う |
例:
- git: repo=ssh://git@github.com/mylogin/hello.git dest=/home/mylogin/hello
yum
yumコマンドを利用してパッケージをインストールする
| パラメータ | 選択肢 | 説明 |
|---|---|---|
| name | パッケージ名 | |
| state | present latest absent |
present:インストール済みならそのままlatest:新しいのがあればupgradeabsent:パッケージ削除 |
例:
- yum: name=tree state=present - yum: name=vim state=latest
※Debian系(Debian/Ubuntu)の場合はaptモジュールが用意されている
まとめ
Ansibleが初めての方でもこれだけ覚えれば最初のステップクリアと言って良いでしょう。
公式ドキュメントには他にも多くの便利なモジュールが掲載されています。
今回紹介したモジュールに慣れてきたら、一度ドキュメントを読むと良いと思います。
Ansible Modules
最後にAnsibleについて学ぶ際に参考にしたサイトを紹介します。
Yaml形式の記述はルールが単純なので、2つ3つタスクを書いてみるとすぐに慣れると思います。
Chef の Recipe(Ruby) に挫折してしまった方も、もう一度挑戦してみませんか?

