主厨版本: 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_env
在chef_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>
对此有任何帮助。