Есть ли способ использовать параметр или переменную для регулярного выражения внутри случая в Puppet Code - PullRequest
1 голос
/ 18 июня 2019

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

Ниже приведен пример кода в моем классе кукол

case $os_family {
    'RedHat': {
     case $node_certname {
        /(xyz|pqr\d+)\.(com|au)?/: {

Так как вышеприведенное регулярное выражение повторяется в мае моих классов, я хочу объявить его централизованно, чтобы мне не приходилось менять все классы, и я могу просто изменить его в центральном месте

Я пытался передать переменную, но она не сработала. Может кто-нибудь, пожалуйста, помогите, если это возможно

Я должен быть в состоянии передать параметр или заменить его некоторой переменной для регулярного выражения

/(xyz|pqr\d+)\.(com|au)?/

1 Ответ

0 голосов
/ 21 июня 2019

Я предполагаю, что у вас версия Puppet <5.4, и на вас повлияла ошибка в Puppet. </p>

В Puppet 5.4, примечания к выпуску обратите внимание, что:

Предыдущие версии Puppet преобразовывали «обогащенные» типы данных в String слишком рано при использовании с определенными типами ресурсов, классами или функциями. Например, регулярное выражение будет преобразовано в строку. Puppet 5.4.0 отбрасывает преобразование, и определенные типы, классы и функции становятся экземплярами Regexp, Version, VersionRange, Binary, Timespan и Timestamp вместо представления значения String.

Здесь приведен пример этого класса:

class test (
  $regex = /(xyz|pqr\d+)\.(com|au)?/
  ) {
  $data = 'xyz.com'
  case $data {
    $regex: {
      notice("matches")
    }
  }
}

include test

Это прекрасно работает на Puppet> = 5.4.0:

▶ bundle exec puppet -V                      
5.5.0
▶ bundle exec puppet apply manifests/init.pp                    
Notice: Scope(Class[Test]): matches
Notice: Compiled catalog for alexs-macbook-pro.local in environment production in 0.02 seconds
Notice: Applied catalog in 0.01 seconds

Однако в более ранних версиях он не работает.

Если вы обновитесь до последней версии Puppet 5 (или 6), вы можете избежать этой ошибки.

...