Присвойте узлы определенной иерархии иерархии - PullRequest
0 голосов
/ 09 марта 2019

Я добавил в свой hiera.yaml иерархию, подобную этой

- "nodes/%{::certname}"
- "locations/{::location}.yaml"
- "groups/%{::group}.yaml"
- common

Для узлов, которые я знаю, hiera просматривает их через ресурс узлов.Но как это работает для локаций или групп?Нужно ли создавать собственный факт?И если да, как я могу назначить этот факт этому узлу.Могу ли я сделать это в определении узла в site.pp так:

 node example.com{
    ::location = "new york"
    ::group = "mailer"  ... }

1 Ответ

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

Для узлов, которые я знаю, hiera просматривает их через ресурс узлов.

Я не уверен, что понимаю, что вы имеете в виду, но я думаю, что вы неправильно поняли.

Но как это работает для местоположений или групп?

Интерполяция Hiera вставляет значения переменных Puppet и / или результаты определенной интерполяциифункции.certname, location и group одинаковы в этом отношении, но переменная certname автоматически предоставляется Puppet на основе сертификата, предоставленного агентом для идентификации себя.(Это полностью ортогонально блокам узлов и терминалам узлов, хотя они тоже используют имя сертификата.)

Нужно ли создавать пользовательский факт?

Вы можете сделать это таким образом, потому что все факты, представленные агентом, доступны как переменные Puppet верхнего уровня.Переменные, интерполированные Hiera, не должны быть получены из фактов, но они должны быть определены перед выполнением запросов Hiera, которые требуют их, и фактами, доступными для разработчика каталога, прежде чем он начнет оценивать манифест сайта.

И если да, то как я могу присвоить узлу этот факт.

Это полностью вопрос , как реализовать факт .

Могу ли я сделать это в определении узла в site.pp [?]

Вы не можете установить факты в своих блоках узлов, но вы можете установить область видимости узлаи top-scope переменные , и они должны быть доступны Hiera для интерполяции.Для области видимости узла синтаксис выглядит следующим образом:

node example.com{
  $location = "new york"
  $group = "mailer"
  # ...
}

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

...