Как я могу избежать записи всего дважды в моих данных hiera?

Есть ли лучший способ отформатировать мои данные hiera? Я хочу избежать проблемы «написать все дважды».

Вот что у меня есть сейчас:

[root@puppet-el7-001 ~]# cat example.yaml 
---
controller_ips: 
 - 10.0.0.51
 - 10.0.0.52
 - 10.0.0.53
controller::horizon_cache_server_ip: 
 - 10.0.0.51:11211
 - 10.0.0.52:11211
 - 10.0.0.53:11211

Мне было интересно, есть ли в hiera функциональность, похожая на функцию карты Perl. Если это так, я мог бы сделать что-то вроде:

controller::horizon_cache_server_ip: "%{hiera_map( {"$_:11211"}, %{hiera('controller_ips')})}"

Спасибо


person Red Cricket    schedule 06.05.2015    source источник


Ответы (2)


Мутация — это проблема. Это проще с идентичными данными благодаря возможности ссылок YAML.

controller_ips: &CONTROLLERS
 - 10.0.0.51
 - 10.0.0.52
 - 10.0.0.53
controller::horizon_cache_server_ip: *CONTROLLERS

Вам понадобится больше логики, чтобы порт можно было хранить независимо.

controller::horizon_cache_server_port: 11211

Манифест должен быть структурирован таким образом, чтобы вы могли комбинировать IP-адреса с портом.

person Felix Frank    schedule 07.05.2015

Это зависит от того, какую версию марионетки вы используете. У меня puppet 3.x можно сделать следующее:

common::test::var1: a
common::test::var2: b

common::test::variable:
 - "%{hiera('common::test::var1')}"
 - "%{hiera('common::test::var2')}"

common::test::variable2:
 - "%{hiera('common::test::var1')}:1"
 - "%{hiera('common::test::var2')}:2"

В puppet 4.0 вы можете попробовать использовать комбинацию zip, хэш функций из stdlib со встроенной функцией карта. Что-то типа:

$array3 = zip($array1, $array2)
$my_hash = hash($array3)
$my_hash.map |$key,$val|{ "${key}:${val}" }
person kkamilpl    schedule 06.05.2015