Доступ к нескольким вложенным значениям hiera из кода марионетки (или команды "поиск марионетки")
Это, вероятно, очень простой вопрос, но, кажется, трудно найти ответ в Интернете, или, по крайней мере, я трачу слишком много времени на это.
Как я могу получить доступ или напрямую составить список из всех foo::bar
значения из hieradata
файл (ниже) в модуле Puppet с lookup()
или лучше?
---
foo::bar:
'some uniq name':
baz: 12345
...
'another uniq name':
baz: 54321
...
Так что, если будет возможно использовать подстановочные знаки, путь ключа будет выглядеть следующим образом -> foo::bar::*::baz.
1 ответ
Это требует использования lookup
функция, лямбда-итератор и синтаксическая запись хэша, так что на самом деле это не так просто, хотя код может показаться таким.
Нам нужно перебрать значения для ключей внутри foo::bar
хэш. Мы можем начать с этого через:
lookup(foo::bar, Hash).each |String $key, Hash $value| {
# first $key is 'some uniq name' string
# first $value is 'some uniq name' hash
}
Теперь нам нужно получить доступ к значениям для bar
ключ внутри каждого вложенного хэша. Мы можем сделать это с помощью обычного синтаксиса для доступа к значениям ключей внутри хеша:
lookup(foo::bar, Hash).each |String $key, Hash $value| {
$value['baz'] # first value is 12345
}
Однако нам нужно хранить эти значения внутри переменной, чтобы они сохранялись, а не отбрасывались после выхода из области лямбды. Поэтому нам нужно иметь переменную, в которой хранится возвращаемое значение лямбда-итератора, и использовать лямбда-итератор, который возвращает измененный массив:
$bazes = lookup(foo::bar, Hash).map |String $key, Hash $value| {
$value['baz']
}
Таким образом, достигается цель сохранения массива (или списка, как вы это выразили) всех baz
значения внутри hieradata. Хотя код короткий, возможно, не все так просто.
Полезная документация -
поиск: https://puppet.com/docs/puppet/5.2/hiera_use_function.html
лямбда-итератор map
: https://puppet.com/docs/puppet/5.3/function.html
Доступ к значениям хеша: https://puppet.com/docs/puppet/5.3/lang_data_hash.html