jeb*_*jeb 3 ruby cookbook chef-infra
我的食谱中定义了以下库存项目
item = ChefVault::Item.load("user","password")
Run Code Online (Sandbox Code Playgroud)
我怎么称呼这个template.erb?我尝试了以下无效的方法
ROOTPASSWORD= <%= @node["testcookbook"]["user"]["password"] %>
Run Code Online (Sandbox Code Playgroud)
我的保险箱项目如下所示:
$ knife vault show user password
id: password
pass: xxxxxxxxxx
username: chefuser
Run Code Online (Sandbox Code Playgroud)
我通常在食谱中做这样的事情
ROOTPASSWORD #{item['pass']}
Run Code Online (Sandbox Code Playgroud)
但我不认为这会在模板中起作用.
有两个选项可以解决这个问题,虽然第二个应该是首选,因为这会使您的敏感数据保密.
假设,如果您的保险库看起来像这样:
knife vault show user password
id: password
pass: xxxxxxxxxx
username: chefuser
Run Code Online (Sandbox Code Playgroud)
然后,您可以如下所示:
首先,如果要在节点对象上设置密码并使其可见,则可以执行以下操作:
在配方中:
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
Run Code Online (Sandbox Code Playgroud)
在模板中:
ROOTPASSWORD= <%= node["testcookbook"]["user"]["password"] %>
Run Code Online (Sandbox Code Playgroud)
variables其次,如果您不想在节点对象上设置密码并让它在厨师运行日志中可见,那么您可以执行以下操作: -
template '/tmp/template' do
source 'template.erb'
owner 'root'
group 'root'
mode '0644'
sensitive true
variables( {:password => ChefVault::Item.load("user","password")['pass']})
end
Run Code Online (Sandbox Code Playgroud)
在模板中:
ROOTPASSWORD= <%= @password %>
Run Code Online (Sandbox Code Playgroud)