MacのVagrant上にchef-clientでVMをつくる

Post date: 2013/03/20 2:52:14

1。適当なディレクトリ(自分の場合、~/vagrant_anagix)に以下のような client.rb を作る

log_level :info

log_location 'alta_install.log'

node_name 'mac_xxxxxx' # macなクライアント

chef_server_url 'http://192.168.0.122:7500' # 公開サーバにかえる

validation_key '/Users/anagix/.chef/validation.pem'

client_key '/Users/anagix/.chef/client.pem' # client.pem はなければ作られる

file_backup_path '/Users/anagix/.chef/cache/backup' # これ以下は、ユーザアカウントで実行するため

file_cache_path '/Users/anagix/.chef/cache'

checksum_path '/Users/anagix/.chef/cache/checksums'

cache_options( :path => '/Users/anagix/.chef/checksums' )

ポイントは、mac_xxxxxx というclientは存在してはならない。そうすれば、client.pemはchef-clientを実行した時に作られる。

(間違って、clientができてしまったときは、そのclientとclient.pemは削除すること)

逆に、clientを先に作っておき、client.pemを上記の場所におくこともできるが、手間が増える。

2。 ノード'mac_xxxxxx"の設定は、knife node create mac_xxxxxx で、以下を作成する

{

"automatic": {

},

"chef_environment": "_default",

"default": {

},

"json_class": "Chef::Node",

"override": {

},

"normal": {

"memory_size": "512", # VMのメモリサイズ

"mac_address": "ZZZZZZZZZZZ", # 適切なmacアドレス

"alb_server_name": "asd_xxxxxx", # VMのホスト名

"chef_server": "http://192.168.0.xxx:xxxx" # 公開サーバにかえる

},

"chef_type": "node",

"run_list": [

"recipe[alb_vm]" ### Windowsの場合は、”recipe[windows]" を先にいれる

],

"name": "mac_xxxxx"

}

注意: knife node edit (既存のノード)の内容をそのまま変更して置き換えたものはエラーになりcreateに失敗する

3。~/vagrant_anagixで、chef-client -c client.rb を実行する

alb_vmで、Vagrantfileを作成し、そのまま、vagrant upする。Vagrantfileには、alb_serverのroleを実行するよう以下の

記述が作成されている

# -*- mode: ruby -*-

# vi: set ft=ruby :

Vagrant::Config.run do |config|

config.vm.customize ["modifyvm", :id,

"--memory", 512,

"--name", "asd_xxxxxx"]

config.vm.base_mac = "ZZZZZZZZZZZ"

config.vm.box = "asd_xxxxx"

# config.vm.boot_mode = :gui # uncomment if you like Virtual Box console

# The url from where the 'config.vm.box' box will be fetched if it

# doesn't already exist on the user's system.

config.vm.box_url = "http://alb.anagix.com:8180/dist/anagixubuntu20130320.box"

config.vm.forward_port 80, xxxxx # use localhost:xxxx to connect to ALB server via apache

config.vm.forward_port 3000, xxxx # use localhost:xxxx to connect to ALB server directly

config.vm.forward_port 5901, xxxx # use localhost:xxxx to connect to VNC server

# Share an additional folder to the guest VM. The first argument is

# an identifier, the second is the path on the guest to mount the

# folder, and the third is the path on the host to the actual folder.

# config.vm.share_folder "v-data", "/vagrant_data", "../data"

true && config.vm.provision(:chef_client) do |chef|

chef.chef_server_url = ENV['CHEF_SERVER'] || "http://192.168.0.xxx:xxxx"

chef.validation_key_path = "/Users/anagix/.chef/validation.pem"

chef.node_name = "asd_xxxxx"

chef.add_recipe "ubuntu"

chef.add_role "alb_server"

chef.json = {

"mysql" => {

"server_root_password" => "xxxxxxxx"

}

}

end

end