глубже merge_behaviour для hiera 5 не работает, но работает в hiera 3 - PullRequest
0 голосов
/ 25 декабря 2018

Глубокое слияние не работает в hiera 5.

Я использую merge_behavior: deeper в основном hiera.yaml версии 3, поэтому он объединит все данные hiera, где он их найдет, но теперь у меня есть обновление до версии 5,и обнаружил, что поведение слияния не работает?

:merge_behavior: deeper

Любая помощь будет оценена

Ответы [ 2 ]

0 голосов
/ 20 марта 2019

Как указано в документации Hiera: объединение данных из нескольких источников говорит:

Примечание: глубокое объединение Hiera 5 эквивалентно «более глубокому» объединению Hiera 3.

Вы можете определить правила поиска в некоторых конфигурациях YAML:

lookup_options:
  "^firewall::(.*)":
    merge:
      strategy: deep

, используя puppet lookup --explain needle из CLI, может помочь понять, что происходит:

$ puppet lookup --explain firewall::firewalld::zones
Searching for "lookup_options"
  Global Data Provider (hiera configuration version 5)
    Using configuration "/etc/puppetlabs/puppet/hiera.yaml"
    Merge strategy hash
      Hierarchy entry "Defaults"
        Path "/etc/puppetlabs/puppet/hieradata/default.yaml"
          Original path: "default.yaml"
          Found key: "lookup_options" value: {
            "^firewall::(.*)" => {
              "merge" => {
                "strategy" => "deep"
              }
            }
          }
      Merged result: {
        "^firewall::(.*)" => {
          "merge" => {
            "strategy" => "deep"
          }
        }
      }
  ...

Вы можетезамените hiera_hash( 'firewall::firewalld::zones', {} ) на:

lookup('firewall::firewalld::zones', Hash, {'strategy' => 'deep'}, {})

или на предопределенный lookup_options, в результате вы получите простой код, например:

lookup('firewall::firewalld::zones')
0 голосов
/ 26 декабря 2018

Согласно официальной документации Puppet для обновления с Hiera 3 до Hiera 5 :

Они не имеют эквивалентной поддержки в версии 5. Если вы хотите изучитьо том, как Hiera 5 поддерживает глубокое слияние хешей, см. Объединение данных из нескольких источников .

В итоге я использовал функцию lookup() в файлах кукол вместо hiera_hash()функция.что-то вроде этого.

от

hiera_hash( 'firewall::firewalld::zones', {} )

до

lookup( { 'name' => 'firewall::firewalld::zones',
                                'merge' => { 
                                  'strategy' => 'deep',
                                  'knockout_prefix' => '--',
                                }, 
                                'default_value' => {} 
                      })
...