【问题标题】:Chef config object厨师配置对象
【发布时间】:2016-10-12 02:21:43
【问题描述】:

我正在修改一些 Chef Ruby 代码并偶然发现了如下所示的部分:

if config[:role]
    nodes_to_process = [config[:role], ]
else
    nodes_to_process = rest.get('nodes').keys()
end

我已打印出在该数组中找到的值,但不明白为什么您只会根据在 :role 中找到的值执行那段代码。

这是 Chef 或 Knife 类的一部分吗?

谢谢

【问题讨论】:

  • 这个 sn-p 是从哪里来的?
  • 我在工作场所获得的新代码
  • 如果没有其他代码的任何线索,我们应该如何猜测它在做什么?
  • 但是,我假设这是一个刀插件,所以你可以看看here。大致我认为这是将命令应用于所有节点或只是基于它们在运行列表中的角色的子集。
  • @Tensibai,你是对的!谢谢

标签: ruby chef-infra


【解决方案1】:

我想通了。它与您在创建自定义刀插件时可以添加的选项有关。如果我有一些名为 version 的选项,以及我已配置的一些设置,那么我可以执行以下操作:

What my option may look like...
option :omg,
  :short => '-V',
  :long => '--version',
  :boolean => true,
  :description => "Print items with this version or lower."

Enter the following in your terminal...
$ knife my_custom_plugin --version 1.0

In your code...
def run
  if config[:version]
    # If the version flag was passed in
    puts "Version flag passed in."
  else
    # If the version flag was not passed in
    puts "Version flag not passed in."
  end
end

Custom Knife Plugin Reference

【讨论】: