Chef infra 如何根据我所在的环境设置属性的值?

Chef infra 如何根据我所在的环境设置属性的值?,chef-infra,Chef Infra,当我将更新推送到chef服务器时,我的更新首先被推送到开发节点,然后我最终将它们合并到生产节点 我有两个属性设置为数据库的URL,但是,属性的值根据我是在开发节点还是在生产节点上而不同 如何设置我的属性,以便它根据它所处的环境设置属性的值 以下是我所拥有的: default['test_cookbook']['Development']['URL]='jdbc:mysql://exampleDB1.com' default['test_cookbook']['Production']['URL]

当我将更新推送到chef服务器时,我的更新首先被推送到开发节点,然后我最终将它们合并到生产节点

我有两个属性设置为数据库的URL,但是,属性的值根据我是在开发节点还是在生产节点上而不同

如何设置我的属性,以便它根据它所处的环境设置属性的值

以下是我所拥有的:

default['test_cookbook']['Development']['URL]='jdbc:mysql://exampleDB1.com'
default['test_cookbook']['Production']['URL]='jdbc:mysql://exampleDB2.com'
理想情况下,我希望使用“node.chef_environment”这样的厨师资源,而不是“Production”和“Development”,它将检查环境并根据环境决定要使用的URL。

理想情况下,厨师属性不应以使用它们的环境命名。首选以下环境不可知属性:

default['test\u cookbook']['jdbc\u url']
TL;DR

您可以通过属性文件实现所需的功能。其思想是基于
节点.chef\u环境设置属性

示例
测试\u cookbook/attributes/default.rb

default['test\u cookbook']['jdbc\u url']=case node.chef\u环境
什么时候‘发展’
“jdbc:mysql://exampleDB1.com'
当‘生产’
“jdbc:mysql://exampleDB2.com'
结束
但是…

该变量的值可以通过使用
knife-Environment-edit
编辑环境,或通过编辑该环境的
.json
文件,针对每个厨师环境设置

这种方法应该是首选的,因为JDBCURL可以根据环境进行更改,而无需修改食谱。烹饪书的修改类似于代码更改—涉及分支、版本切换和相关的
README.md
CHANGELOG.md
更新、代码审查和合并。然后,在部署期间,这将级联到使用“新”烹饪书版本

所有这些都是为了改变价值观!不喜欢

示例
development
Chef环境:

“默认属性”:{
“测试食谱”:{
“jdbc_url”:“jdbc:mysql://exampleDB1.com"
}
},
示例<代码>生产厨师环境:

“默认属性”:{
“测试食谱”:{
“jdbc_url”:“jdbc:mysql://exampleDB2.com"
}
},

您可以在属性文件中执行此操作:

default['test_cookbook']['Development']['URL']='jdbc:mysql://exampleDB1.com'
default['test_cookbook']['Production']['URL']='jdbc:mysql://exampleDB2.com'
然后在配方的顶部,将cookbook的节点属性拉入ruby变量,并使用该变量:

attributes = node['test_cookbook'][node.chef_environment]

remote_file attributes['download_location'] do
  source attributes['URL']
end

template attributes['config_file'] do
  source "myapp.conf.erb"
  variables({ attributes: attributes })
end
还有一种通过使用“提升”的策略文件来实现这一点的优雅方式,
policy_group
取代了
chef_environment
,这是推荐的前进方式:


我是将这些添加到已经存在的“.json”文件中,还是为每个环境创建一个新文件?我应该告诉chef在哪里使用json文件?我希望您的节点连接到“开发”和“生产”环境。您可以执行
编辑开发
并添加属性。“生产”也是如此。