Automation chef模板通过参数重写变量

Automation chef模板通过参数重写变量,automation,chef-infra,chef-recipe,chef-solo,Automation,Chef Infra,Chef Recipe,Chef Solo,我是新来的厨师索洛opscode,并没有找到下面的方法 我正在编写一个模板,并将数据作为变量传递给它 -配方 -雇员再培训局 它的所有工作都很好,我想进一步,而我执行它如下 sudo chef-solo -c solo.rb -j solo.json @development["password"]=my_new_passwd @development[“password”]应该被覆盖到我传递的新值,而不是从数据包中 有什么提示吗 或者有没有合并两个数据包的想法 编辑: 我想把它添加到chef

我是新来的厨师索洛opscode,并没有找到下面的方法

我正在编写一个模板,并将数据作为变量传递给它

-配方 -雇员再培训局 它的所有工作都很好,我想进一步,而我执行它如下

sudo chef-solo -c solo.rb -j solo.json @development["password"]=my_new_passwd
@development[“password”]
应该被覆盖到我传递的新值,而不是从数据包中

有什么提示吗

或者有没有合并两个数据包的想法

编辑:

我想把它添加到chef init的某个地方,这样Hash类就有了deep_merge方法,你知道把它放在哪里吗?我尝试了配方和solo.rb的顶部,但没有成功。


sudo chef solo-c solo.rb-j solo.json@development[“password”]=my_new_passwd
将不起作用,因为
@development
是一个在命令行上不知道的Ruby变量名我知道,我想做一些类似的事情。你的solo.json已经是最重要、最“临时”的了将单个数据传递给Chef的方法,所以尝试重写将很困难。也许您可以尝试将数据放置在节点属性中,而不是数据包中,因为前者更容易覆盖:您将应用程序配置放置在分配给节点的角色中,然后通过solo.json.that great@cmur2中给出的节点属性覆盖一些设置,任何例子都会很有帮助。
sudo chef solo-c solo.rb-j solo.json@development[“password”]=my_new_passwd
将不起作用,因为
@development
是一个在命令行上未知的Ruby变量名。我知道,我想做一些类似的事情。事情是你的solo.json已经是最重要、最“特别”的了将单个数据传递给Chef的方法,所以尝试重写将很困难。也许您可以尝试将数据放置在节点属性中,而不是数据包中,因为前者允许更容易的覆盖:您将应用程序配置放置在分配给节点的角色中,然后通过solo.json中给出的节点属性覆盖一些设置。that’s great@cmur2,任何示例都会非常有帮助。
development:
  adapter: <%= @development["adapter"] %>
  database: <%= @development["database"] %>
  username: <%= @development["username"] %>
  password: <%= @development["password"] %>
  encoding: <%= @development["encoding"] %>
  host: <%= @development["host"] %>

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  adapter: <%= @test["adapter"] %>
  database: <%= @test["database"] %>
  username: <%= @test["username"] %>
  password: <%= @test["password"] %>
  encoding: <%= @test["encoding"] %>
  host: <%= @test["host"] %>

production:
  adapter: <%= @production["adapter"] %>
  database: <%= @production["database"] %>
  username: <%= @production["username"] %>
  password: <%= @production["password"] %>
  encoding: <%= @production["encoding"] %>
  host: <%= @production["host"] %>
{
  "id" : "app",

   "database.yml" : {
    "development": {
      "adapter"   : "mysql2",
      "database"  : "app_site",
      "username"  : "root",
      "password"  : "",
      "encoding"  : "utf8",
      "host"      : "localhost"
    } ,
    "production" : {
      "adapter"   : "mysql2",
      "database"  : "app_site",
      "username"  : "root",
      "password"  : "",
      "encoding"  : "utf8",
      "host"      : "localhost"
    } ,
    "test": {
      "adapter"   : "mysql2",
      "database"  : "app_site_test",
      "username"  : "root",
      "password"  : "",
      "encoding"  : "utf8",
      "host"      : "localhost"
    }
  },

  "config.yml":{
     "development":{},
     "production" :{},
     "test":{}
  }
}
sudo chef-solo -c solo.rb -j solo.json @development["password"]=my_new_passwd
HOME = "#{ENV['HOME']}"

app_config = data_bag_item("config","app")
override_config = data_bag_item("config","override")

# merging override into app
Chef::Mixin::DeepMerge.deep_merge! override_config["database.yml"], app_config["database.yml"]

template "#{HOME}/app/config/database.yml" do
  local true
  source "#{HOME}/app/config/database.yml.erb"
  variables app_config["database.yml"]
end