Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
13
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

Vagrant+Ansible 環境構築メモ

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
13
Help us understand the problem. What are the problem?