を行うためPython製ツール
Ansibleの最大の特徴はエージェントレス
上記が満たされていればOK
epelリポジトリを設定1)する。epelレポジトリは普段は使用しないよう(enabled=0)にしておく
# rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm # sed -i 's/enabled=1/enabled=0/g' /etc/yum.repos.d/epel.repo
インストール
# yum install --enablerepo=epel ansible
確認
# ansible --version ansible 1.7.2
以下のようなWarnが出る場合があるが、支障がないので放置2)
[WARNING]: The version of gmp you have installed has a known issue regarding timing vulnerabilities when used with pycrypto. If possible, you should update it (ie. yum update gmp).
2015.10.13:追記
6.7でsshパスワードを入力しようとすると以下のエラー
FAILED => to use the 'ssh' connection type with passwords, you must install the sshpass program
以下のオプションでOKという話だったが、うちの環境ではだめ
-c paramiko
結局、素直にsshpassをインストール
yum install --enablerepo=epel sshpass
この状態でアクセスすると以下のエラー
FAILED => Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host.
ssh-keyscan でホストキーを known_hosts に登録
ssh-keyscan 192.168.xx.yyy >> ~/.ssh/known_hosts
インストール
# pkg install ansible
確認
# ansible --version ansible 1.7.2
pipをインストール
# curl -kL https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python
Ansibleのインストール必要なパッケージをインストール(CentOS)
yum -y install gcc python-devel
ansibleのインストール
# pip install ansible
上記が満たされていればOK
/usr/local/etc/ansible/hosts3) にリモートホストをini形式で記述する4)
192.168.1.xxx
host.example.com
[serevrs] host1 host2 ......
ユーザ名、秘密鍵の指定も可能
192.168.1.xxx ansible_ssh_user=ansibleuser ansible_ssh_private_key_file=/home/ansibleuser/.ssh/ansibleuser.pem
linuxからFreeBSDをコントロールしようとすると、pyrhonが見つからないといわれるので以下のように
192.168.1.xxx ansible_python_interpreter=/usr/bin/python
ping モジュールでテスト
前述のhostsファイルを作成していないと
$ ansible myhost -m ping ERROR: Unable to find an inventory file, specify one with -i ?
とエラーになる。
Ansibleはインベントリファイルに書かれたホストにしかアクセスしないので、適当に書いて以下のように指定することも可能
$ echo myhost > hosts
$ ansible -i hosts myhost -m ping myhost | success >> { "changed": false, "ping": "pong" }
ホスト名(IP)の代わりに“all”を指定すると ansible/hostsすべてに実行される
$ ansible all -m ping myhost | success >> { "changed": false, "ping": "pong" } hostB | success >> { ......
-aを指定することで任意のコマンドを実行
$ ansible 192.168.1.xxx -a 'hostname' 192.168.1.xxx | success | rc=0 >> host
–sudo オプションを指定することで、root 権限の必要なコマンドも実行可能5)
$ ansible host --sudo -a id host | success | rc=0 >> uid=0(root) gid=0(root) groups=0(root) ......
AnsibleをゲストOSに押し込んでVagrant環境構築する
Phansible – PHPの開発環境を構築する Vagranfile を生成します。Ansible でプロビジョンを行うので、Playbook の書き方など参考になります。
Python が入っていない NW 機器も Ansible で (一応) 制御できる