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

tumblr

tumblr(タンブラー)は、メディアミックスブログサービス。ブログとミニブログ、そしてソーシャルブックマークを統合したマイクロブログサービスである。アメリカのDavidville.inc(現: Tumblr, Inc.)により2007年3月1日にサービスが開始された。

vagrantで一度に複数台起動したいし、vagrant upしたときにchef-soloも流したい

どちらもVagrantfileにその設定を書けばいい

vagrantで複数台起動

Vagrantfileの中でconfig.vm.defineメソッドを呼ぶ。そしてその引数ブロックにそのマシンに設定したいことを記述する。 通常はconfig.vm.box = "CentOS6.4"みたいになってるけど、このconfigの部分をブロックの引数にすればいい。どういうことかというと具体的には以下

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.define :web1 do |web|
    web.vm.box = "CentOS6.4"
    web.vm.network :private_network, ip:"192.168.33.100"
  end

  config.vm.define :web2 do |web|
    web.vm.box = "CentOS6.4"
    web.vm.network :private_network, ip:"192.168.33.101"
  end
end

http://docs.vagrantup.com/v2/multi-machine/

vagrantでchef-solo

config.vm.provision "chef_solo" に設定行書いたブロックを渡す。 ブロック内でchefのレシピやdatabagsを指定する。cookbookの場所はVagrantfileの場所から相対パスで指定できる。また、配列で複数のcookbookを指定することもできる。以下の例ではberkshelfで入れたcookbookと自分で作ったsite-cookbooksを指定してる。 また、add_recipeメソッドでrunlistもこのブロックの中で指定する。 具体的には以下。

config.vm.provision :chef_solo do |chef|
  chef.cookbooks_path = ["chef/cookbooks", "chef/site-cookbooks"]
  chef.data_bags_path = "chef/data_bags"
  chef.add_recipe "yum"
  chef.add_recipe "yum::epel"
  chef.add_recipe "server_conf"
  chef.add_recipe "common_packages"
end

http://docs.vagrantup.com/v2/provisioning/chef_solo.html

複数台起動してそれぞれにchefを流し込む

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.define :web1 do |web1|
    web1.vm.box = "CentOS6.4"
    web1.omnibus.chef_version = :latest

    web1.vm.network :private_network, ip: "192.168.33.102"

    web1.vm.provision :chef_solo do |chef|
      chef.cookbooks_path = ["chef/cookbooks", "chef/site-cookbooks"]
      chef.data_bags_path = "chef/data_bags"
      chef.add_recipe "yum"
      chef.add_recipe "yum::epel"
      chef.add_recipe "server_conf"
      chef.add_recipe "common_packages"

    end
  end

  config.vm.define :web2 do |web2|
    web2.vm.box = "CentOS6.4"
    web2.omnibus.chef_version = :latest

    web2.vm.network :private_network, ip: "192.168.33.103"

    web2.vm.provision :chef_solo do |chef|
      chef.cookbooks_path = ["chef/cookbooks", "chef/site-cookbooks"]
      chef.data_bags_path = "chef/data_bags"
      chef.add_recipe "yum"
      chef.add_recipe "yum::epel"
      chef.add_recipe "server_conf"
      chef.add_recipe "common_packages"

    end
  end
end

こんな感じでいけた。 web1とweb2で設定を分離してるので、別々のrunlist流すとかも出来るんだと思う。