AnsibleのplaybookをテストをするのにVagrantで構築した仮想マシンを使っている。VagrantではProvisionerとしてAnsibleが利用可能であり以下のようにすればvagrant upでAnsibleのplaybookを実行することができる。
1 2 3 4 |
$ tree . . ├── Vagrantfile └── playbook.yml |
1 2 3 4 5 6 7 |
Vagrant.configure(2) do |config| config.vm.box = "centos/7" config.vm.provision "ansible" do |ansible| ansible.verbose = true ansible.playbook = "playbook.yml" end end |
テストするときに様々なグループやロールごとに実行したい時もあり、その場合はVagrantfileの中で指定するのでなく、ansibleコマンドでplaybookのテストをするようにしている。
Vagrant環境で手動によるplaybookの実行
provisionでansibleを指定すると以下のパスにVagrant環境のinventoryファイルが生成される。このファイルにsshアクセスするのに必要な情報が鍵情報含めて定義されている。
1 2 3 4 |
$ cat .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory # Generated by Vagrant default ansible_ssh_host=127.0.0.1 ansible_ssh_port=2200 ansible_ssh_user='vagrant' ansible_ssh_private_key_file='.vagrant/machines/default/virtualbox/private_key' |
あとは、上の定義をコマンドラインオプションで渡してあげれば、Vagrant上での容易にplaybookの実行が可能となる。
1 |
ansible default -i .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory -m ping |
ホスト名やinventoryは毎回同じ値を指定することになるので、簡単なスクリプトを用意して実行している。
以下サンプル。
1 2 3 4 5 6 7 8 |
$ tree . . ├── Vagrantfile ├── db.yml ├── vagrant-inventory ├── vagrant.yml ├── vansible.sh └── web.yml |
vansible.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
#!/usr/bin/env bash set -u usage() { cat <<EOF Usage: $0 [playbook <playbook>|update-inventory] [ANSIBLE OPTIONS] EOF } test $# -eq 0 && usage && exit INVENTORY_FILE=".vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory" SUB_COMMAND="$1" # Merge vagrant-inventory test "$SUB_COMMAND" = "update-inventory" && shift && { sed -i -e '/Generated by vansible/,$d' $INVENTORY_FILE cat vagrant-inventory >> $INVENTORY_FILE cat $INVENTORY_FILE exit } # Run playbook test "$SUB_COMMAND" = "playbook" && shift && { if [ $# -eq 0 ]; then echo "<playbook> is not specified." usage && exit 1 fi playbook="$1" shift ansible-${SUB_COMMAND} $playbook \ -i $INVENTORY_FILE \ $@ exit $? } # Run ansible ansible default -i $INVENTORY_FILE $@ |
vagrant.yml
1 2 3 |
- hosts: all tasks: - shell: date |
web
1 2 3 4 |
- hosts: web become: yes tasks: - yum: name=httpd state=present |
db
1 2 3 4 5 |
- hosts: db become: yes tasks: - yum: name=http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm - yum: name=mysql-community-server state=present |
Vagrantfile
1 2 3 4 5 6 7 |
Vagrant.configure(2) do |config| config.vm.box = "centos/7" config.vm.provision "ansible" do |ansible| ansible.verbose = true ansible.playbook = "vagrant.yml" end end |
vagrant-inventory。ここにグループを加えておく。
1 2 3 4 5 6 7 |
# Generated by vansible [web] default [db] default |
inventoryのマージ。
1 2 3 4 5 6 7 8 9 10 11 |
$ ./vansible.sh update-inventory # Generated by Vagrant default ansible_ssh_host=127.0.0.1 ansible_ssh_port=2222 ansible_ssh_user='vagrant' ansible_ssh_private_key_file='.vagrant/machines/default/virtualbox/private_key' # Generated by vansible [web] default [db] default |
ansibleの実行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
$ ./vansible.sh -m ping default | SUCCESS => { "changed": false, "ping": "pong" } $ ./vansible.sh playbook db.yml PLAY [db] ********************************************************************** TASK [setup] ******************************************************************* ok: [default] TASK [yum] ********************************************************************* changed: [default] TASK [yum] ********************************************************************* changed: [default] PLAY RECAP ********************************************************************* default : ok=3 changed=2 unreachable=0 failed=0 $ ./vansible.sh playbook web.yml PLAY [web] ********************************************************************* TASK [setup] ******************************************************************* ok: [default] TASK [yum] ********************************************************************* changed: [default] PLAY RECAP ********************************************************************* default : ok=2 changed=1 unreachable=0 failed=0 |
参考リンク
- http://docs.ansible.com/ansible/guide_vagrant.html
- https://www.vagrantup.com/docs/provisioning/ansible.html
posted with amazlet at 16.06.23
Lorin Hochstein
オライリージャパン
売り上げランキング: 25,752
オライリージャパン
売り上げランキング: 25,752
コメント