Получить переменную из yaml в манифесте марионетки

Я делаю один проект для марионетки, но пока придерживаюсь одной логики.

Таким образом, мы хотим знать, можем ли мы получить переменную из .yaml, .json или обычного текстового файла в файле манифеста марионетки.

Например, мой манифест марионетки хочет создать пользователя, но переменная существует в .yaml или любом файле конфигурации, поэтому необходимо получить переменную из внешнего файла. Манифест марионетки также может зацикливаться, если в файле .yaml существует несколько пользователей.

Я читал о hiera, но скажем, мы не используем hiera, есть ли какой-нибудь возможный способ.


person MrAZ    schedule 12.03.2019    source источник


Ответы (1)


Это можно сделать несколькими способами, используя комбинацию встроенной и stdlib функции, по крайней мере, для YAML и JSON.

Создайте файл в mymodule/files/myfile.yaml:

▶ cat files/myfile.yaml 
---
foo: bar

Затем в ваших манифестах прочитайте его в строку и проанализируйте:

$myhash = parseyaml(file('mymodule/myfile.yaml'))
notice($myhash)

Это выведет:

Notice: Scope(Class[mymodule]): {foo => bar}
  • Или, используя функции loadyaml или loadjson stdlib:
$myhash = loadyaml('/etc/puppet/data/myfile.yaml')
notice($myhash)

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

(Необходимо ли вам должно это делать — это совершенно другой вопрос — подсказка: ответ — вы почти наверняка должны использовать Hiera — но это не тот вопрос, который вы задали.)

person Alex Harvey    schedule 12.03.2019