Лучшая практика для настройки уникального шеф-повара Node Атрибуты

Я пытаюсь использовать Chef для управления новыми виртуальными машинами. Я использую выделенный сервер Chef и выполняю всю эту работу с отдельной рабочей станции vm.

То, как я сейчас это делаю, клонирует базовый образ vm, а затем использует загрузочный бункер для установки Chef и доводит vm до согласованного состояния.

Я могу указать среду или список запуска для vm; Я могу переопределить некоторые настройки в моей среде, например. У меня есть chef-client интервал в блоке "overrides" тестовой среды, установленный для запуска клиента каждые 60, пока я тестирую Мне не нужно вручную запускать chef-client каждый раз.

Например, мой рабочий процесс таков:

  • шаблон clone vm и запуск vm

  • установить имя хоста вручную (обновить/etc/hostname и /etc/hosts ) и перезагрузить

  • Загрузите node с помощью начальных рецептов

    нож bootstrap chef-test1 -r 'рецепт [ntp], рецепт [chef-client]'

  • отредактируйте node, чтобы отобразить новую среду

Проблема, с которой я столкнулась, заключается в настройке атрибутов per-w632 > . Я хотел бы использовать hostname cookbook для установки имени хоста node, если я установил это в роли, тогда каждый сервер будет иметь создать новую роль. Но когда я пытаюсь загрузить и включить эту роль, я получаю сообщение об ошибке:

chef-test1   * log[Please set the set_fqdn attribute to desired hostname] action write[2013-12-09T16:26:56-07:00] WARN: Please set the set_fqdn attribute to desired hostname

Когда я загружаю без этого рецепта и пытаюсь отредактировать node и установить атрибут "set_fqdn", я не могу сохранить этот атрибут, например. это json:

{
  "name": "chef-test1",
  "set_fqdn": "chef-test1.local.fqdn",
  "chef_environment": "test-dev1",
  "normal": {
    "tags": [

    ]
  },
  "run_list": [
    "recipe[ntp]",
    "recipe[chef-client]",
    "recipe[hostname]"
  ]
}

когда я выхожу из своего редактора, нож говорит мне:

Node not updated, skipping node save

Я попытался отредактировать этот атрибут в chef gui, и атрибут не будет сохранен.

Я нашел этого парня, который создает json в /etc/chef/chef.json, делая в основном то, что я ожидаю, но я не уверен, как /etc/chef/chef.json входит в игру (обновляйте его для каждого нового node? Я не использую шеф-повара, поэтому, возможно, там, где мое замешательство).

В соответствии с этот поток электронной почты невозможно переопределить атрибуты по умолчанию с помощью ножа node, но "set_fqdn" не является по умолчанию. Я хотел бы избежать создания роли для каждого node, и я думаю, что могу использовать кучную книгу имени хоста, чтобы облегчить необходимость вручную установить имя хоста, например:

knife bootstrap saucy64 -r 'recipe [ntp], рецепт [chef-client], recipe [имя хоста]' --json ' "{set_fqdn": "chef-test1.local.tld", "chef_client": { "интервал": "600" } '

knife bootstrap fedora19 -r 'recipe [ntp], recipe [chef-client], recipe [hostname]' --json ' "{set_fqdn": "chef-test2.local.tld", "chef_client": { "интервал": "60" } '

Я ценю помощь.

Ответ 1

Я вижу некоторые проблемы:

  • во время knife node edit вы не можете установить атрибут как атрибут верхнего уровня рядом с fqdn и т.д. Вы должны поместить его ниже normal. Это иерархия между default и override. См. Приоритет атрибутов
  • используя knife node edit запахи. Я бы предпочел не делать этого (может быть, хорошо для имени хоста, но для всего остального невозможно отслеживать такие изменения в управлении версиями). Попробуйте вместо этого использовать кулинарную книгу hostname.
  • Запись атрибутов в файл chef.json также должна быть IMHO. Ваша логика должна быть внутри ваших кулинарных книг.
  • у вас должна быть роль/кулинарная книга base или аналогичная, которая включает тривиальные вещи, которые имеют каждый node (например, ntp, chef-client, а также имя хоста).
  • вы можете установить среду также непосредственно во время начальной загрузки: -E myenv (но да, мне интересно, почему это не документировано).
  • вы также можете установить имя node во время начальной загрузки: -N NAME или --node-name NAME.

Ответ 2

как насчет рецепта, который устанавливает имя хоста на основе определенного node.name при загрузке node, я написал один который является вилкой оригинальной поваренной книги повара-шеста.

Ответ 3

Это работает:

knife bootstrap 192.168.15.43 -r 'recipe[hostname],recipe[ntp],recipe[chef-client]' -j '{"set_fqdn": "chef-test2"}'

(также найдено чтение справки knife help bootstrap)

fooobar.com/info/491766/... использует аналогичный синтаксис.

Изменить: Ну, почти, это создает две записи node. необходимо указать имя node с параметром -N:

knife bootstrap 192.168.15.43 -r 'recipe[hostname],recipe[ntp],recipe[chef-client]' -j '{"set_fqdn": "chef-test2"}' -N chef-test2

knife bootstrap 192.168.15.43 --run-list 'recipe[hostname],recipe[ntp],recipe[chef-client]' --json-attributes '{"set_fqdn": "chef-test2"}' --node-name chef-test2