я создал рецепт шеф-повара mongodb, и я переопределяю атрибуты по умолчанию в рецепте из роли.
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]"
]
}
однако, когда шеф-повар запускает команду, она запускается на последней роли в 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
Я бы хотел, чтобы каждая роль применялась на сервере и использовала общий рецепт. ....?
Узел может иметь только одно значение значения для данного атрибута (например, node ["susemongodb"] ["node_nickname"]
), и значения определяются во время этап компиляции (см. «Этапы» здесь ).
Таким образом, в вашем случае и при условии отсутствия переопределений с более высоким приоритетом будут использоваться значения из последней роли в списке выполнения.
Кроме того, перед началом фазы схождения , начальный рабочий список расширяется до отдельных рецептов. Один рецепт может появиться только один раз в расширенном списке выполнения, поэтому вы получите:
ИНФОРМАЦИЯ: Список выполнения расширяется до [susemongodb :: setupmachine, susemongodb :: datanode]
Я не знаю, как ваша книга рецептов настроен, но для достижения того, чего вы хотите, атрибуты node ["susemongodb"] ["node_nickname"]
и node ["susemongodb"] ["port"]
могут быть массивами и в вашем рецепте перебирайте эти массивы и выполняйте свои ресурсы в цикле.