【问题标题】:Can't override cookbook attributes with Chef environment无法使用 Chef 环境覆盖食谱属性
【发布时间】:2016-09-22 10:22:12
【问题描述】:

我正在尝试覆盖默认的食谱属性(在本例中为 nginx 的属性)。在我的默认食谱属性中,我有这样的内容:

default[:my_nginx_cookbook][:site_name] = 'defaultnginx.site.com'

default[:my_nginx_cookbook][:sites] = {
"default.site.com" => {
default_value1: 'stuff'
default_value2: 'yada yada'
},
"default2.site.com" => {
default_value3: 'even more stuff'
default_value4: 'blah blah'
  }
}

我想在部署说明书的环境中覆盖这些属性(我将调用环境 FOO)。在我的 FOO 环境文件中,我有以下内容:

override_attributes[:my_nginx_cookbook] = {
site_name: 'myrealnginx.site.com'
}

override_attributes[:my_nginx_cookbook][:sites] = {
'myreal.site.com' => {
 real_value1: 'real stuff'
 real_value2: 'real yada'
 },
"myreal2.site.com" => {
real_value3: 'more real stuff'
real_value4: 'real blah'
  }
}

但是,当我在 nginx 节点上运行 chef 客户端时,它只会创建默认站点。我在其他环境中覆盖默认属性没有问题。在这种情况下我是否没有正确覆盖默认值?

【问题讨论】:

  • 您确定这就是您在环境文件中的内容,还是您在解释和歪曲代码?
  • @coderanger 感谢您的回复。除了提供实际的属性和数据之外,这就是我的环境文件中的内容。我有一种预感,问题出在语法上。

标签: nginx chef-infra


【解决方案1】:

在 Chef 环境文件中,您通常会像这样设置属性数据:

override_attributes({
  my_nginx_cookbook: {
    site_name: 'myrealnginx.site.com',
    sites: {
      'myreal.site.com' => {
        real_value1: 'real stuff'
        real_value2: 'real yada'
      },
      'myreal2.site.com' => {
        real_value3: 'more real stuff'
        real_value4: 'real blah'
      },
  },
})

【讨论】:

  • 谢谢,不幸的是,即使使用这种语法,也会创建默认站点,但不会创建环境文件中指定的站点。
  • 使用knife 命令检查以确保文件正在上传并且节点位于正确的组织中。如果收敛成功,您应该能够通过knife node show -l -Fj 检查属性数据。
  • 我将把它标记为答案,因为它在技术上是对所提问题的正确答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-04
  • 2015-04-25
  • 2017-08-21
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
相关资源
最近更新 更多