Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Chef infra 如何覆盖Chef中的默认属性_Chef Infra - Fatal编程技术网

Chef infra 如何覆盖Chef中的默认属性

Chef infra 如何覆盖Chef中的默认属性,chef-infra,Chef Infra,我是厨师的新手,不过我现在明白这个概念了。我理解默认属性与覆盖属性的概念,但是我如何在环境中做到这一点呢?特别是,我想覆盖其他人定义的数据包属性。例如,如果我们有以下数据包 { "id" : "common", "some_server" : "www.some_server.com" } 我希望我的“环境”中的所有食谱都用“www.my_server.com”覆盖“some_server”,这有意义吗?谢谢 一个数据包只是一个数据包——一个键值对列表。它与环境、属性和其他任何东西

我是厨师的新手,不过我现在明白这个概念了。我理解默认属性与覆盖属性的概念,但是我如何在环境中做到这一点呢?特别是,我想覆盖其他人定义的数据包属性。例如,如果我们有以下数据包

{
   "id" : "common",
   "some_server" : "www.some_server.com"
}

我希望我的“环境”中的所有食谱都用“www.my_server.com”覆盖“some_server”,这有意义吗?谢谢

一个数据包只是一个数据包——一个键值对列表。它与环境、属性和其他任何东西都无关。如果你想让你的数据包根据环境提供不同的数据,你必须教会它

一个选项是将环境名称作为数据的一部分:

{
  "id":"common",
  "devel": {
    "some_server": ""www.some_server.com"
  },
  "staging": {
    "some_server: "www.my_server.com"
  }
}
然后你可以像这样读取配方中的数据:

data_bag[node.environment]["some_server"]

如果您有开发和登台环境。

我遵循了这篇[文章][1]的建议 [1]: , 它建议对“全局”值使用数据包,即所有配方都将使用的值,而不管环境如何,并对我的环境中特定于环境的变量进行编码,并将我的节点设置为该环境。因此,不建议在数据包中包含以下内容

{
  "id":"common",
  "devel": {
    "some_server": ""www.some_server.com"
  },
  "staging": {
    "some_server: "www.my_server.com"
  }
}
相反,我做了以下工作

比如说,在我的setup_server cookbook中,我可能在attributes/default.rb中定义了以下属性

default.setup_server.a_server = "www.some_server.com"
…还有一个简单的食谱

puts "server " + "#{node.setup_server.a_server}"
如果我将节点分配到_默认环境,则输出将为:

server = www.some_server.com
现在,我创建一个名为my_environment的环境,并定义以下覆盖属性

environments/my_environment.json:
{
  "name"  : "my_environment",
  "override_attributes" : {
    "setup_server" : {
      "a_server": "www.my_server.com"
    }
  }
}
如果我现在将我的烹饪书分配到“my_environment”环境,并重新运行食谱,我现在得到

server = www.my_server.com

我读过所有的文件,甚至还有书。但是他们没有一个人直接回答我的问题。你提供的链接甚至没有提到环境。我不知道你是想要数据包还是环境。数据包不是真正的属性,请参见:如果要覆盖它们,必须添加更多结构。参见示例:如果当前数据包如此简单,那么您可能需要与该开发人员合作来扩展它。和12。他们都谈论环境。你的问题没有意义-数据包!=Aaron,上面的数据包只是一个例子,真实的数据包有更多的项目。就像我说的,我是厨师的新手,所以如果我听起来很困惑,我会感到困惑。一般来说,我想知道如何使用在分配给我的角色的环境中定义的变量。具体地说,我想知道我在角色中改变环境的过程,瞧,我的属性值会改变,而不会改变我的食谱中的任何内容。