Используйте hiera слияние хешей. Определите поведение слияния в hiera.yaml
, возможные значения: native, deep, deeper
, например:
:merge_behavior: deeper
И чем просто использовать hiera. Согласно документации:
При более глубоком слиянии хэшей Hiera рекурсивно объединяет ключи и значения в каждом исходном хэше.
Здесь у вас есть поведение слияния в примеры.
ОБНОВЛЕНИЕ: я настроил следующий простой пример:
hiera.yaml:
:hierarchy:
- apps
- common
:merge_behavior: deeper
apps.yaml:
test_hash:
abc1:
value: apps
abc2:
value: apps
common.yaml:
test_hash:
abc1:
value: comm
abc3:
value: comm
test_hash.pp
class test_hash
{
$normal_hash = hiera('test_hash')
$hiera_hash = hiera_hash('test_hash')
notify{ " normal: ${normal_hash}":}
notify{ " hiera : ${hiera_hash}":}
}
include test_hash
Сценарий следующего вызова марионетки puppet apply test_hash.pp
В результате:
Примечание: нормально: {abc1=›{value=›apps}, abc2=›{value=›apps}}
Примечание: hiera : {abc1=›{value=›apps}, abc3=›{value=›comm}, abc2=›{value=›apps}}}
ОБНОВЛЕНИЕ 2: вы также можете использовать функцию merge из stdlib . Но, вероятно, чтобы использовать его, вам придется немного изменить свою архитектуру, например:
Обычно определяют значения common
, в node/%{::fqdn}
определяют значения, специфичные для узла, а затем используют их, как в примере:
$common_hash = hiera('something_from_common')
$node_hash = hiera('something_from_fqdn')
$merged_hash = merge($node_hash, $common_hash)
(Да, это немного некрасиво :))
person
kkamilpl
schedule
15.07.2015