puppet: попытка использовать определение $title как часть имени переменной hiera

Мы используем модуль puppet для создания записей hosts, и он становится довольно большим. На данный момент у нас есть это

host { hiera('server1-hostname'):
ip           => hiera('server1-ip-host'),
host_aliases => 'server1',
}

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

Чтобы упростить это, я пытаюсь это

define hosts::addhost () {
host { hiera("${title}-hostname"):
ip           => hiera("${title}-ip-host"),
host_aliases => $title,
}
}

Потом в классе,

$hostlist = server1, server2

addhost {$hostlist: }

но это дает мне различные ошибки, такие как

Синтаксическая ошибка в ':'; ожидал '}'

Это возможно? Это просто вопрос пунктуации или требуется совершенно другой подход?


person vmos    schedule 10.06.2014    source источник
comment
Теоретически это может работать с $hostlist = [ server1, server2, ... ] (имейте в виду []), но да, есть лучший подход. Приходит ответ.   -  person Felix Frank    schedule 10.06.2014


Ответы (1)


Было бы проще решить эту проблему с помощью экспортированных ресурсов.

Каждый сервер экспортирует свою собственную запись хоста, опираясь на такие факты, как $::hostname

@@host { "$::fqdn": ip => $::ipaddress_eth0, host_aliases => $::hostname, tag => "server-list" }

А также импортирует все эти ресурсы со всех (других) машин

Host<<| tag == "server-list" |>>

Конечно, вы можете использовать Hiera, чтобы можно было переопределить значения, например. экспортировать определенный IP-адрес, если facter выбирает неправильный.

@@host { "$::fqdn": 
  ip => hiera('hosts-ip-address', $::ipaddress_eth0),
  host_aliases => $::hostname,
  tag => "server-list"
}

Если вы настаиваете на хранении ваших полных данных в Hiera, вы можете рассмотреть следующую структуру

hosts:
  "server1-hostname":
    ip: "a.b.c.d"
    host_aliases: server1
  "server2-hostname":
    ...

а в манифесте просто

create_resources('host', hiera('hosts'))

Но это избыточная информация, поскольку facter может собрать все это для вас (см. выше).

person Felix Frank    schedule 10.06.2014