0

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

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(数据包)=> bar(项目?)内部获取 'pass' 值
iii)要在 bash 资源中调用 foo_pass 变量,我只是将变量封装在大括号 {} 中,还是我这里缺少什么?
iv)有没有比我正在尝试的更好的方法?

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

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

我已经为此苦苦挣扎了半天,并希望得到一些更有经验的回应来解决这个问题。

4

1 回答 1

3
  1. data_bag_item的,在大多数情况下更喜欢,它更正确。
  2. 对,那是正确的。
  3. 你需要#{foo_pass},用领先#
于 2018-04-05T04:14:32.227 回答