【问题标题】:Using chef-vault instead of data bag使用 chef-vault 代替数据包
【发布时间】:2015-11-04 15:51:32
【问题描述】:

Ohai 厨师。

我写了一个以用户名和密码为参数的定义。 当在带有从数据包中获取的参数的配方中使用时,它可以工作。

但是从 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 项目评估?

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

 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

如果参数之一为空,它会引发我的代码中的异常 这是定义中的代码:

  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

所以我得到的例外是 "Exiting - nil 值对于 connectProfiletoLdap 是不可接受的"

【问题讨论】:

  • 你看到了什么错误(它抱怨它是 NIL}
  • 我已经用错误更新了问题。如果其中一个值为 nil,这是我的代码引发的异常
  • 我假设你已经检查过 node['was']['credentialsVault']' 肯定包含一个保管库名称的字符串?
  • 是的。问题是在编译时获取哪些数据包并在收敛时保管库。

标签: chef-infra chef-recipe databags


【解决方案1】:

为了在问题中描述的场景中使用 chef vault,可以使用以下绕过: 将定义改写为LWRP

将定义改写为chef LWRP,示例见文末:Chef Definitions documentation

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

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

 wasbnhp_ldapconnection 'LDAP MAIN' do
  profile  dmgrProfile 
  baseDN  'dc=mydomain,dc=com'
  bindDN   username
  binpwd   password 
  ldapServer  'LDAPPROD.mydomain.com'
 end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多