在 template.erb 中设置 Chef 保险库变量

Setting chef vault variable in template.erb

我的食谱中有一个保险库项目定义如下

item = ChefVault::Item.load("user","password")

如何在我的 template.erb 中调用它?我尝试了以下无效的方法

ROOTPASSWORD= <%= @node["testcookbook"]["user"]["password"] %>

我的保险库物品如下所示:

$ knife vault show user password
id:       password
pass: xxxxxxxxxx
username: chefuser

我通常在食谱中做这样的事情

ROOTPASSWORD #{item['pass']}

但是我认为这在模板中行不通。

有两种方法可以解决该问题,但应该首选第二种方法,因为它可以保护您的敏感数据的私密性。

假设,如果您的金库看起来像这样:

knife vault show user password
id:       password
pass: xxxxxxxxxx
username: chefuser

然后,您可以像下面这样处理:

另存为节点属性

首先,如果你想在节点对象上设置密码并使其可见,那么 您可以执行以下操作:

食谱中:

node.default["testcookbook"]["user"]["password"] = ChefVault::Item.load("user","password")['pass']

template '/tmp/template' do
  source 'template.erb'
  owner 'root'
  group 'root'
  mode '0644'
end

在模板中:

ROOTPASSWORD= <%= node["testcookbook"]["user"]["password"] %>

使用 variables

将数据传递到模板

其次,如果您不想在节点对象上设置密码并让它在 chef 运行 日志中可见,那么您可以执行如下操作:-

template '/tmp/template' do
  source 'template.erb'
  owner 'root'
  group 'root'
  mode '0644'
  sensitive true
  variables( {:password => ChefVault::Item.load("user","password")['pass']})
end

在模板中:

ROOTPASSWORD= <%= @password %>