使用chef-vault而不是数据包

时间:2015-11-03 13:57:49

标签: chef chef-recipe databags

Ohai厨师。

我写了一个定义,它使用usename和password作为参数。 当在具有从数据库获取的参数的配方中使用时,它可以工作。

但是从chef-vault

获取参数时失败

以下是使用数据包的代码:

databag = 'credentials'
authalias = data_bag_item(databag, ldapalias)
username = authalias[node['was']['credentialsUsername']]
password = authalias[node['was']['credentialsPassword']]

然后将它们传递给我的定义哪个正常

connectProfiletoLdap 'ldapmain' do
 profile  dmgrProfile 
 baseDN  'dc=mydomain,dc=com'
 bindDN  username
 binpwd  password
 ldapServer  'LDAPPROD.mydomain.com'
end

但是,当我尝试对chef-vault执行相同操作时,它会失败,因为定义正在检查NIL值的输入。 在我看来,数据包在编译时被评估,而保险库项目在执行时被评估。

如果我希望这项工作怎么办? 有没有办法强制在编译时发生保险库项目评估?

以下是使用保险库失败的代码:

 vault = node['was']['credentialsVault']
 authalias = chef_vault_item(vault, ldapalias)
 username = authalias[node['was']['credentialsUsername']]
 password = authalias[node['was']['credentialsPassword']]

 connectProfiletoLdap 'ldapmain' do
  profile  dmgrProfile 
  baseDN  'dc=mydomain,dc=com'
  bindDN  username
  binpwd  password
  ldapServer  'LDAPPROD.mydomain.com'
 end

如果其中一个参数为null,它会在我的代码中引发异常 这是定义中的代码:

  if params[:baseDN].nil? or params[:ldapServer].nil? or params :profile].nil? or params[:bindDN].nil? or params[:binpwd].nil?
   raise "Exiting - nil values are unaxceptable for connectProfiletoLdap"
  else
    ......
  end

所以我得到的例外是 "退出 - 对于connectProfiletoLdap"

,nil值是不可接受的

1 个答案:

答案 0 :(得分:0)

为了在问题中描述的场景中使用厨师保险库,可以使用以下旁路: 将定义重写为LWRP

将该定义重写为厨师LWRP,可在此处找到exapmle:Chef Definitions documentation

之后,给予LWRP的厨师保险库的数据在收敛时间内进行评估,如下所示:

t