Posted at

Vagrant+Ansible 環境構築メモ

More than 3 years have passed since last update.

Homebrew caks でインストール (Macの場合)


Homebrewでインストール

$ brew cask install ansible



動作確認バージョン

下記動作確認時のバージョン


各種バージョン確認

$ VBoxManage  -v

5.0.6r103037

$ vagrant -v
Vagrant 1.7.4

$ ansible --version
ansible 1.9.2



vagrant で仮想端末作成

作業用のディレクトリ作成し、その配下にVagrantfileを用意する。

$ mkdir ansible_test

$ cd ansible_test
$ vagrant init centos/7

これでひな形の Vagrantfile が出来ているので、以下の状態に変更する。


Vagrantfile

Vagrant.configure(2) do |config|

config.vm.box = "centos/7"
config.vm.network "private_network", ip: "192.168.33.10"
end


ここまでの確認として vagrant up で仮想環境が立ち上がることを確認。

仮想環境が立ち上がったら vagrant ssh でアクセスできることを確認。

$ vagrant ssh

[vagrant@localhost ~]$ yum list installed


Ansible の準備

ホストの Vagrantfile を作成した場所に provisioning ディレクトリを作成。

その配下にAnsibleが参照するInventoryファイル(ファイル名はhosts)を作成する。


Inventoryファイルの用意

[vagrants]

192.168.33.10


Ansible経由でping実行してみる


ping

$ ansible -i provisioning/hosts all -m ping -u vagrant --private-key=.vagrant/machines/default/virtualbox/private_key



実行結果

192.168.33.10 | success >> {

"changed": false,
"ping": "pong"
}


設定ファイルの用意

ssh接続情報を ssh.config に出力

$ vagrant ssh-config > ssh.config


ssh.config

Host 192.168.33.10

HostName 192.168.33.10
User vagrant
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile path/to/private_key
IdentitiesOnly yes
LogLevel FATAL


Ansible の実行オプションを ansible.cfg に記述


ansible.cfg

[defaults]

hostfile = provisioning/hosts

[ssh_connection]
ssh_args = -F ssh.config


もう一度 ping してみる

$ ansible all -m ping

192.168.33.10 | success >> {
"changed": false,
"ping": "pong"
}


サンドボックスを有効化

$ vagrant sandbox on


PlayBookの作成


provisioning/site.yml

---

- hosts: vagrants
sudo: yes
user: vagrant
tasks:
- name: install packages git
yum: name=git update_cache=yes

上記PlayBookをvagrant provisionで読み込むように設定

Vagrant.configure(2) do |config|

config.vm.box = "centos/7"
config.vm.network "private_network", ip: "192.168.33.10"

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


provision実行


provision実行

$ vagrant provision

==> default: Running provisioner: ansible...

PLAY [vagrants] ***************************************************************

GATHERING FACTS ***************************************************************
ok: [192.168.33.10]

TASK: [install packages git] **************************************************
changed: [192.168.33.10]

PLAY RECAP ********************************************************************
192.168.33.10 : ok=2 changed=1 unreachable=0 failed=0


自動的に仮想端末へgitがインストールされる。

仮想端末へsshでログインして git コマンドが使えることを確認。


playbookを個別に実行

以下のようにタグを指定して実行することも可能。

$ ansible-playbook site.yml -t hoge


参考


Vagrant関連

Atlas by HashiCorp

Ansible - Provisioning - Vagrant Documentation


Ansible関連

Ansible Documentation

AnsibleとVagrantで開発環境を構築する - さくらのナレッジ

Vagrant と Ansible を組み合わせて使う | CUBE SUGAR STORAGE

Using Vagrant and Ansible — Ansible Documentation

ansible/ansible-examples

Ansibleでよく使うファイル操作モジュール | Developers.IO

Ansible Galaxy | Find, reuse, and share the best Ansible content

実践!Ansibleベストプラクティス(前編) - さくらのナレッジ

実践!Ansibleベストプラクティス(後編) - さくらのナレッジ

Best Practices — Ansible Documentation