как передать подсказки охай через команду начальной загрузки ножа шеф-повара

Мне нужно отключить плагин passwd в моей среде шеф-клиента, чтобы избежать ФАТАЛЬНОЙ ошибки из-за большого количества пользователей.

Для локального клиента я добавил следующую строку в файл client.rb:

ohai[:disabled_plugins] = ["passwd"]

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

--hint HINT_NAME[=HINT_FILE]

Подсказка Ohai, которую нужно установить на цель бутстрапа. Подсказка содержится в файле и имеет формат JSON: {"attribute":"value","attribute":"value"...}. HINT_NAME — это имя подсказки, а HINT_FILE — это имя файла подсказки, расположенного по адресу

/etc/chef/ohai/hints/HINT_FILE.json

Используйте несколько параметров --hint в команде, чтобы указать несколько подсказок.

Вот что я сделал:

На рабочей станции шеф-повара в /etc/chef/ohai/hints/HINT_FIILE.jason он имеет следующее содержимое:

{disabled_plugins:["passwd"]}

Вот команда начальной загрузки ножа:

бутстрап ножа [имя_управляемого_узла] --hint disabled_plugins -sudo -x user -P [пароль] -N "test_node"

По завершении команды на управляемом_узле создается новый файл: /etc/chef/ohai/hints/disabled_plugins.json со следующим содержимым:

{}

Это не кажется правильным...

Есть идеи, что я сделал не так?


person user3353404    schedule 25.02.2014    source источник


Ответы (3)


Предположим, у вас на рабочей станции (та, где вы запускаете нож) есть файл /home/user/test.json, содержащий следующую информацию

{ "foo": "bar" }

На узле (сервер, который будет выполнять запуск шеф-повара) вы найдете файл в /etc/chef/ohai/hints/foo.json, используя следующий синтаксис:

$ knife bootstrap --hint foo=/home/user/test.json 

На этот раз /etc/chef/ohai/hints/foo.json на узле будет содержать

{ "foo": "bar" }
person dave    schedule 04.07.2014

Я не думаю, что опция --hint работает не так, как вы думаете, или подразумевается на странице руководства. Похоже, он читает не из каталога /etc/chef/ohai/hints на рабочей станции Chef, а из имени файла, указанного вами для параметра --hint.

Это должно работать:

$ cat > myhint.json << EOF
{disabled_plugins:["passwd"]}
EOF
$ knife bootstrap --hint=myhint.json blah blah
person Tim Potter    schedule 26.02.2014
comment
Попробовал ваше предложение, создал файл myhint.json на рабочей станции шеф-повара и запустил команду knife boostrap. По завершении на управляемом узле создается файл /etc/chef/ohai/hints/myhint.json.json. содержимое файла: {} Так что он еще не работает. - person user3353404; 27.02.2014

Итак, у меня была та же проблема, и я не мог получить подсказки для правильной работы, поскольку, похоже, это не работает именно таким образом + отсутствие образцов документации.

В конце концов, я просто решил отредактировать chef-full.erb, который является шаблоном начальной загрузки по умолчанию, используемым для создания client.rb

Чтобы получить правильный файл, выполните следующее:

$ gem contents chef | grep bootstrap | grep full
/home/henryt/.rvm/gems/ruby-1.9.3-p547/gems/chef-11.16.4/lib/chef/knife/bootstrap/chef-full.erb

Затем vim этот файл chef-full.erb и добавьте строку ohai :disabled_plugins внутрь документа client.rb здесь (cat > /etc/chef/client.rb <<'EOP')

Ohai::Config[:disabled_plugins] = [:Passwd]

Мой файл патча:

--- ~me/.rvm/gems/ruby-1.9.3-p547/gems/chef-11.16.4/lib/chef/knife/bootstrap/chef-full.erb.orig
   2016-07-22 00:53:33.689961205 -0700
+++ ~me/.rvm/gems/ruby-1.9.3-p547/gems/chef-11.16.4/lib/chef/knife/bootstrap/chef-full.erb
2016-07-22 00:44:21.253493396 -0700
@@ -64,6 +64,7 @@

cat > /etc/chef/client.rb <<'EOP'
<%= config_content %>
+Ohai::Config[:disabled_plugins] = [:Passwd]
EOP

cat > /etc/chef/first-boot.json <<'EOP'

Теперь каждый раз, когда я загружаю машину, client.rb генерируется с этой строкой ohai :disabled_plugins, и мне не нужно иметь собственный файл client.rb.

person takumi    schedule 22.07.2016