cloudpack の 自称 Sensu芸人 の かっぱこと 川原 洋平(@inokara)です。
構成管理ツールの一つ Ansible を使う機会があったので簡単にまとめてみます。
参考
Ansible ことはじめ
ホストの登録
一覧の作成
以下のような方法で…
- ちまちま手入力とか…
- aws-sdk を利用したりとか…
export ANSIBLE_HOSTS
カレントディレクトリにホスト一覧(例:hosts)を作成して以下を実行する。
export ANSIBLE_HOSTS=./hosts
確認の意味で
ansible all --list-hosts
を実行すると以下のように表示される。
54.xxx.xxx.xx1
54.xxx.xxx.xx2
54.xxx.xxx.xx3
尚、以下のように [list_name] を指定してホストをグループ指定した場合には ansible list_name xxx で該当するホストグループを指定出来るので便利。
[host_list]
xxx.xxx.xxx.xx1
xxx.xxx.xxx.xx2
xxx.xxx.xxx.xx3
ホストリストに対して変数を定義
以下のようにホストリスト名に vars をつけることでホストリストに定義されているホストに対して共通の変数を定義することが出来る。
[host_list]
xxx.xxx.xxx.xx1
xxx.xxx.xxx.xx2
xxx.xxx.xxx.xx3
[host_list:vars]
ansible_connection=ssh
ansible_ssh_user=user
ansible_ssh_private_key_file=~/.ssh/path/to/keyfile
Ansible でリモートコマンドを実行する
あまりこんな使い方はしないかもしれないけどリモートホストでコマンドを実行させてみた。
リモートホストでコマンドを実行させる
リモートホストでコマンドを実行させるには command モジュールか shell モジュールを使うことになる。尚、-m はモジュールを指定し、-a はモジュールに対する引数をつけるとだけとりあえず覚えておこう。
command モジュール
command モジュールは単一のコマンドを実行する。
ansible ${HOSTGROUP_NAME} -m command -a 'echo "a"'
実行すると以下のように表示される。
shell モジュール
shell モジュールは複数のコマンドをパイプで繋ぎたい場合等に利用する。
ansible ${HOSTGROUP_NAME} -m shell -a 'echo "a" | echo $?'
以下のように表示される。
まとめ
- ホストの一覧と認証情報さえ揃えば複数のサーバーにアクセスしてコマンドを実行出来るのは便利!
- Ansible の本来の姿はこんなものではないらしいので引き続き触っていく…
- ちなみに自分は Chef 好きです(笑)
元記事は、こちら