厨师独奏缺乏环境支持似乎颇具争议。 一方面,环境的一个特点就是能够将烹饪书钉到特定的环境,而这对于厨师独奏来说绝对没有意义。 另一方面,我们很多人希望能够在环境级别的属性中进行合并,并在使用Vagrant进行testing时使用环境特定的运行列表。 我想我可能find了一个简单的方法来解决这个问题。 假设我在我的所有环境和angular色中都使用了JSON语法,并且遵循以下约定来设置属性(从最低到最高的优先级):
看起来我可以自己parsing这些文件,并使用-j选项将属性注入到chef-solo中。 例如,我可以在我的Vagrantfile中做这样的事情:
chef_env_conf = parse_json("./environments/#{ENV['CHEF_ENVIRONMENT']}.json") chef.json = chef_env_conf["override_attributes"]
由于通过-j选项设置的属性是以正常的优先级应用的 ,所以这可以成为覆盖angular色默认值的另一种方式,并且这可能是在环境未被自动拉入的上下文中所需的全部。
你可以做类似的事情来获得每个环境的运行列表(通过parsingangular色文件):
chef_role_conf = parse_json("./roles/#{role}.json") chef.run_list = chef_role_conf["env_run_lists"][ENV['CHEF_ENVIRONMENT']]
我意识到这不是最优雅的黑客,但它似乎可能是一些人可行的解决scheme。 有谁认为这是一个非常糟糕的主意?
厨师11.6.0终于增加了对厨师独奏环境的支持。