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

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

  1. 默认在食谱属性文件中
  2. 在angular色文件中默认
  3. 在环境文件中覆盖

看起来我可以自己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终于增加了对厨师独奏环境的支持。