我在EC2上有一个基于Vagrant和登台/制作的开发环境。 供应是由厨师完成的。 我正在考虑为不同环境组织凭据的最佳方式。
例如,我有一本食谱数据库和应用程序。 我已经拥有了可以轻松放入我的环境* .json文件的属性,因为它们适用于所有烹饪书。例如, git_server 。 但是后来我有了像 redis_host 这样的属性,这些属性与cookbook和cookbook不同。 我的应用程序例如应该使用 app.redis.intern ,数据库机器应该使用 db.redis.intern
我可以知道创建属性,例如 redis_host_app 和 redis_host_db ,以使它们仍然在环境中,或者我可以将它们设置在特定食谱中的属性文件中。但后来我必须检查当前哪个环境处于活动状态以决定放入哪些值。因此每个属性文件都有一个switch / if块。
我也可以使用每个环境的数据包,但这也会在命名行包时结束,例如 redis_host_app
这是推荐的解决方法?
答案 0 :(得分:1)
需要保护凭据,因此我反对使用节点属性。相反,我会提供两种选择之一:
您可以使用节点的环境来确定要查找的数据条:
bag_item[node.chef_environment]["some_other_key"]
答案 1 :(得分:0)
我想你可能会得到尽可能多的答案,但这里有我的答案:
带有不同属性文件的1 env cookbook
common.rb
表示所有环境中常见的属性(假设是默认的smtp服务器)envA.rb
有一个像return if node.chef_environment != 'envA'
envB.rb
还有警卫在envA中,并且envB为redis_host_app
和redis_host_db
属性。
像这样你可以锁定每个env正确版本的这本食谱(并且也可以轻松回滚)。
缺点是您必须将此食谱设置在每个节点运行列表的顶部(但可以在引导时完成)或使您的烹饪书依赖它
在您的app cookbook中有一个属性default['my_app']['redis_host'] = node['redis_host_app']
。
并在db cookbook和属性default['my_db']['redis_host'] = 'node['redis_host_db']
像这样,您可能会在您的应用程序食谱上有一个包装器食谱,它会覆盖redis_host
属性,而不必覆盖env属性。