Как вставить зашифрованное значение элемента пакета данных в рецепт Chef?

Я создал зашифрованное значение пакета данных, которое пытаюсь загрузить в рецепт шеф-повара.

knife data bag show foo bar --secret_file secret.key                                  
Encrypted data bag detected, decrypting with provided secret. 
id:   bar
pass: p4ssw0rd

Я пытаюсь получить значение прохода для загрузки в качестве переменной в ресурсе bash и иметь зашифрованный_data_bag_secret в /etc/chef на клиенте (следовательно, секретный ключ не отображается, возвращаясь к местоположению /etc/chef по умолчанию):

dbag = Chef::EncryptedDataBagItem.load("foo", "bar")
foo_pass = dbag["pass"]

Я также пытался использовать рецепт DSL вместо метода Chef::EncryptedDataBadItem:

dbag = data_bag_item('foo', 'bar')
foo_pass = dbag["pass"]

А затем загружаем его в ресурс bash:

bash 'install_mysql' do
  code <<-EOC
    ...
    sudo mysqladmin -u root password {foo_pass}
    ...
  EOC
end

У меня возникло несколько вопросов относительно этого процесса.

i) Будет ли Chef::EncryptedDataBagItem.load объявлен устаревшим и заменен на data_bag_item; должен ли я использовать один поверх другого?
ii) Вытягиваю ли я dbag["pass"] с помощью правильных методов; как мне получить значение 'pass' изнутри foo (бага данных) => bar (item?)
iii) Чтобы вызвать переменную foo_pass внутри ресурса bash, я просто инкапсулирую переменную в фигурные скобки {} , или я что-то упустил?
iv) Есть ли лучший метод, чем тот, который я испытываю?

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

puts "foo_pass equals 1:{foo_pass} 2:#{foo_pass}'

Я занимался этим полдня и надеялся получить более опытные ответы о том, как с этим справиться.


person hobbes    schedule 05.04.2018    source источник
comment
угу угу. он сказал dbag media1.giphy.com/media/TpFvrFrtm5BiU/giphy.gif   -  person lacostenycoder    schedule 05.04.2018


Ответы (1)


  1. Да предпочитают data_bag_item в большинстве случаев, это правильнее.
  2. Да это верно.
  3. Вам нужно #{foo_pass} с ведущим #.
person coderanger    schedule 05.04.2018
comment
coderanger, ваши ответы всегда очень ценны! Я использовал символ решетки, и оказалось, что я пропустил его экземпляр в своем коде. Спасибо за разъяснения! - person hobbes; 05.04.2018