如何在Chef配方中获取加密数据袋项的pass值并赋值给变量?
解决方法
没问题,你已经完成了最关键的加密数据袋加载步骤,接下来获取pass的值非常直接——因为Chef::EncryptedDataBagItem.load返回的是一个类似哈希结构的对象,直接通过键名访问即可:
dbag = Chef::EncryptedDataBagItem.load("foo", "bar") foo_pass = dbag['pass'] # 也可以用点语法:foo_pass = dbag.pass
补充说明
因为你的客户端已经把encrypted_data_bag_secret放在了默认路径/etc/chef下,Chef::EncryptedDataBagItem.load会自动读取这个密钥文件,不需要额外传入参数,这部分你已经处理得很对啦。
在bash资源中使用变量的示例
如果要在bash资源里引用这个密码变量,记得用Chef的字符串插值语法#{}把变量嵌入到命令中:
bash 'use_foo_password' do code <<-EOH # 替换成你的实际业务命令,比如用密码连接服务、写入配置等 echo "The retrieved password is: #{foo_pass}" > /tmp/foo_pass.txt EOH end
这样就能把加密数据袋里的p4ssw0rd值正确传递到bash命令里了。
内容的提问来源于stack exchange,提问作者hobbes
相关产品推荐
相关产品推荐

