我创建了一个加密的数据包值,我试图将其加载到厨师食谱中。
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}'
我已经为此苦苦挣扎了半天,并希望得到一些更有经验的回应来解决这个问题。