2015-07-28 2 views
0

Я с радостью использовал Vagrant и Chef Solo, но я прочитал, что использование Chef Zero приведет к более легкому переходу на полный Chef Server (что-то, что может произойти в ближайшем будущем проекта) , Когда я начал использовать vagrant plus chef-zero, я получаю ошибку во время работы Chef, описанной ниже.
Vagrant: 1.7.4
Chef (на гостевой машине) - 12.4.1
И когда я делаю $ vagrant up db, это выход из ChefVagrant and Chef Zero - Missing Role

==> db: [2015-07-28T09:14:13+00:00] INFO: Chef-client pid: 2525 
==> db: [2015-07-28T09:14:14+00:00] INFO: HTTP Request Returned 404 Not Found: Object not found: chefzero://localhost:8889/nodes/db-machine 
==> db: [2015-07-28T09:14:14+00:00] INFO: Setting the run_list to ["role[mysql]"] from CLI options 
==> db: [2015-07-28T09:14:14+00:00] INFO: HTTP Request Returned 404 Not Found: Object not found: chefzero://localhost:8889/roles/mysql 
==> db: [2015-07-28T09:14:14+00:00] ERROR: Role mysql (included by 'top  level') is in the runlist but does not exist. Skipping expand. 
==> db: Error expanding the run_list: 
==> db: 
==> db: 
==> db: Missing Role(s) in Run List: 
==> db: ---------------------------- 
==> db: * mysql included by 'top level' 
==> db: 
==> db: Original Run List 
==> db: ----------------- 
==> db: * role[mysql] 

Это отношение немного моего Vagrantfile

machine.vm.provision "chef_zero" do |chef| 
    chef.node_name = @hostname 
    chef.cookbooks_path = "#{@chef_repo}/cookbooks" 
    chef.roles_path = "#{@chef_repo}/roles" 
    chef.environments_path = "#{@chef_repo}/environments" 
    chef.environment = @environment 
    roles.each do |role| 
     chef.add_role role 
    end 
    chef.json = { 
     "guest_folder_path" => guest_path, 
     "ubuntu_user" => @ubuntu_user 
    } 
end 

Когда я войти в виртуальную машину (db) и перейти к /tmp/chef-vagrant

$ cd /tmp/vagrant-chef/ 
    [email protected]:/tmp/vagrant-chef$ ls 
    2107f3d10c0db9887cdf980054c11e35/ client.rb       dna.json 
    8a1f8968cff1cd79d46fc9ca5bd46931/ df5881620e1c72537e51bddcbc6ceb3a/ 
    [email protected]:/tmp/vagrant-chef$ cat client.rb 
    node_name "db-machine" 
    file_cache_path "/var/chef/cache" 
    file_backup_path "/var/chef/backup" 
    cookbook_path ["/tmp/vagrant-chef/df5881620e1c72537e51bddcbc6ceb3a/cookbooks"] 
    role_path "/tmp/vagrant-chef/2107f3d10c0db9887cdf980054c11e35/roles" 
    log_level :info 
    verbose_logging false 
    enable_reporting false 
    encrypted_data_bag_secret nil 
    environment_path "/tmp/vagrant-chef/8a1f8968cff1cd79d46fc9ca5bd46931/environments" 
    environment "develop" 
    chef_zero.enabled true 
    local_mode true 
    add_formatter "null" 

И это содержание/роли

[email protected]:/tmp/vagrant-chef/2107f3d10c0db9887cdf980054c11e35/roles$ ls 
mysql.rb 
[email protected]:/tmp/vagrant-chef/2107f3d10c0db9887cdf980054c11e35/roles$ cat mysql.rb 
name "mysql" 
description "Role for a machine with a mysql db on it" 
run_list "recipe[db]" 
env_run_lists "_default"=>[], 
"production" => ["recipe[git_deploy]", "recipe[db::aws]", "recipe[db]"], 
"staging" =>["recipe[git_deploy]", "recipe[db::aws]", "recipe[db]"], 
"develop" => ["recipe[db]"] 


default_attributes "mysql_bind_address" =>"0.0.0.0", 
    "mysql_db_name"=> "some_db_name", 
    "mysql_password"=> "root", 
    "mysql_datadir" => "/var/lib/mysql", 
    "db_name" => "some_db_name", 
    "db_init_runlist" => [ 
       "some_file.sql", 
       "some_other_file.sql" 
    ] 

ответ

3

Видимо Р.Б. определения ролей не поддерживаются поваром нуля только в формате JSON из них.

Chef Zero Bug reported

Это один закрыт, но относится к другу, что все еще открыт.

У меня такая же проблема, поэтому моим решением будет использование этого gist, чтобы перевести мои роли в JSON и использовать их таким образом с бродягой.

+0

Это действительно верно, 'chef-zero' поддерживает только роль в формате json, см. [О ролях json format] (https://docs.chef.io/roles.html#json) для получения дополнительной информации – MrRoth