厨师 常见菜谱 多重角色

厨师 常见菜谱 多重角色

我已经创建了一个 mongodb chef 食谱,并且我正在从角色中覆盖食谱上的默认属性。

name 'mongo_datanode_jackey'
description 'this module is currently under testing...'

override_attributes(
    susemongodb:  {
        node_type:  'datanode',
        node_nickname: 'jackey',
        port:  '27018',
        is_replicaset_node: true,
        is_cluster_node: true,
        replicaset_name: 'myreplica',
        clusterRole: 'configsvr',
     }

)

run_list(
  "recipe[susemongodb::setupmachine]",
  "recipe[susemongodb::datanode]"
)

现在,我想在同一个虚拟机中启动多个数据节点,因此我创建了另一个与上述类似但具有不同属性值的角色。

name 'mongo_datanode_meerkat'
description 'this module is currently under testing...'

override_attributes(
    susemongodb:  {
        node_type:  'datanode',
        node_nickname: 'meerkat',
        port:  '27019',
        is_replicaset_node: true,
        is_cluster_node: true,
        replicaset_name: 'myreplica',
        clusterRole: 'configsvr',
     }

)

run_list(
  "recipe[susemongodb::setupmachine]",
  "recipe[susemongodb::datanode]"
)

如果你注意到他们使用相同的配方,通过属性,

我正在调用客户端中的角色,

{
  "name": "mongo1",
  "chef_environment": "development",
  "normal": {
    "tags": [

    ]
  },
  "run_list": [
  "role[mongo_datanode_jackey]",
  "role[mongo_datanode_meerkat]",
  "role[mongo_datanode_zebra]"
]

}

然而,当 chef 运行时,它会在 run_list 上的最后一个角色上运行......知道为什么吗?

[2016-02-11T16:51:35+00:00] INFO: Forking chef instance to converge...
[2016-02-11T16:51:35+00:00] INFO: *** Chef 12.6.0 ***
[2016-02-11T16:51:35+00:00] INFO: Chef-client pid: 14010
[2016-02-11T16:51:40+00:00] INFO: Run List is [role[mongo_datanode_jackey], role[mongo_datanode_meerkat], role[mongo_datanode_zebra]]
[2016-02-11T16:51:40+00:00] INFO: Run List expands to [susemongodb::setupmachine, susemongodb::datanode]
[2016-02-11T16:51:40+00:00] INFO: Starting Chef Run for mongo1

我希望每个角色都能在服务器上应用并使用通用配方......?

答案1

一个节点对于给定的属性只能有一个值(例如node["susemongodb"]["node_nickname"]),并且该值在编译阶段确定(参见“阶段”这里)。

因此,在你的情况下,假设没有覆盖更高优先级,将使用运行列表中最后一个角色的值。

此外,在开始收敛阶段之前,初始运行列表将扩展为单个配方。一个配方只能在扩展的运行列表中出现一次,这就是为什么您会得到:

INFO: Run List expands to [susemongodb::setupmachine, susemongodb::datanode]

我不知道你的食谱是如何设置的,但为了实现你想要的,可以将node["susemongodb"]["node_nickname"]node["susemongodb"]["port"]属性作为数组,并在你的食谱中遍历这些数组并在循环中执行你的资源。

相关内容