我正在寻找一些想法/指南,以使用 Chef 中的环境来指定特定于每个环境(如开发、QA 和 PROD)的属性。
因此,我们希望能够在所有环境中使用相同的说明书,但通过这些属性传递一些特定于环境的变量。
有没有人遇到过这种场景。谢谢!
答案1
这是我们如何在多个环境中使用相同的食谱,但传递特定于环境的不同变量!
1. 创建一个包含以下内容的 env.rb 并通过 Knife 命令上传它。
name "dev"
description "This is for Development Environment"
cookbook "cookbook1", "= 0.1.0"
default_attributes "dev" => { "proxy-server" => "proxydev.internal.com" }
2. 编写一个调用该属性以将其作为变量传递的配方:
ruby_block "configure proxy" do
block do
file = Chef::Util::FileEdit.new "/tmp/proxy/server"
file.insert_line_if_no_match "^proxy", "proxy: #{node["#{dev}"]["proxy-server"]}"
file.write_file
end
end
3. 然后使用此“dev”环境引导您的节点,并将上述配方包含在运行列表中。
结果:最后在节点上,文件“/tmp/proxy/server”应包含如下条目:
proxy: proxydev.internal.com
这对我们有用!