Chef Soloローカル開発環境の自動構築  ~Vagrantから直接クックブックを適用~

Vagrantには、起動時または任意のタイミングでクックブックを適用する機能が予め用意されており、この機能のことをVagrantではProvisioner(プロビジョナー)と呼ぶ。
Chef SoloまたはChef Client以外に、Puppetやシェルスクリプトなどにも対応。 

1. Vagrantfileへの記述
VagrantのプロビジョニングにChef Soloを使うには、
  Vagrantfileにconfig.vm.provisionの箇所のコードを追記する。
ーーーーーーーーーーーーーーーーーーーーーーーーー

# -*- mode: ruby -*-
# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  config.vm.box = "opscode-centos-7.2"
  config.vm.box_url = "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-7.2_chef-provisionerless.box"
  # Chef Clientの最新版を利用可能にする
  config.omnibus.chef_version = :latest

  config.vm.provision :chef_solo do |chef|
  # ①クックブックの配置場所を指定
  chef.cookbooks_path = "./cookbooks"
  # ②Attributeの定義
  chef.json = {
      nginx: {
         env: "ruby"
      },
      fluentd: {
          installer: "rpm"
      },
      mysql: {
          server_root_password: 'rootpass'
      }
  }
  # ③適用するクックブックの定義
  chef.run_list = %w[
      recipe[yum-epel]
      recipe[httpd]
      recipe[mysql]
      recipe[fluentd]
   ]
   end
end
ーーーーーーーーーーーーーーーーーーーーーーーーー

※①…クックブックの配置場所をVagrantfileと同じディレクトリにあるcookbooksディレクトを指定
 ②クックブックの適用の際に利用するAttributeを定義
 ③…適用するクックブックを定義

 

2. Chef Clinet/Chef Soloを自動インストール
* Bentoのboxには、Chef ClinetやChef Soloが含まれていない。
  そのため、これらを自動インストールしてくれるvagrant-omnibusプラグインを利用。
  このプラグインを使うと、仮想サーバの起動時にChef Clinetがインストールされているかを確認したうえで、インストールされていない場合は、インターネット経由でインストーラーをダウンロードし自動で仮想サーバにインストールしてくれる。

vagrant plugin install vagrant-omnibus

※この機能を有効にするには、Vagrantfileに以下を指定しておく。
config.omnibus.chef_version = :latest