марионетка: факт в манифесте с точкой

Я использую марионетку 4.10.9 с фактером 3.6.8. У меня есть вопросы относительно использования фактов в манифесте, которые я задам в простой и более сложной форме. Во-первых, простой вопрос.

На агенте я вижу следующие адреса:

facter --show-legacy | grep ipaddress
ipaddress => 192.168.25.75
ipaddress_enp0s3 => 10.0.2.15
ipaddress_enp0s8.25 => 192.168.25.75
ipaddress_lo => 127.0.0.1

Я хочу использовать ipaddress_enp0s8.25 (интерфейс vlan) в манифесте.Да, я понимаю, что могу использовать ipaddress, но по причинам, которые я объясню позже, я хотел бы использовать именно интерфейс vlan.

Когда я пытаюсь использовать эту ссылку на интерфейс в манифесте, я получаю синтаксическую ошибку:

   listenip => $ipaddress_enp0s8.25

Эти ссылки ДЕЙСТВУЮТ, но опять же, я хочу использовать именно интерфейс vlan:

   listenip => $ipaddress

   listenip => $networking['ip']

Итак, как я могу использовать 'ipaddress_enp0s8 .25 '?

Вот более сложный ракурс и немного предыстории. Это часть более крупного проекта, который включает частую переработку (запуск, завершение) одной и той же среды. Особое внимание было уделено тому, как узлы ведут себя при начальной инициализации. Одна из первых замеченных мною проблем была:

'Evaluation Error: Operator '[]' is not applicable to an Undef Value.' 

Потому что в то время я пытался использовать:

$networking['interfaces']['enp0s8.25']['ip']

И этого не существует при первоначальном запуске. Я не мог пройти мимо «Загрузка фактов»

, поэтому я остановился на «$ network ['ip»] », который работает нормально. Однако при первом запуске это возвращает 10.0.2.15. При последующих запусках он возвращает желаемый адрес 192.168.25.75. Результатом является, как правило, работающий узел, но для некоторых услуг существует 30-минутный перерыв.

Что я могу здесь использовать, чтобы желаемый адрес vlan стал значением? Я бы хотел попробовать ipaddress_enp0s8.25, но не могу по причинам, указанным выше.

Пара разн. на заметку:

  • Я создаю этот интерфейс vlan, используя модуль razorsedge-network.
  • Мне удалось без проблем использовать ipaddress_enp0s8_25 в марионетке 3.8
1
задан 5 January 2018 в 23:18
1 ответ

Доступ к фактам изменился в версии 4. Попробуйте получить доступ к факту с помощью хэша $ fact, $ fact ['ipaddress_enp0s8.25'], вместо использования переменной верхней области видимости.

Вы могут по-прежнему использовать переменные верхней области видимости для доступа к фактам, но они устарели, и вам следует как можно скорее перейти к использованию хэша $ fact.

В этом случае, похоже, этот факт изменил имена, и это проблема, с которой вы столкнулись. В предыдущей версии имя facter было экранировано подчеркиванием, в то время как в более новой версии есть точки, которые не могут быть экранированы (насколько мне известно) при доступе к факту с использованием переменной верхнего уровня, отсюда необходимость использования $ fact хэш.

$ ipaddress_enp0s8.25 будет неправильно интерполирован, так как точка должна быть экранирована.

$ fact ['ipaddress_enp0s8.25'] не будет интерполироваться, так как мы обращаемся к элементу хэша в одинарных кавычках .

Подробнее о том, как факты используются в Puppet 4, можно узнать здесь:

https://puppet.com/docs/puppet/4.10/lang_facts_and_builtin_vars.html

1
ответ дан 3 December 2019 в 23:21

Теги

Похожие вопросы