読者です 読者をやめる 読者になる 読者になる

Ansible を使ってみる (コマンド編)

Ansible

構成管理ツールの Ansible についてメモします。

うるう秒対応の際に使用した方も多いのではないでしょうか。

 

まず CentOS6.7 に Ansible をインストールします。

 

Ansibleパッケージは epel リポジトリに入っています。

CentOS6 用の epel リポジトリをインストールします。

Index of /Linux/fedora/epel

# yum -y install http://ftp.riken.jp/Linux/fedora/epel/epel-release-latest-6.noarch.rpm

# yum install ansible

 インストールすると /etc/ansible 配下には以下のファイルとディレクトリができます。

# ls -l /etc/ansible/
合計 36
-rw-r--r--. 1 root root 8629 6月 26 06:12 2015 ansible.cfg 
-rw-r--r--. 1 root root 965 6月 26 06:12 2015 hosts
drwxr-xr-x. 2 root root 4096 6月 26 06:12 2015 roles

ansible.cfg

ansible の設定ファイル

 

hosts

ansible で実行させる対象ホストを指定するファイル。

ansible コマンドのオプションでhostsファイルを指定しなければ

このファイルに記載されている内容が読まれます。

 

roles ディレクトリ

インストール後は空のディレクトリですが、

ここに playbook を複数格納して、

メインの playbook で include ディレクティブを使用して

取り込むことができます。

Playbook Roles and Include Statements — Ansible Documentation

 

インストールが終わったので、ちょっと使ってみます。

コマンドは以下のようにして使います。

ansible <host-pattern> [options]

ローカル・ループバック・アドレス(自分自身)に

ping してみます。

# ansible 127.0.0.1 -m ping -k
127.0.0.1 | success >> {
"changed": false,
"ping": "pong"

-m はモジュールを指定するオプションで

ここでは ping モジュールを指定しています。

 

ping モジュールはホストにpingして成功すれば pong を返すモジュールです。

ping - ホストに接続を試みて、成功すれば pong を返す — Ansible Documentation

 

-k でパスワード認証にしています。

指定していないと公開鍵認証になります。

 

次に /etc/ansible/hosts に記述します。

# cat /etc/ansible/hosts
[test]
127.0.0.1

同様にコマンドを実行します。

# ansible all -m ping -k

SSH password:
127.0.0.1 | success >> {
"changed": false,
"ping": "pong"
}

host-pattern で指定した all は /etc/ansible/hosts に

書かれている全てという意味になります。

# ansible test -m ping -k
SSH password:
127.0.0.1 | success >> {
"changed": false,
"ping": "pong"
}

host-pattern で指定した test は /etc/ansible/hosts で

指定した test グループになります。

 

/etc/ansible/hosts を少し書き換えます。

# cat /etc/ansible/hosts
[test1]
192.168.248.133
[test2]
192.168.248.134

host-pattern で test1 グループを指定して ansible コマンドを実行します。

# ansible test1 -m ping -k
SSH password:
192.168.248.133 | success >> {
"changed": false,
"ping": "pong"
}

/etc/ansible/hosts で書かれている test2 グループは

実行されていないことが分かります。

 

/etc/ansible/hosts とは別の hosts ファイルを作成します。

# echo "127.0.0.1" > hosts

-i でインベントリファイルを指定してコマンドを実行します。

# ansible -i hosts all -m ping -k
SSH password:
127.0.0.1 | success >> {
"changed": false,
"ping": "pong"
}

 実際は複数のモジュールをを組み合わせて、

いっぺんに処理を行ないます。

 

そこで登場するのが playbook

YAML 形式で記述します。

 

少し長くなってしまったので、playbook 編は次回書きます。

 

------

エラーが発生した場合は下記を参照にしてみてください。

 

エラー1:

ansible コマンドを実行した際に OSError: [Errno 2] No such file or directory 

と出力される。 

 

解決策:

openssh-clients パッケージをインストールします。

# yum install openssh-clients

 

エラー2:

ansible コマンドを実行した際に

FAILED => to use the 'ssh' connection type with passwords, you must install the sshpass program

と出力される。 

 

解決策:

sshpass をインストールする。

# yum install sshpass

 

以下を参考にさせていただきました!ありがとうございました!

エージェントレスでシンプルな構成管理ツール「Ansible」入門 - さくらのナレッジ

All モジュール — Ansible Documentation