получить информацию о фактах на основе переменной в марионетке - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть эти факты:

"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 Ответ

0 голосов
/ 29 сентября 2018

В любой сравнительно недавней версии 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 : }
...