2014-10-07 3 views
0

Каждый раз, когда мы создаем новый сервер, у меня есть сценарий bash, который задает конечному пользователю набор вопросов, чтобы помочь шеф-повару настроить настраиваемый сервер, его/ее ответ на эти вопросы нужно вставить в шеф-повара так, чтобы что я могу использовать их ответы в моем сценарии шеф-повара (например, для установки сервера «hostname» = «server1.stack.com»). При запуске chef-клиента, который я прочитал, это атрибут json, который может быть полезен, но я не уверен, как это работает в нашей среде.Шеф-повар: передающие переменные

Примечание: Мы запускаем chef-client на всех наших системах каждые 15 минут через cronjob для получения обновлений.

Psuedocode:

echo -n "What is the server name?" 
read hostname 

chef-client -j {'hostname' => ENV['$hostname']} 

ответ

1

два вопроса, первый том, что -j принимает имя файла не сырой JSON и второго том, что использование -j будет полностью изменить данные узла, поступающие от сервера, который также включает в себя список запуска и окружающую среду , Если это выполняется во время предоставления системы, вы можете определенно сделать что-то подобное, см. Пример my AMI bootstrap script. Если это будет сделано после первоначальной инициализации, вы, вероятно, лучше всего напишите эти ответы на файл, а затем прочитаете это с помощью кода рецепта шеф-повара.

+0

Я считаю, что вы ошибаетесь. Я просто проверил на своем сервере, что передача аргумента в -j не переопределяет run_list или среду. На самом деле, если я правильно читаю источник, он делает глубокое слияние между содержимым -j и нормальными атрибутами с сервера. https://github.com/opscode/chef/blob/cbb9ae97e2d3d90b28764fbb23cb8eab4dda4ec8/lib/chef/node.rb#L293 –

+0

Я получаю логику в скрипте, похоже, что вы используете этот client-bootstrap.sh на целевая машина сама? – user3617841

1

Передача сырого json в chef-client возможна, но требует небольшого творчества. Вы просто сделать что-то вроде этого:

echo '{"hostname": "$hostname"}' | chef-client -j /dev/stdin 

Значения в вашем JSON будет глубоко слилась с «нормальными» атрибутов, хранящихся в шеф-сервера. Вы также можете включить run_list в json, который заменит (не будет объединен) run_list на сервере chef.

Вы можете увидеть run_list заменить список запуска сервера здесь: https://github.com/opscode/chef/blob/cbb9ae97e2d3d90b28764fbb23cb8eab4dda4ec8/lib/chef/node.rb#L327-L338

И вы можете увидеть глубокое слияние атрибутов здесь: https://github.com/opscode/chef/blob/cbb9ae97e2d3d90b28764fbb23cb8eab4dda4ec8/lib/chef/node.rb#L305-L311

Кроме того, любые атрибуты, которые вы декларируете в вашем JSON перекроют атрибуты, уже сохраненные на шеф-сервере.

+0

@coderanger, не могли бы вы взглянуть на это для меня? Я с готовностью признаю, что у вас есть больше опыта в этой области, чем у меня, и если я неправильно читаю источник, я счастлив, что исправлен и удалю мой ответ. –

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