ansibleの基本

fabricで構成管理をしているとソースがぐちゃぐちゃになってしまうので、ansibleに乗り換えようと思う。というわけで勉強なう

下準備

実行に必要な環境

必要なものを始めにインストールする場合にはansible myhost --sudo -m raw -a "yum install -y python2 python-simplejson"

もちろんSSHできなくてはならない。SFTPを用いる場合はansible.cfgを用いる。

インストール

公式は最新版を入れることをオススメしているがおとなしくbrewなどのパッケージマネージャを用いよう

githubから落とす場合は

git clone git://github.com/ansible/ansible.git --recursive
cd ./ansible

source ./hacking/env-setup

ansibleがいかにremoteに接続するか

まずはデフォルトのOpenSSH設定を試す。~/.ssh/configなども読み込まれる。 ローカルのOpenSSHの設定が古い場合(centos6などはこれに当てはまる。)pythonのOpenSSH実装(paramiko)を使用する。

known_hostsになくても気にしないようにする。

/etc/ansible/ansible.cfg、あるいは~/.ansible.cfgに、以下のように書く。

[defaults]
host_key_checking = False

inventory

対象となるサーバのIPと役割をINIっぽい形式で指定するファイル。/etc/ansible/hosts(これはANSIBLE_INVENTORYをexportすることで変更できる)で指定する。以下のような感じ

mail.example.com

[webservers]
foo.example.com
bar.example.com

[dbservers]
one.example.com
two.example.com
three.example.com:5309 # portを指定する場合

ひとつのサーバが複数のロールを持っていても良い

また、トンネリングして向こう側のサーバにプロビジョニングしたい場合は

jumper ansible_port=5555 ansible_host=192.168.1.50

のように指定する。jumperは単なるAliasで経由するサーバを指す。192.168.1.50のサーバに5555を通してアクセスする。

以下のように一括指定もできる。

[webservers]
www[01:50].example.com

[databases]
db-[a:f].example.com

接続するプロトコルや、接続先サーバのユーザー名も指定可能

[targets]

localhost ansible_connection=local
other1.example.com ansible_connection=ssh ansible_user=mpdehaan

この変数は単に接続先サーバで設定される環境変数なので、任意のものを指定できる。ansible特有のものは後述

グループ内のサーバに一括指定する場合は、以下のようにvarを指定することもできるが、後述のyamlを用いるのがベストプラクティス

[atlanta]
host1
host2

[atlanta:vars]
ntp_server=ntp.atlanta.example.com
proxy=proxy.atlanta.example.com

グループ間に親子関係を設けたい場合は:children

[southeast]
host1
host2

[notrheast]
host3
host4

[usa:vars]
hoge=fuga

[usa:children]
southeast
northeast

それぞれのグループの設定は/etc/ansible/group_vars/<group名>/<任意のファイル> でyamlで行うこともできる。

group_varsの代わりにhost_varsでも可

これらの設定はPlaybookの設定で上書きされる。

ansible 特有の環境変数

ansibleはsudoなどの、別のユーザになるためのコマンドをbecomeとして抽象化しているので、最後の3つは概ねsudoのオプションと同じ

アドホックコマンド

完全なプレイブックを書く必要がないような、ちょっとしたタスクに使用する。

プレイブック

Tweet This Page
BTC address: 16BQGsTmsKtbMMT2Zwj4qNZnnAncnVCtWo
LTC address: LZuEiJecMZFN48k6jRhoRQZvH8VS1MBuGc