Получить информацию о фактах на основе переменной в марионетке
У меня есть эти факты:
"interfaces": "enp1s0f0,enp1s0f1,enp8s0,enp9s0,lo",
"ipaddress": "10.Z.Y.X",
"ipaddress_enp8s0": "10.Z.Y.X",
"ipaddress_lo": "127.0.0.1",
"main_ip": "10.Z.Y.X",
Так что с фактом main_ip мне нужно получить интерфейс, который его размещает.
Я попробую следующее, чтобы сравнить IP:
split($::interfaces, ',').each | String $value | {
notify { "ipaddress_${value}" : }
}
но я не могу получить значение факта с помощью переменной, которую я даю... Не могли бы вы посоветовать мне, как найти значение факта с помощью информации о переменной в кукольном файле?
Или, если у вас есть лучшая идея о том, как достичь главной цели, это будет оценено.
1 ответ
В любой недавней версии Puppet вы можете получить доступ к фактам узлов через $facts
хэш Это восходит по крайней мере к Puppet 4 (последняя версия Puppet 6). Я не помню, было ли это доступно в Puppet 3. В версии, которая поддерживает его, вы должны быть в состоянии сделать почти то, что вы описали в комментариях:
notify { $facts["ipaddress_${value}"] : }
(Обратите внимание на различия пунктуации.)
Возвращаясь по крайней мере к Puppet 3, вы также можете сделать это с помощью швейцарского армейского ножа Puppet: шаблоны ERB. Здесь scope
Объект, предоставленный автоматически шаблонам, является ключевым.
$myfact = inline_template('<%= scope.lookupvar("ipaddress_#{@value}") %>')
notify { $myfact : }