有没有办法在 Chef 中在运行时传递参数?

Man*_*hwa 6 chef

我想chef-client在运行时传递一些属性。有没有办法做同样的事情?我正在研究chef-client -j选项,但据我所知,它可用于指定 run_list。我可以在其中传递一些属性吗?如果是,如何?

jti*_*man 9

是的,您可以使用-jjson 文件选项来填充节点属性。

{
  "my_attribute": "I like attributes!"
}
Run Code Online (Sandbox Code Playgroud)

这将使名为的属性my_attribute在您的食谱中可用。例如,

Chef::Log.info(node['my_attribute'])
Run Code Online (Sandbox Code Playgroud)

或者,

if node['my_attribute'] =~ /like/
  package "foo-likes-attributes" do
    action :install
  end
end
Run Code Online (Sandbox Code Playgroud)

设置初始 run_list 是 Chef 客户端 json 属性文件的最常见用途。但是,如果您使用的是 Chef Client + Chef Server,则可以通过 webui(开源 Chef 服务器)或管理控制台(Opscode Hosted/Private Chef)或通过(knife node edit如果您是)简单地修改服务器上的节点对象使用命令行工具knife。

注意,使用JSON文件就像修改服务器上的节点对象一样,这里设置的属性就像在配方中使用时一样“正常”优先,这些属性值最后会保存到服务器上的节点对象中成功的运行。