Версия от шеф-повара: 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
, не будет установлен вовремя для использования в еще одной кулинарной книге обертки.
Любая помощь с этим приветствуется.