Назад | Перейти на главную страницу

Переопределение параметров класса Puppet с помощью hiera

Я пытаюсь использовать heira для переопределения параметров класса в марионетке. У меня такой класс:

class test(
    $parameter1="codeddefault"
) 
{
    notify {"parameter1 is $parameter1": }
}

Это мой hiera.yaml:

---
version: 5
defaults:
  # The default value for "datadir" is "data" under the same directory as the hiera.yaml
  # file (this file)
  # When specifying a datadir, make sure the directory exists.
  # See https://docs.puppet.com/puppet/latest/environments.html for further details on environments.
  # datadir: data
  # data_hash: yaml_data
hierarchy:
  - name: "Per-node data (yaml version)"
    path: "nodes/%{::trusted.certname}.yaml"
  - name: "Group (Server class or function. e.g. lg for logging server)"
    path: "groups/%{facts.group}.yaml"
  - name: "Other YAML hierarchy levels"
    paths:
      - "common.yaml"

Тот факт, что определяет «группы», исходит из подстроки имени хоста, согласно некоторому внутреннему соглашению об именах. Что это за условность, не имеет значения для целей этого вопроса. Излишне говорить, что я проверил, работает ли оно должным образом, как будет видно из результатов позже.

Предположим, для целей этого вопроса, что группа в этом случае - это "inlg". Я ожидаю, что я смогу поместить следующее в "inlg.yaml":

test::parameter1: groupvalue.

И когда я запускаю свой манифест (который включает в себя тестовый класс), ресурс уведомления должен выводить:

parameter1 is groupvalue

Однако, это не так. Вместо этого он возвращает "codeddefault"

Чтобы проверить проблему дальше, я установил следующие значения в "{:: trust.certname} .yaml"

testvalue: host

и это в inlg.yaml:

testvalue: group

Добавляю в класс:

$testvalue = lookup("testvalue")
notify {"testvalue is $testvalue": }

Как и следовало ожидать, код возвращает значение test, равное host. Для меня это имеет смысл, поскольку значение в более конкретном "{:: trust.certname} .yaml" переопределяет значение в inlg.yaml (хотя и "нормальный" поиск, а не параметр класса)

Если я удалю

testvalue: host 

из "{:: trust.certname} .yaml"

testvalue тогда равно "группе"

Что, опять же, я ожидал.

Чтобы еще больше запутать ситуацию, если я установлю это в {:: trust.certname} .yaml:

test::parameter1: blah

Затем ресурс notify в классе, показанном выше, возвращает "blah".

Если я удалю

test::parameter1: blah

из {:: trust.certname} .yaml значение параметра1 снова возвращается к "codeddefault"

Я ожидаю, что он получит значение из yaml-файла «группы» (inlg.yaml), как это делают «обычные» поисковые запросы.

Что мне не хватает?

Заранее спасибо.