我创建了一个加密的数据包值,我试图将其加载到主厨食谱中。
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}'
我已经在半天的时间里抨击了这一天,并且希望得到一些更有经验的回答来解决这个问题。
答案 0 :(得分:3)
data_bag_item
,这更为正确。#{foo_pass}
,领先#
。