ansibleについてのメモなど。
ansibleって何?
構成管理ツール。一度設定しておけばサーバーの細かいインストールとかを自動でやってくれるツール。chefの兄弟みたいなもの(だと私は認識しています。)
インストールする側からコマンドをたたけば一発で複数サーバーにインストールなんてことも可能です。インストールされる側にはあらかじめなんの準備もいらないのがうれしい。
インストール前準備
2台のホスト(インストールする方とされる方)の用意。VPSを用意するかvagrantなどの仮想構築環境を使うのがいいです。自分はこの方法で2台のホストを動かして実行しました。
私の場合、installする環境が192.168.33.10 される側が192.168.33.11とします。ともにCentOS6.7です。
ansibleインストール
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#yumにもrprmにもansibleがないことを確認 yum list | grep ansible rpm -qa | grep ansible #epelリポジトリをインストール yum install epel-release #リポジトリが追加されていることを確認 ls -ls /etc/yum.repos.d/ #ansibleのパッケージがが登録されていることを確認 rpm -qa | grep ansible yum list | grep ansible #インストール yum -y install ansible #インストールされていることを確認 ansible -v |
次にやることですが、どのホストをインストールするのかの情報を登録しておきます。
これまたいろんな書き方があるようですが、一番簡単なのは/etc/ansible/hostsに管理対象のホストを登録します。
今回の場合このファイルに
1 |
192.168.33.11 |
と書いてあげましょう。
SSH鍵登録
この状態でansible 192.168.33.11 -m ping とうつと( ansible 対象ホスト 命令 というコマンド)
下記のメッセージが帰ってきます。
1 2 3 4 5 |
192.168.33.11 | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh: Permission denied (publickey,password).\r\n", "unreachable": true } |
SSHが登録されていませんよ~というエラーですね。
簡単な対応としてはパスワードの入力補完でkオプションをつけてあげるとパスワード
をいれてあげればOK。今度はSUCCESSというメッセージが帰ってきます。
1 2 3 4 5 6 |
ansible 192.168.33.11 -m ping -k SSH password: 192.168.33.11 | SUCCESS => { "changed": false, "ping": "pong" } |
ただこの方法だと毎回面倒なため、下記のように鍵を登録してあげるのがベターです。
1 2 |
ssh-keygen#鍵生成 ssh-copy-id -i ~/.ssh/id_rsa.pub(公開鍵パス) 192.168.33.11(対象のホスト) #これを対象のホストに送る |
今後は下記コマンドだけで飛ばせます。
ansible 192.168.33.11 -m ping
また鍵を明示的に指定するには
ansbile --private-key=(秘密鍵のパス) になります。
具体的なソフトウェアのインストール
例えばこのホストから対象ホストにapache(httpd)をインストールしてみましょう。
yaml形式で下記のようなファイルを作ります。
yum.yaml(拡張子がyamlであればファイル名は別になんでもいいです。)
1 2 3 4 5 6 7 8 9 10 |
#hostを指定allだと/etc/ansible/hostsに登録してあるものすべてが対象になります。 - hosts: all #作業するユーザー remote_user: root #実際に行う作業です。 tasks: #nameはコメント的なもので実行時画面に表示されます。 - name: yum httpd install #ここが実際に実行されるコマンドになります。 yum: name=httpd state=latest |
これを書いた後、
ansible-playbook yum.yaml と入力すると一気にインストールができます。
最終的なansibleコマンドは下記で落ち着きそうです。
1 2 |
#ホストファイルには ホスト名:ポートまで明記(22でない場合) ansible-playbook -i ホストファイルのパス --user=matsumoto(SSHログイン時のパス) --private-key=(秘密鍵のパス) プレイブック名 |