在另一个环境厨师文件中包含环境文件

时间:2016-10-26 06:02:08

标签: chef

我的团队中有多个环境,每个环境都有自己的环境文件。 目前,我们必须复制粘贴文件,并更新使用某些共享资源的所有文件。

有没有办法在env文件中包含env文件 - 比如在c ++中使用python / include进行导入

因此我们可以执行基本的env文件并将其包含在所有其他env文件中 谢谢!

1 个答案:

答案 0 :(得分:1)

是的,如果您使用Ruby文件(而不是JSON),您可以组合环境文件。 eval允许您执行任何代码,可以从另一个文件中读取。

我还没有在制作中使用它,但这是我目前所藏匿的内容:

# environments/production.rb

name "production"

env_cookbook_versions = {
  "mysql" => "<= 6.0.18",
}

env_default_attributes = {}

# include the defaults here    
eval File.read("global_settings.rb")

多个环境之间共享的设置(以及尊重专用文件中使用的参数化)可能如下所示:

# environments/global_settings.rb

env_cookbook_versions["apache"] = "= 1.0.0"
cookbook_versions(env_cookbook_versions)

env_default_attributes.merge!({
  "whatever" => "foo"
})
default_attributes(env_default_attributes)

编辑:然后您将使用knife environment from file上传包含global_settings.rb文件的所有环境。一旦这些常见设置发生变化,您就必须再次上传所有相关环境,因为所有逻辑仅在您的工作站上发生。