[Vagrant & VirtualBox] Chef: 用意したテンプレートを設定ファイルとして利用する
knife solo からと Vagrant から扱う場合とで細かい部分が違うようで悩みました。
テンプレートを用意する
仮想マシン(node)にログインし、設定ファイルを共有フォルダへコピーします。
[vagrant@localhost html]$ cp /etc/httpd/conf/httpd.conf /vagrant/
Mac(Workstation)にテンプレートとして登録します。
% mv ../vagrant/httpd.conf site-cookbooks/zend/templates/default/httpd.conf.erb
site-cookbooks/zend/templates/default/httpd.conf.erb を編集します。
ポートを変数とし、設定ファイルから変更できるようにしてみます。
#Listen 12.34.56.78:80
Listen <%= node['httpd']['port'] %>
site-cookbooks/zend/recipes/default.rb を編集します。
service "iptables" do
action [:stop, :disable]
end
%w{php mysql-server httpd}.each do |p|
package p do
action :install
end
end
service "httpd" do
action [:start, :enable]
end
template "httpd.conf" do
path "/etc/httpd/conf/httpd.conf"
source "httpd.conf.erb"
mode 0644
end
httpd をたててみます。
knife solo の場合
nodes/zend.json を作成します。
port 番号をこんな形で指定します。
{
"httpd": {
"port": 8080
},
"run_list": [
"recipe[zend]"
]
}
以下で実行します。
% knife solo cook zend
Vagrant の場合
vagrant up
を実行した限りでは nodes/zend.json を見ていませんでした。(削除しても動作します)。
公式サイトを確認すると、Vagrantfile 内から渡すようです。
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "chef/centos-6.5"
config.vm.network "private_network", ip: "192.168.33.10"
config.omnibus.chef_version = "11.6.0"
config.vm.provision "chef_solo" do |chef|
chef.cookbooks_path = "./site-cookbooks"
chef.add_recipe "zend"
chef.json = {
"httpd" => {
"port" => "8080”
}
}
end
end
vagrant up
や vagrant provision
で実行します。