如何将加密的数据包项目值插入 Chef 食谱?

How do I insert an encrypted data bag item value into a Chef recipe?

我创建了一个加密的数据包值,我正试图将其加载到厨师食谱中。

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

我试图让传递值作为变量加载到 bash 资源中,并在客户端的 /etc/chef 中设置 encrypted_data_bag_secret(因此没有秘密密钥显示,恢复到默认 /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"];我如何从 foo (data bag) => bar (item?)
中获取 'pass' 值 iii) 要在 bash 资源中调用 foo_pass 变量,我只是将变量封装在花括号 {} 中,还是我在这里遗漏了什么?
iv) 有没有比我正在尝试的更好的方法?

我尝试添加以下内容以查看当 运行 主厨客户端时是否可以看到打印到屏幕上的变量值,但它没有显示任何文本或值:

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

这个问题我苦苦思索了半天,希望能得到一些更有经验的回答如何处理。

  1. 是的,在大多数情况下更喜欢data_bag_item,它更正确。
  2. 是的,没错。
  3. 您需要 #{foo_pass},前导 #