атрибуты default & force_default добавляются? - PullRequest
0 голосов
/ 09 ноября 2018

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

Любая помощь с этим приветствуется.

...