【问题标题】:Can't replace attributes during a chef-client run在厨师客户端运行期间无法替换属性
【发布时间】:2017-11-13 20:41:21
【问题描述】:

我正在尝试用我的厨师服务器环境中设置的属性覆盖我在食谱的属性文件中设置的默认属性。

这是我的属性文件:

default['app']                  = 'tomcat_app' 
default['environment']          = 'env'
default['instance']             = 'tier'
default['application_name']     = "#{default['environment']}/#{default['app']}"
default['environment_instance'] = "#{default['environment']}/#{default['app']}/#{default['instance']}"
default['app_owner']            = 'app_user'
default['app_owner_group']      = 'app_group'

我的环境是这样配置的:

 {
    "app": {
        "tomcat_app": "NGS"
    },
    "environment": {
        "env": "/Test/Apps"
    },
    "instance": {
        "tier": "tst"
    },
    "app_owner": {
        "app_user": "ngsint"
    },
    "app_owner_group": {
        "app_group": "batchdev"
    },
    "override_attributes": {}
}

但是,在 chef-client 运行期间,这些值不会被替换。我已经在环境的默认属性中设置了这个。

【问题讨论】:

    标签: chef-infra


    【解决方案1】:

    属性应该在default_attributesHash/Object中,应该是这样的:

      "default_attributes": {
        "app": {
            "tomcat_app": "NGS"
        },
        "environment": {
            "env": "/Test/Apps"
        },
        "instance": {
            "tier": "tst"
        },
        "app_owner": {
            "app_user": "ngsint"
        },
        "app_owner_group": {
            "app_group": "batchdev"
        }
      }
    

    As explained in the documentation.

    【讨论】:

    • 我已经这样做了,他们仍然没有被替换,我做错了什么吗?我对厨师还是新手。
    • 您使用的是具有默认属性的角色吗? It has precedence over environment。作为最后的手段,您可以尝试在您的环境中使用override_attributes