Шеф-повар: Могу ли я использовать общие элементы списка выполнения для каждой среды? - PullRequest
5 голосов
/ 13 марта 2012

Я использую среды в chef, и я хочу использовать списки выполнения для каждой среды.Проблема в том, что я не хочу повторяться (как сейчас).Пример:

{
  "name": "myapp",
  "default_attributes": {
  },
  "json_class": "Chef::Role",
  "env_run_lists": {
    "production": [
      # Has less packages because services are spread across specialized nodes
      "role[base]",
      "recipe[mysql::client]",
      "recipe[myapp]"
    ],
    "staging": [
      # Has less packages because services are spread across specialized nodes
      "role[base]",
      "recipe[mysql::client]",
      "recipe[myapp]"
    ],
    "development": [
      "role[base]",
      "recipe[mysql::client]",
      "recipe[myapp]",
      "role[utility]",
      "role[cache]"
    ]
  },
  "run_list": [

  ],
  "description": "The myapp.com core application role",
  "chef_type": "role",
  "override_attributes": {

  }
}

Есть ли способ избежать этого повторения?

      "role[base]",
      "recipe[mysql::client]",
      "recipe[myapp]",

Я просто хочу избежать выпадения списков выполнения среды из-за синхронизации и прерывания развертывания.

Ответы [ 2 ]

5 голосов
/ 14 марта 2012

В это время нет.Роли являются чисто декларативными и не динамичными в этом смысле.Вы можете создать роль, включающую эти три элемента и включающую ее в списки выполнения для каждой среды.

0 голосов
/ 14 сентября 2017

Это может быть невозможно в JSON, однако это возможно, если вы используете Ruby DSL для определения своей роли.

Вот как будет выглядеть ваш файл роли:

name "myapp"
description   "Description of the role"
base_run_list = [ "role[base]", "recipe[mysql::client]", "recipe[myapp]" ]
env_run_lists "production" => base_run_list, "staging" => base_run_list , "development" => base_run_list + ["role[utility]", "role[cache]"]

base_run_list это ваш список распространенных рецептов.

...