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"'

実行すると以下のように表示される。

img_ansible-command-shell_01


shell モジュール

shell モジュールは複数のコマンドをパイプで繋ぎたい場合等に利用する。

ansible ${HOSTGROUP_NAME} -m shell -a 'echo "a" | echo $?'

以下のように表示される。

img_ansible-command-shell_02



まとめ

  • ホストの一覧と認証情報さえ揃えば複数のサーバーにアクセスしてコマンドを実行出来るのは便利!
  • Ansible の本来の姿はこんなものではないらしいので引き続き触っていく…
  • ちなみに自分は Chef 好きです(笑)

元記事は、こちら