厨师运行列表为空。 Chef-Zero Vagrant Provisioner

时间:2015-01-08 01:26:16

标签: vagrant chef provisioning vagrantfile chef-zero

我正在尝试设置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时,我从chef-zero配置器获得以下输出。

==> 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配置器中指定了nodes目录和节点名称。指定“app_node”运行列表的JSON文件存在于nodes目录中,我可以看到该厨师正在将所有cookbook / nodes / roles文件正确复制到服务器。

我觉得我在这里遗漏了一些东西。任何帮助将非常感激。如果有什么不清楚,请告诉我。

4 个答案:

答案 0 :(得分:1)

Vagrant的chef_zero配置程序实际上正在使用chef-solo -c solo.rb -j dna.json。除了挂载目录之外,不使用nodes中的配置。

您可以通过执行以下操作来解决此问题(假设nodes/hostname.jsonconfig.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的运行点是什么。

答案 1 :(得分:0)

您没有指定运行列表。您正在谈论的目录是存储节点数据的位置,而不是存储这些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

如果满足您的需求,您可能需要考虑更多选项。 : - )

答案 2 :(得分:0)

我不确定如何指定本地目录(仍在研究中),但是当您在chef.run_list["stuff"]的Vagrantfile中指定此目录时,vagrant将放置/tmp/vagrant-chef/dna.json

它还会创建一个solo.rb,如果创建了chef.node_name,它将插入node_name之类的内容。

答案 3 :(得分:0)

Vagrant没有向Chef咨询有关现有节点的信息。为了使用您编写的Chef节点文件,您需要告诉流浪者。在您的Vagrantfile中,在chef.node_name = "app_node"

下添加此行
chef.json = JSON.parse(File.read("../kitchen/nodes/app_node.json"))

一旦你这样做,Chef和Vagrant都会在同一个地方寻找节点配置数据。