Chef 运行列表为空。 Chef-Zero Vagrant Provisioner
Chef run list is empty. Chef-Zero Vagrant Provisioner
我正在尝试设置我的 Chef-Zero 配置器以从节点 JSON 文件执行运行列表。这就是我的 Vagrantfile 的样子。
# -*- mode: ruby -*-
# vi: set ft=ruby :
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "ubuntu-14.04_Base_image"
config.vm.hostname = "app_node"
config.omnibus.chef_version = '12.0.3'
config.vm.provision "chef_zero" do |chef|
chef.cookbooks_path = ["../kitchen/cookbooks", "../kitchen/site-cookbooks"]
chef.roles_path = "../kitchen/roles"
chef.data_bags_path = "../kitchen/data_bags"
chef.nodes_path = "../kitchen/nodes"
chef.node_name = "app_node"
end
end
当我运行 vagrant up 时,我从 chef-zero provisioner 得到以下输出。
==> default: Running provisioner: chef_zero...
==> default: Detected Chef (latest) is already installed
Generating chef JSON and uploading...
==> default: Warning: Chef run list is empty. This may not be what you want.
==> default: Running chef-zero...
==> default: stdin: is not a tty
==> default: [2015-01-08T01:19:51+00:00] INFO: Started chef-zero at http://localhost:8889 with repository at /tmp/vagrant-chef/bec99a1a4e96279669bc5bb3140c0f2e, /tmp/vagrant-chef/2cbca02c0b5c49646d765ae1c9c0738f
==> default: One version per cookbook
==> default: data_bags at /tmp/vagrant-chef/72ac2a17a7c339d91d27a954fc49f8c3/data_bags
==> default: nodes at /tmp/vagrant-chef/83a9002a19a985bce4d26b8c9d050540/nodes
==> default: roles at /tmp/vagrant-chef/9cdb44a6dfefce6070b32ff28cb96535/roles
==> default: [2015-01-08T01:19:51+00:00] INFO: Forking chef instance to converge...
==> default: [2015-01-08T01:19:51+00:00] INFO: *** Chef 12.0.3 ***
==> default: [2015-01-08T01:19:51+00:00] INFO: Chef-client pid: 1731
==> default: [2015-01-08T01:19:57+00:00] INFO: Run List is []
==> default: [2015-01-08T01:19:57+00:00] INFO: Run List expands to []
==> default: [2015-01-08T01:19:57+00:00] INFO: Starting Chef Run for jira
==> default: [2015-01-08T01:19:57+00:00] INFO: Running start handlers
==> default: [2015-01-08T01:19:57+00:00] INFO: Start handlers complete.
==> default: [2015-01-08T01:19:59+00:00] INFO: Chef Run complete in 1.831177529 seconds
==> default: [2015-01-08T01:19:59+00:00] INFO: Skipping removal of unused files from the cache
==> default: [2015-01-08T01:19:59+00:00] INFO: Running report handlers
==> default: [2015-01-08T01:19:59+00:00] INFO: Report handlers complete
我的问题是为什么运行列表是空的?我在 chef_zero 配置器中指定了节点目录和节点名称。 "app_node" 指定运行列表的 JSON 文件存在于节点目录中,我可以看到 Chef 正在将所有 cookbook/nodes/roles 文件正确复制到服务器。
我觉得我在这里遗漏了一些东西。任何帮助将非常感激。如果有任何不清楚的地方,请告诉我。
您没有指定 运行 列表。您所说的目录是存储节点数据的位置,而不是获取那些 JSON 文件的位置。厨师不知道你现在想做什么。
# -*- mode: ruby -*-
# vi: set ft=ruby :
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "ubuntu-14.04_Base_image"
config.vm.hostname = "app_node"
config.omnibus.chef_version = '12.0.3'
config.vm.provision "chef_zero" do |chef|
chef.cookbooks_path = ["../kitchen/cookbooks", "../kitchen/site-cookbooks"]
chef.roles_path = "../kitchen/roles"
chef.data_bags_path = "../kitchen/data_bags"
chef.nodes_path = "../kitchen/nodes"
chef.node_name = "app_node"
chef.run_list = []
chef.json = {}
end
end
这应该允许您设置 运行 列表并包含您想要包含的任何 JSON 属性。
http://docs.vagrantup.com/v2/provisioning/chef_common.html
如果它们满足您的需求,您可能会考虑更多选项。 :-)
我不知道如何指定一个本地目录(还在研究中),但是当你在 chef.run_list["stuff"]
的 Vagrantfile 中指定这个时,vagrant 会放一个 /tmp/vagrant-chef/dna.json
它还会创建一个 solo.rb
,如果创建 chef.node_name
,它将插入类似 node_name 的内容。
Vagrant 不会就现有节点咨询 Chef。为了使用您编写的 Chef 节点文件,您需要将其告知 vagrant。在您的 Vagrantfile 中,将此行添加到 chef.node_name = "app_node"
:
chef.json = JSON.parse(File.read("../kitchen/nodes/app_node.json"))
完成后,Chef 和 Vagrant 都会在同一个地方查找节点配置数据。
Vagrant 的 chef_zero
provisioner 实际上正在使用 chef-solo -c solo.rb -j dna.json
。 nodes
中的配置除了挂载目录外没有被使用。
您可以通过执行以下操作来解决此问题(假设 nodes/hostname.json
与 config.vm.hostname
中的名称相同):
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "chef/centos-6.6"
config.vm.hostname = "foobarhost"
VAGRANT_JSON = JSON.parse(Pathname(__FILE__).dirname.join('../../nodes', "#{config.vm.hostname}.json").read)
config.vm.provision :chef_solo do |chef|
chef.cookbooks_path = ["../../cookbooks", "../../site-cookbooks"]
chef.roles_path = "../../roles"
chef.data_bags_path = "../../data_bags"
chef.verbose_logging = true
chef.run_list = VAGRANT_JSON.delete('run_list') if VAGRANT_JSON['run_list']
# Add JSON Attributes
chef.json = VAGRANT_JSON
end
end
注意我只使用 chef_solo
,因为 运行 chef_zero
真正调用 chef_solo
.