Puppet — Использование переменных области видимости узла в конфигурации Hiera

Я пытаюсь использовать переменную области видимости узла в моей конфигурации hiera.yaml, которая, по-видимому, должна быть относительно простой, но у меня это просто не работает, лол.

С hiera.yaml вот так:

---
:backends:
    - yaml
:yaml:
    :datadir: /etc/puppet/hieradata
:hierarchy:
    - nodes/%{::hostname}
    - builds/%{build}
    - common

И мой site.pp вот так:

hiera_include('classes')
node 'mynode' {
    $build = special
}

И другие файлы yaml,

общий.yaml:

---
classes:
    - first_class
    - second_class

сборки/специальный.yaml:

---
classes:
    - third_class

Я ожидаю, что «mynode» получит «therte_class» при обновлении марионеточного агента, но это не так и не выдает ошибки.

Выполнение команды hiera дает мне правильный (я думаю) вывод:

$ hiera classes
["first_class","second_class"]
$ hiera classes build=special
["third_class"]

Есть ли что-то явно очевидное, что я сделал здесь неправильно?

%{::hostname} работает. Если я добавлю nodes/mynode.yaml, эта конфигурация будет выбрана.


person Just Lucky Really    schedule 12.11.2015    source источник
comment
Из документации: функция hiera_include использует поиск слияния массива для извлечения массива классов, поэтому в результате у вас должны быть все три класса. Я предполагаю, что поскольку первый файл не существует, в результате вы получаете пустой массив.   -  person kkamilpl    schedule 13.11.2015
comment
Ничего себе, хотя ваш комментарий действительно не имел особого смысла, он, должно быть, заставил мой мозг перегрузиться или что-то в этом роде, потому что я думаю, что нашел ответ ... Я подтвержу его и скоро опубликую.   -  person Just Lucky Really    schedule 13.11.2015


Ответы (1)


После часов головокружения, сообщения об ошибке документации на puppetlabs (сейчас я ее закрыл, лол) и почти полностью отказавшись от этой идеи и просто создав пользовательский факт, я обнаружил, что это было такое простое исправление... И это имеет смысл. ..

В основном все, что мне нужно было сделать, это изменить мой site.pp с:

hiera_include('classes')
node 'mynode' {
    $build = special
}

to:

node 'mynode' {
    $build = special
    hiera_include('classes')
}

Теперь это имеет большой смысл, потому что, как вы можете видеть, мне нужно было вызвать hiera_include после установки переменной области видимости узла.

Тем не менее, предостережение (как я только что узнал), если у вас есть hiera_include('classes') на верхнем уровне, и вы устанавливаете параметры классов в нескольких файлах yaml, он будет использовать только параметры, установленные в common.yaml.

Возможно, самая раздражающая вещь заключается в том, что во время всех моих проб и ошибок я в какой-то момент поместил hiera_include в объявление узла, я просто не поставил его после переменной Lol

person Just Lucky Really    schedule 13.11.2015