2013-12-09 4 views
11

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

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

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

Например, мой рабочий процесс заключается в следующем:

  • шаблон клон VM и запустить VM

  • установить имя хоста вручную (обновление/и т.д./имя хоста и/и т.д./хосты) и перезагрузки

  • Бутстрап узел с начальными рецептов

    knife bootstrap chef-test1 -r 'recipe[ntp],recipe[chef-client]'

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

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

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 

Когда я самонастройки без этого рецепта и попытаться изменить узел и установить «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 

Я попытался изменить этот атрибут в шеф-гуй и атрибут не спасут.

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

В соответствии с this email thread невозможно переопределить атрибуты по умолчанию с помощью редактирования узла ножа, но «set_fqdn» не является значением по умолчанию. Я хотел бы, чтобы не создавать роли для каждого узла, и я думаю, что я могу использовать имя хоста поваренную книгу, чтобы облегчить необходимость вручную установить имя хоста, что-то вроде:

knife bootstrap saucy64 -r 'recipe[ntp],recipe[chef-client],recipe[hostname]' --json '"{ set_fqdn": "chef-test1.local.tld", "chef_client": { "interval": "600" }'

knife bootstrap fedora19 -r 'recipe[ntp],recipe[chef-client],recipe[hostname]' --json '"{ set_fqdn": "chef-test2.local.tld", "chef_client": { "interval": "60" }'

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

+0

Я борюсь на том же, чтобы установить имя хоста, используя повара экземпляров ec2. пожалуйста, помогите – user3086014

ответ

6

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

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

благодарит за отзыв. - Кажется, что у меня есть – user1106405

+0

. (никаких новых строк в комментариях, поэтому я приношу извинения за беспорядок текста в ответ на ваш хороший список). - Таким образом, проще всего создать роль для каждого нового vm, где я могу установить «set_fqdn» в блоке переопределения; другая мысль в глубине моего разума - способ автогенерировать имя, но я думаю, что это по дороге. - ОК. Я действительно просто пытался заставить поваренную книгу работать как-то, я думаю, я понимаю, как это может стать непоколебимым в долгосрочной перспективе. - Как бы я это сделал? Может быть, «базовая» кулинарная книга, которая захватывает имя хоста из базы данных? – user1106405

+0

- хорошо, хорошая идея. Благодарю. - на самом деле это задокументировано в разделе «knife help bootstrap» или «knife boostrap --help» благодаря тому, что он указывает на то, что это уменьшает необходимость редактирования после бутстрапинга. - установка имени узла только устанавливает его для шеф-повара, но он не изменяет имя хоста узла. – user1106405

0

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

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

(также обнаружил чтение knife help bootstrap помощи)

This stackoverflow answer использует похожий синтаксис.

Редактировать: Ну, почти, это создает две записи узла. необходимо указать имя узла с -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 
+0

также укажите среду с флагом -E вместо использования _default – user1106405

2

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

Смежные вопросы