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

2013/03/19 19:52 に 森山誠二郎 が投稿   [ 2013/03/20 0:25 に更新しました ]
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
Comments