是否添加了default和force_default属性?

时间:2018-11-08 23:42:41

标签: chef

主厨版本: 12.18.31

平台: Ubuntu 16.04

我有几本食谱。一个(我们称之为chef_auth)设置一些默认的LDAP服务器及其URI。

default['chef_auth']['ldap_servers'] = %w(ldap.qa ldap1.qa ldap2.qa)
default['chef_auth']['ldap_uris'] = node['chef_auth']['ldap_servers'].map { |s| "ldaps://#{s}" }

第二个(我们称为chef_env)使用force_default覆盖chef_auth中设置的默认值。

force_default['chef_env']['ldap_servers'] = %w(ldap.env ldap1.env ldap2.env)

chef_auth食谱之一中,我为sssd食谱设置了一个属性。

node.default['sssd_ldap']['sssd_conf']['ldap_uri'] = node['chef_auth']['ldap_uris'].join(',')

当运行列表中chef_envchef_auth之前时,这两个属性的值都在我正在查看的配置文件中串联起来。

vagrant@kitchen:~$ sudo grep ldap_uri /etc/sssd/sssd.conf
ldap_uri = ldaps://ldap.qa,ldaps://ldap1.qa,ldaps://ldap2.qa,ldaps://ldap.env,ldaps://ldap1.env,ldaps://ldap2.env

这是一些node_debug的输出。

 ## chef_auth.ldap_servers ##
 [["default",
   ["ldap.qa", "ldap1.qa", "ldap2.qa"]],
  ["env_default", :not_present],
  ["role_default", :not_present],
  ["force_default",
   ["ldap.env", "ldap1.env", "ldap2.env"]],
  ["normal", :not_present],
  ["override", :not_present],
  ["role_override", :not_present],
  ["env_override", :not_present],
  ["force_override", :not_present],
  ["automatic", :not_present]]

 ## chef_auth.ldap_uris ##
 [["default",
   ["ldaps://ldap.qa",
    "ldaps://ldap1.qa",
    "ldaps://ldap2.qa",
    "ldaps://ldap.env",
    "ldaps://ldap1.env",
    "ldaps://ldap2.env"]],
  ["env_default", :not_present],
  ["role_default", :not_present],
  ["force_default", :not_present],
  ["normal", :not_present],
  ["override", :not_present],
  ["role_override", :not_present],
  ["env_override", :not_present],
  ["force_override", :not_present],
  ["automatic", :not_present]]

这是怎么回事?为什么看起来default设置的属性数组被附加了force_default设置的数组属性?根据文档,它应该像任何其他属性优先级情况一样工作。 FWIW,当我使用env_default而不是force_default时,我得到相同的结果。也就是说,当我使用normal覆盖default属性时,它可以正常工作。以下是我参考的文档。

https://docs.chef.io/attributes.html#attribute-precedence

https://www.rubydoc.info/gems/chef/Chef/Node/Attribute#force_default!-instance_method

如果我首先将chef_auth放在运行列表中,它也可以按预期工作,但是我无法及时设置chef_env中需要的另一个属性,以供另一本包装手册使用。< / p>

对此有任何帮助。

0 个答案:

没有答案