親バカエンジニアのナレッジ帳

webのエンジニアをやっており、日頃の開発で詰まったことや書き残しておきたいことを載せています。育児のイロハという育児サイト(https://ikujip.jp)の開発も行っているため、その開発で使用されている技術についても掲載しています。

VagrantでAnsibleを使う(provision版)

AnsibleはサーバにSSH接続をして記述されたPlaybookの通りに実行されますが、
Vagrantで実行する場合は必ずしもSSH接続は必要ありません。
vagrant provision」コマンドでもPlaybookを実行できるのです。

※ちなみに今回はVagrantの設定方法については省略します。すでに設定済みである想定で進めます。

まずはVagrantfileに以下を記述します。

config.vm.provision "ansible" do |ansible|
  ansible.playbook = "provision.yml"
  ansible.inventory_path = "hosts"
  ansible.limit = 'all'
end

いわゆるprovisionコマンド実行時の動作を指定しているのですが、
指定したhosts(inventory_path)に対して、
playbook(provision.yml)の内容が実行されます。

hostsは以下になります。

[vagrant]
192.168.33.10

「[vagrant]」は任意の値で大丈夫です(ただしplaybookでこの値を使います)。

provision.ymlは以下になります。

---
- hosts: vagrant
  sudo: true
  user: vagrant
  tasks:
    - name: install packages zsh
      yum: name=zsh update_cache=yes

hostsは先ほどhostsファイルの方に設定した値です。
これはyumzshのインストールを実行するという記述です。
いざprovisionをしてみましょう。

vagrant provision
==> default: Running provisioner: ansible...
    default: Running ansible-playbook...
[DEPRECATION WARNING]: Instead of sudo/sudo_user, use become/become_user and
make sure become_method is 'sudo' (default).
This feature will be removed in a
future release. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
 
PLAY [vagrants] ****************************************************************
 
TASK [setup] *******************************************************************
ok: [192.168.33.10]
 
TASK [install packages zsh] ****************************************************
changed: [192.168.33.10]
 
PLAY RECAP *********************************************************************
192.168.33.10              : ok=2    changed=1    unreachable=0    failed=0

なにやら警告は出ていますが、とりあえずinstallは完成です。
VagrantでしかAnsibleを使わない場合はこれでいいのではないでしょうか。