以下是用于创建保险库的命令
knife vault create ldapuser user1 -A "admin,chef1.example.com" -J password.json -M client
以下是显示保险库内容的命令
knife vault show ldapuser user1
id: user1
password: secretp@ssword
username: james
以下是我的食谱,其中包括以下顶部的
chef_gem 'chef-vault' do
compile_time true if respond_to?(:compile_time)
action :install
end
require 'chef-vault'
item = ChefVault::Item.load("ldapuser","user1")
execute 'setup ldap' do
command '/opt/ldap/bin/setup --hostname localhost --port 389 --bindDN cn="Directory Manager" --bindPassword item[password] --ldapport 389 --baseDN "dc=example,dc=com" --addBaseEntry --doNotStart --acceptLicense`
end
execute 'run ldap' do
command '/opt/ldap/bin/ldapmodify --hostname localhost --port 389 --bindDN cn="Directory Manager" --bindPassword item[password] --filename /opt/ldap.ldif
end
不幸的是,一旦安装完成,我尝试登录到我的ldap服务器,我收到一个无效的凭据错误消息。
我假设它与如何在执行块中定义bindPassword的变量有关。我甚至尝试使用项目['密码']登录,但没有用。但是,当我将密码(而不是使用保险库)硬编码到我的食谱中时,我能够毫无问题地登录。
我到处搜索,似乎无法找到有效的解决方案。请帮忙!
答案 0 :(得分:1)
Ruby中的字符串插值如下所示:"something #{item['key']} else"
。
重要位:使用双引号而不是单引号,在表达式周围放置#{}
,并确保在#{}
内正确格式化表达式。
答案 1 :(得分:0)
在这个例子中,我填充了来自chef-vault的秘密的auth.properties和pem文件。 完整的YouTube演示:How to Create and use Chef-Vault
Default.rb食谱
static
以下是模板:
auth.properties.erb
chef_gem 'chef-vault' do
compile_time true if respond_to?(:compile_time)
end
require 'chef-vault'
secrets = ChefVault::Item.load("vault_demo", "dev_secrets" )
directory "/opt/your_project" do
action :create
end
template '/opt/your_project/auth.properties' do
source "auth.properties.erb"
variables({
sql_password: secrets['sql_password'],
application_password: secrets['application_password']
})
action :create
end
template '/opt/your_project/server.pem' do
source "server.pem.erb"
variables({
ssl_cert: Base64.decode64(secrets['ssl_cert'])
})
action :create
end
server.pem.erb
ssl_password:<%= @sql_password %>
application_password:<%= @application_password %>
请注意,pem文件在配方中被base64解码,因为它必须被编码以存储在Vault中