我是 Chef 和 Ruby 的新手
我需要在命令行上将两个变量传递给 Chef,并让这些变量在配方中可用。
我如何捕获这些值并将它们放入 Chef 中?
我需要这样的东西:
before_deploy command
execute param1 param2
deploy{ param1/param2}
在运行时从命令行从何处获取它们param1
的值。param2
我是 Chef 和 Ruby 的新手
我需要在命令行上将两个变量传递给 Chef,并让这些变量在配方中可用。
我如何捕获这些值并将它们放入 Chef 中?
我需要这样的东西:
before_deploy command
execute param1 param2
deploy{ param1/param2}
在运行时从命令行从何处获取它们param1
的值。param2
当您通过运行配置机器时
chef-solo
或者
chef-client
您不能为这些命令提供任何对配方可见的参数。厨师食谱仅适用于属性。好事(或不那么好)是可以从许多不同的地方设置属性:角色、节点、环境和 json 文件。
最接近您要求的解决方法是
chef-client
或chef-solo
例如:apache 配置。
创建 json 文件:my_attrs.json
{
"apache": {
"listen_port": "81",
"listen_path": "/myapp"
}
}
然后在你的食谱中使用它们:
node[:apache][:listen_port]
node[:apache][:listen_path]
运行chef-client
或chef-solo
与-j
标志。
chef-solo -j my_attrs.json
如果 my_attrs.json 在某个远程服务器上,那么您可以提供一个 url。
chef-solo -j http://remote.host/path/my_attrs.json
如果您的文件名为 example.rb
ruby example.rb argument1 argument2
然后
ARGV.each do|a|
puts "Argument: #{a}"
end
输出:
Argument: argument1
Argument: argument2
您可以通过调用命令在配方中设置变量
nodename = `cat /etc/chef/client.rb | grep "node_name" | sed -e 's/\<node_name\>//g' | sed '/^$/d;s/[[:blank:]]//g' | sed 's/\"//g'`
然后将变量用于其他厨师块
execute "echo nodename for node #{nodename}"
command "echo #{nodename}"
action :run
only_if {nodename == "node1"}
end
这将从 client.rb 文件中获取 node.name 属性,而无需向厨师服务器询问。