Вопрос

Можно ли указать значения атрибутов в JSON Chef Solo?У меня есть файл Solo.json со списком выполнения, и я хотел бы указать там атрибуты.Документация Chef, похоже, указывает на то, что я могу сделать что-то вроде:

{
    "hostname": {
        "test": "value2"
    },
    "default_attributes": {
        "hostname": {
            "test": "value3"
        }
    },
    "override_attributes": {
        "hostname": {
            "test": "value4"
        }
    },
    "default": {
        "hostname": {
            "test": "value5"
        }
    },
    "run_list": [
        "recipe[hostname::default]"
    ]
}

Однако всякий раз, когда я пытаюсь получить доступ к значению в моем рецепте:

p node['hostname']['test']

Я просто получаю значение, определенное в атрибутах/default.rb, и если я не определяю его там, я получаю обратно нулевое значение.

Есть ли способ ссылаться на эти значения?

Это было полезно?

Решение

Единственным уровнем атрибутов, которые вы можете хранить в данных узла, является normal, все остальное сбрасывается в начале конверге и восстановлена из ролей, сред и кулинарных книг.Вы хотите что-то вроде выглядеть так:

{
  "normal": {
    "hostname": {
      "test": "something"
    }
  },
  "run_list": [
    "recipe[hostname::default]"
  ]
}
.

Другие советы

Я попытался использовать приведенный выше пример для настройки атрибутов в файле JSON для chef-solo, и "normal": {...} блок был полностью проигнорирован.Список выполнения был прочитан, но атрибуты, похоже, никогда не работают.

Моя команда такова:

chef-solo -c /path/to/config_file.rb -j /path/to/file.json

Мой файл JSON:

{
  "name": "my_json_file",
  "description": "JSON run-list and attributes.",
  "normal": {
    "my_cookbook": {
      "git_branch": "staging"
    }
  },
  "run_list": [
    "recipe[my_cookbook::recipe1]",
    "recipe[my_cookbook::recipe2]",
  ]
}

Во время конвергенции Chef сразу вернулся к значениям по умолчанию внутри attributes/default.rb.Правильно ли вводятся значения JSON?До сих пор моим единственным обходным путем было создание нового рецепта для каждого "git_branch": атрибут, который я хочу протестировать с помощью chef-solo и добавить этот обновленный список выполнения в другой файл JSON.По сути, копирование всего рецепта для изменения одного node.normal['my_cookbook']['git_branch'] ценность.Излишне говорить, что это не должно быть решением проблемы.

Использование Chef 14.0.202

Следовать за:

Если не устанавливать уровень приоритета атрибута внутри файла JSON с помощью Chef Solo, это работает.JSON должен выглядеть примерно так:

{
  "name": "my_json_file",
  "description": "JSON run-list and attributes.",
  "my_cookbook": {
    "git_branch": "staging"
  },
  "run_list": [
    "recipe[my_cookbook::recipe1]",
    "recipe[my_cookbook::recipe2]",
  ]
}

Не включая "normal": {...} или "default_attributes": {...}, и т. д. передадут атрибуты для использования Chef-Solo.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top