如何将加密数据包项值插入Chef配方?

时间:2018-04-05 03:26:28

标签: ruby chef chef-recipe databags

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

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

I' M试图获得通过值加载了如在bash资源的变量,并让客户端(因此没有秘密密钥节目上在/ etc /厨师encrypted_data_bag_secret,恢复到默认的/ etc /厨师所在地):

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 [&#34; pass&#34;];我怎么能抓住&#39;通过&#39; foo内部的值(数据包)=&gt;吧(项目?)
iii)要在bash资源中调用foo_pass变量,我是否只是将变量封装在花括号{}中,或者我在这里遗漏了什么?
iv)有没有比我尝试的更好的方法?

我尝试添加以下内容,看看在运行chef-client时是否可以看到打印到屏幕的变量值,但它没有向我显示任何文本或值:

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

我已经在半天的时间里抨击了这一天,并且希望得到一些更有经验的回答来解决这个问题。

1 个答案:

答案 0 :(得分:3)

  1. 是的,在大多数情况下更喜欢data_bag_item,这更为正确。
  2. 是的,这是正确的。
  3. 您需要#{foo_pass},领先#