VagrantとAnsibleを触ってみたのでメモ
構成管理に手を出してみたので、メモ。 AnsibleとVagrantで。 本ドキュメントでは手順とハマリポイントを紹介しますが、手順は他の本やブログでもさんざん上がってるので、最小限にとどめます。
目的
実践的な意味での構成管理、プロビジョニングの勘所を探したい
Ansibleを選んだ理由
最初、Itamae かAnsible で迷ってたが、以下の観点からAnsibleを選択
記述方法
ItamaeじゃなくてAnsibleを選択したのは、rubyに詳しくなく、多少離れてるyaml記述の方が学習コストが少なそうだったから。docker fileもyml記述だし。複雑なことをするとツライっぽいけど、そこまで複雑じゃないからいいかな、とも。ここらへんは感覚値です。
ドキュメント
ドキュメントの総数やSOFの記事数も多かったのがポイント。公式ドキュメントの充実度もAnsibleが上だった。
後、moduleがAnsibleのが充実してたし、Andsible-Galaxyもよさげだった。
とか、色々言ったけど、結局決定打はない。というか決定できるほど知らないので、Ansible暫くやってつまったらitamaeでゴニョゴニョしに行く方針。
構成
Mac + VM on VirtualBox + Vagrant + Ansible
構築
Vagrant構築
作業ディレクトリの作成と移動
mkdir ~/workspace/ansibleDemo cd ~/workspace/ansibleDemo
- Vagrantボックスを取得
% vagrant box add centos6-7 https://github.com/CommanderK5/packer-centos-template/releases/download/0.6.7/vagrant-centos-6.7.box
- Vagrant初期化
vagrant init centos6-7
- Vagrantfile作成(下記を追加)
# vim Vagrantfile実行 config.vm.box = "centos6-7 config.vm.network "private_network", ip: "192.168.33.10"
- VM起動
vagrant up
- Ansibleインストール
brew install ansible
- Inventory登録
echo "[TestServer]" > hosts echo "192.168.33.10" >> hosts
- ssh接続先設定
vagrant ssh-config --host 192.168.33.10 >> ~/.ssh/config
% ansible -i hosts 192.168.33.10 -m ping 192.168.33.10 | SUCCESS => { "changed": false, "ping": "pong" }
- playbook作成
# vim playbook.yml - hosts: TestServer become: yes tasks: - ping:
- playbook実行
% ansible-playbook -i hosts playbook.yml
とりあえず、出来たところはここまで
ハマりポイント
Guest VMにpingが通らない
- ansible経由どころか、hostマシン(Mac)からもできなかった
- vagrantのVagrantFileにprivate_networkを記述すれば、staticにIPを決定出来るのかと思ったが、vagrant upしても接続できない。VM内でifconfigうつも、private_networkに記述したIPは表示されず
- VirtualBoxからみるとVMのネットワークのアダプタ1にhost_onlyのインターフェースがあるはず。
- 仕方ないので /etc/sysconfig/network-scripts/ifcfg-eth1を直接編集して、ネットワーク再起動
BOOTPROTO=none ADDR=192.168.33.10 NETMASK=255.255.255.0 ONBOOT=yes DEVICE=eth1
/etc/init.d/networks restart
- 上記で解決
Vagrant up時にWarning: Authentication failure. Retrying...が出る
- sshの設定を調査
% vagrant ssh-config --host 192.168.33.10 Host 192.168.33.10 HostName 127.0.0.1 User vagrant Port 2222 UserKnownHostsFile /dev/null StrictHostKeyChecking no PasswordAuthentication no IdentityFile /Users/Kengo/workspace/ansibleDemo/.vagrant/machines/default/virtualbox/private_key IdentitiesOnly yes LogLevel FATAL
- IdentifyFile内のprivate_keyにマッチするpublic_keyがゲスト側にいなければいけないので、作る
% ssh-keygen -yf .vagrant/machines/default/virtualbox/private_key > public_key % cat public_key ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCg4qWCq3mPom9TzcAdDoDHt61s7tjsmeHaD0pLePYW0p4+qZCr2u8cLk0gJElB7BQc3c3mMuo5iCsYoxrjXbVHpNNUDmRHNLdSxNVO3Z7qLY7VzyQWwoqyqrCcbN3fG/MV+6cs+8d0dcvHGrEYnR9O6Q81VS4sdBucM0J8jQ2oyzumr8QZdXFEEeQbG9SKOVIFpuPHBiOFV+skc22VfgZNlxANBizFV7uguCxhEoQs74L1XMvC1ae7TjVhnIZbZ1063QyXtPgO25TwFqZUsCltqFxgBA032YKZFAtFXyF5vu0pootG91biS9f43dccp8cFuizgLc5FkUYUhjDtNRLV
- ゲスト側にpublic_keyを登録....けど、すでに存在した。
% vagrant ssh Last login: Sun Aug 7 18:41:24 2016 from 10.0.2.2 [vagrant@localhost ~]$ cat .ssh/authorized_keys ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCg4qWCq3mPom9TzcAdDoDHt61s7tjsmeHaD0pLePYW0p4+qZCr2u8cLk0gJElB7BQc3c3mMuo5iCsYoxrjXbVHpNNUDmRHNLdSxNVO3Z7qLY7VzyQWwoqyqrCcbN3fG/MV+6cs+8d0dcvHGrEYnR9O6Q81VS4sdBucM0J8jQ2oyzumr8QZdXFEEeQbG9SKOVIFpuPHBiOFV+skc22VfgZNlxANBizFV7uguCxhEoQs74L1XMvC1ae7TjVhnIZbZ1063QyXtPgO25TwFqZUsCltqFxgBA032YKZFAtFXyF5vu0pootG91biS9f43dccp8cFuizgLc5FkUYUhjDtNRLV vagrant <- ★あれこれはssh-keygenして作ったものと同じ...
- ぐぐったら.sshの設定がいけなかったらしい
[vagrant@localhost ~]$ chmod 0700 /home/vagrant/.ssh/ [vagrant@localhost ~]$ chmod 0600 /home/vagrant/.ssh/authorized_keys
これでおk
ansibleでpingができない
% ansible -i hosts 192.168.33.10 -m ping 192.168.33.10 | UNREACHABLE! => { "changed": false, "msg": "SSH encountered an unknown error during the connection. We recommend you re-run the command using -vvvv, which will enable SSH debugging output to help diagnose the issue", "unreachable": true }
vagrant ssh-config --host 192.168.33.10 >> ~/.ssh/config
- これでpingができた
% ansible-playbook -i hosts playbook.yml PLAY *************************************************************************** TASK [setup] ******************************************************************* ok: [192.168.33.10] TASK [ping] ******************************************************************** ok: [192.168.33.10] PLAY RECAP ********************************************************************* 192.168.33.10 : ok=2 changed=0 unreachable=0 failed=0
以上。ヨサそう