我应该使用这个简单的黑客来解决厨师独奏缺乏环境支持的问题吗?

Modified on: Sat, 31 Aug 2019 07:20:02 +0800

Chef-solo缺乏环境支持似乎颇具争议。一方面,环境的一个特点是能够将烹饪书固定到特定环境,这对于厨师独奏来说完全没有意义。另一方面,我们很多人希望能够在使用Vagrant进行测试时合并环境级属性并使用特定于环境的运行列表。我想我可能已经找到了解决这个问题的简单方法。假设我在所有环境和角色中使用JSON语法,并且我坚持以下约定来设置属性(从最低优先级到最高优先级):

  1. 在cookbook属性文件中默认
  2. 角色文件中的默认值
  3. 覆盖环境文件
  4. 醇>

    看起来我可以自己解析这些文件,并使用-j选项将属性注入chef-solo。例如,我可以在我的Vagrantfile中执行类似的操作:

    chef_env_conf = parse_json("./environments/#{ENV['CHEF_ENVIRONMENT']}.json")
    chef.json = chef_env_conf["override_attributes"]
    

    由于通过-j选项设置的属性应用于普通优先级,这可以是覆盖角色默认值的另一种方式,在环境未自动拉入的环境中,这可能就是您所需要的。

    你可以做类似的事情来获取每个环境的运行列表(通过解析角色文件):

    chef_role_conf = parse_json("./roles/#{role}.json")
    chef.run_list = chef_role_conf["env_run_lists"][ENV['CHEF_ENVIRONMENT']]
    

    我意识到这不是最优雅的黑客,但它似乎对某些人来说可能是一个可行的解决方案。有人认为这是一个非常糟糕的主意吗?

最佳答案

Chef 11.6.0最终在chef-solo中添加了对环境的支持。

作者:tmatilai

相关问答

添加新评论