Puppet создает имена переменных, используя hiera

Я хочу, чтобы Puppet создавал другое имя переменной в зависимости от файла hiera, связанного со средой. Я хочу сделать это, потому что хочу, чтобы Puppet использовал IP-адрес, связанный с определенным сетевым интерфейсом. В идеале сетевой интерфейс будет в файле hiera. Таким образом, вы можете соединить имя переменной ip_address с сетевым интерфейсом, определенным в файле hiera, что будет выглядеть примерно так.

::ipaddress_{$network_interface_from_hiera_file}

Это возможно?

Прямо сейчас у меня есть следующее, но я думаю, что есть лучшая реализация. Если сетевые интерфейсы изменятся, мне придется добавить еще один случай.

if $environment == 'production' {
  $client_address = $::ipaddress_enp130s0f0
} else {
  $client_address = $::ipaddress_eth2
} 

person Gen Ohta    schedule 24.03.2016    source источник


Ответы (1)


Похоже, вы ищете eval в Puppet, как и в других языках оболочки и Perl, и, насколько я знаю, их нет.

Я бы, вероятно, просто использовал пользовательский факт, который всегда возвращает IP-адрес, который мне нужен. Конечно, тогда вам нужно решить проблему, как донести пользовательские данные до вашего автопарка.

Другим решением может быть использование иерархического поиска Hiera:

В hiera.yaml:

:hierarchy:
  - %{::node_environment}
  - common

В общем.yaml:

---
myclass::client_address: "%{::ipaddress_eth2}"

В продакшн.yaml:

---
myclass::client_address: "%{::ipaddress_enp130s0f0}"

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

person Alex Harvey    schedule 26.03.2016