読者です 読者をやめる 読者になる 読者になる

CentOS v6.5をvagrant/ansible で構築する

目的

ITインフラ構築の自動化ツールであるansibleを使ってcentosを構築できるようにする。 (継続的に利用して、serverspecでのミドルウェア設定まで一気通貫でできるように。)

今回のゴール

詳細

vagrant

vagrant box add centos65 https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box

➜  ~  mkdir vagrant
➜  ~  cd vagrant
➜  vagrant  ls
➜  vagrant  mkdir centos65
➜  vagrant  cd centos65
➜  centos65  ls
➜  centos65  vagrant init centos65
➜  vagrant up
➜  centos65  vagrant ssh-config
Host default
  HostName 127.0.0.1
  User vagrant
  Port 2200
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/Naoki/.vagrant.d/insecure_private_key
  IdentitiesOnly yes
  LogLevel FATAL

➜  echo "127.0.0.1:2200" > hosts

ansible

  • ansible でvagrantとの設定状況の確認.
➜  centos65  ansible 127.0.0.1:2200 -m ping -i hosts -u vagrant --private-key=~/.vagrant.d/insecure_private_key
The authenticity of host '[127.0.0.1]:2200 ([127.0.0.1]:2200)' can't be established.
RSA key fingerprint is cd:72:ab:b1:91:95:69:61:47:73:a1:58:0b:33:2f:ac.
Are you sure you want to continue connecting (yes/no)? yes
127.0.0.1 | success >> {
    "changed": false,
    "ping": "pong"
}
  • ansibleのコマンドに渡す引数が多いので楽にするために環境変数設定
➜  centos65  ANSIBLE_SSH_ARGS=' -F ssh.config' ansible default -m ping -i hosts
default | success >> {
    "changed": false,
    "ping": "pong"
}
  • ansibleの設定ファイルをカレントディレクトリに作成
➜  centos65  cat << EOS > ansible.cfg
heredoc> [defaults]
heredoc> hostfile = hosts
heredoc>
heredoc> [ssh_connection]
heredoc> ssh_args = -F ssh.config
heredoc>
heredoc> EOS

ansible.cfgがきいてるかの確認

➜  centos65  ansible default -m ping
default | success >> {
    "changed": false,
    "ping": "pong"
}
  • ansilbe playbook でhttpdを利用するための設定内容を、httpd.yml 設定ファイルに記述する
➜  centos65  cat << EOS > httpd.yml
heredoc> - hosts: default
heredoc>   sudo: yes
heredoc>   tasks:
heredoc>   - name: install httpd
heredoc>     yum: name=httpd state=installed
heredoc>
heredoc>   - name: start and enable httpd
heredoc>     service: name=httpd state=running enabled=yes
heredoc> EOS
  • ansible-playbookでhttpd.ymlを実行
➜  centos65  ansible-playbook httpd.yml

PLAY [default] ****************************************************************

GATHERING FACTS ***************************************************************
ok: [default]

TASK: [install httpd] *********************************************************
changed: [default]

TASK: [start and enable httpd] ************************************************
changed: [default]

PLAY RECAP ********************************************************************
default                    : ok=3    changed=2    unreachable=0    failed=0
  • vagrantの設定で、通常のプロビジョニングツールをansibleに変更する
➜  centos65  vi Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "centos65"
  config.vm.provision "ansible" do |ansible|
    ansible.playbook = "httpd.yml"
  end
  :
end
  • vagrant provision コマンドで動作を確認する
➜  centos65  vagrant provision
==> default: Running provisioner: ansible...

PLAY [default] ****************************************************************

GATHERING FACTS ***************************************************************
ok: [default]

TASK: [install httpd] *********************************************************
ok: [default]

TASK: [start and enable httpd] ************************************************
ok: [default]

PLAY RECAP ********************************************************************
default                    : ok=3    changed=0    unreachable=0    failed=0

参考URL

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

Ansible - Provisioning - Vagrant Documentation

vagrant - Ansible コトハジメ - Qiita

vagrant で centosを使ってみる - Qiita

A list of base boxes for Vagrant - Vagrantbox.es