Chef,覆盖不适用于配方的属性

时间:2014-06-05 19:01:56

标签: attributes override chef role chef-recipe

这是我下载的食谱: https://github.com/edelight/chef-mongodb

我安装了Chef服务器,Chef工作站,并准备好一个testnode来自举。

我创建的角色:

$ knife role create mongodb_standalone_testproj

JSON格式:

{
  "name": "mongodb_standalone_testproj",
  "description": "Deploy MongoDB standalone with override attributes",
  "json_class": "Chef::Role",
  "default_attributes": {
  },
  "override_attributes": {
    "mongodb::default": {
      "port": "27060",
      "dbpath": "/data/"
    }
  },
  "chef_type": "role",
  "run_list": [
    "recipe[mongodb::default]"
  ],
  "env_run_lists": {
  }
}

但是,当我使用此角色引导testnode时:

knife bootstrap testnode --sudo -x <omit> -P <omit> -N testnode -r 'role[mongodb_standalone_testproj]'

在此处登录:http://pastebin.com/DWxY3vNV

问题是,MongoDB安装并在testnode上运行但是覆盖属性(port和dbpath)没有应用,有任何线索吗?

2 个答案:

答案 0 :(得分:56)

这些属性不正确:

"override_attributes": {
  "mongodb::default": {
    "port": "27060",
    "dbpath": "/data/"
  }
},

我愿意打赌你想要:

"override_attributes": {
  "mongodb": {
    "config": {
      "port": "27060",
      "dbpath": "/data/"
    }
  }
},

答案 1 :(得分:4)

我认为你只是覆盖了错误的属性(而不是完整的属性)。查看mongodb cookbook的默认值,列出:

default['mongodb']['config']['port'] = 27017

但你使用的是等效的:

['mongodb']['port']