Лучшая практика для настройки уникального шеф-повара 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