Chef や Puppet で有名な設定管理ツールの中で、学習コストが少ないと評判のAnsibleについて、導入手順をまとめました。
1. インストール
Ansible ではエージェント(管理される側に導入するソフト)が不要のため、管理元となるコンピュータにインストールを行います。
ここでは、Mac OS Xを利用しています。
* Linuxのようにyumが使えないため、brew をインストールする必要が有ります。
1 2 |
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" |
でインストールを行い、brew doctor で正常にインストールが完了したことを確認した上で、以下の作業を続けてください。
以下のコマンドでAnsibleのインストールを行います。
$ brew install ansible
==> Installing ansible dependency: libyaml
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/libyaml-0.1
######################################################################## 100.0%
==> Pouring libyaml-0.1.6.mavericks.bottle.tar.gz
/usr/local/Cellar/libyaml/0.1.6: 7 files, 348K
==> Installing ansible
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/ansible-1.7
######################################################################## 100.0%
==> Pouring ansible-1.7.1.mavericks.bottle.tar.gz
==> Caveats
If you need Python to find the installed site-packages:
mkdir -p ~/Library/Python/2.7/lib/python/site-packages
echo ‘/usr/local/lib/python2.7/site-packages’ > ~/Library/Python/2.7/lib/python/site-packages/homebrew.pth
==> Summary
/usr/local/Cellar/ansible/1.7.1: 613 files, 7.1M
2. 初期設定
目標は以下のコマンドを実行することです。
1 |
$ ansible foo.jp -m ping -u myname --ask-pass # foo.jp/myname はsshで接続するホスト名/ユーザ名 |
初期状態では、管理対象として登録されているサーバがないため接続できません。ansibleコマンドを実行すると以下のようなエラーが発生します。
ERROR: Unable to find an inventory file, specify one with -i ?
$ mkdir /usr/local/etc/ansible/ # 設定ファイル置き場所の作成
$ cd /usr/local/etc/ansible
$ echo ‘foo.jp’ > hosts # foo.jpを接続先に追加
[tip] sshpass のインストール
Mac OS利用時にここまでの状態で目標のコマンドを実行すると、以下のエラーが発生します。
FAILED => to use the ‘ssh’ connection type with passwords, you must install the sshpass program
$ curl -O -L http://downloads.sourceforge.net/project/sshpass/sshpass/1.05/sshpass-1.05.tar.gz #
sshpassを取得
$ tar xvzf sshpass-1.05.tar.gz # 解凍
$ cd sshpass-1.05
$ ./configure
$ make
$ sudo make install
[tip] 公開鍵認証の設定
Mac OS利用時にここまでの状態で目標のコマンドを実行すると、以下のエラーが発生します。
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.
別途作成した公開鍵認証の方法を参照して設定を行ってください。
ここまでで大方必要な設定は完了です。
[tip] python パスの設定
Ansible では管理先サーバにpythonがインストールされている必要があります。
初期状態では、/usr/bin/python にpythonがインストールされていることを前提として動くため、インストール先が異なる場合は以下のようなエラーが発生します。
FAILED >> {
“failed”: true,
“msg”: “/usr/bin/python: not found\r\n”,
“parsed”: false
}
対処法は公式のFAQに記載されていましたが、2. 初期設定で作成したhostsファイルの中に設定を追加するだけで解決できます。
$ cat hosts
foo.jp ansible_python_interpreter=/usr/local/bin/python
このように、hostsファイルに変数ansible_python_interpreterを追加し、pythonが存在するパスを指定します。
$ ssh-agent bash # 公開鍵認証を利用する
$ ansible foo.jp -m ping -u myname –ask-pass # foo.jp/myname はsshで接続するホスト名/ユーザ名
SSH password: # ssh 接続先のパスワード
sudo password [defaults to SSH password]:
foo.jp | success >> {
“changed”: false,
“ping”: “pong”
}
これで接続完了です。
Pingback: Mcryptの導入 | AICS
Pingback: Gregory Smith