Могу ли я использовать переменные и объединять имена ресурсов Puppet?

Мне интересно, можно ли помещать переменные в имена ресурсов, например:

$c6release = $::operatingsystemmajrelease
  ##  [EPEL(5, 6, or 7)-x86_64]
yumrepo { 'EPEL' + $c6release + '-x86_64':  ##  This is the part I'm asking about.
    baseurl  => "http://repo.centos.com/cobbler/repo_mirror/EPEL" + $c6release + "-x86_64/",
    gpgcheck => false,
    enabled  => true,
    priority => '2';
}

Раньше я мог использовать массивы для создания нескольких файловых ресурсов, но я не могу использовать их так, как описано выше.

Я нашел следующее в своем исследовании:

http://www.nico.schottelius.org/blog/puppet-name-is-not-as-expected-but-classname/ (хотя это для Puppet 2.7)

https://ask.puppet.com/question/13266/trying-to-use-namevar-list-with-name-or-title-variable/

https://docs.puppet.com/puppet/latest/reference/lang_resources.html

Можно ли использовать определенный тип ресурса, чтобы позаботиться об этом?

https://docs.puppet.com/puppet/latest/reference/lang_defined_types.html

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

Можно ли использовать переменные в именах ресурсов?


person Nathan Basanese    schedule 24.09.2016    source источник


Ответы (1)


Да, язык Puppet поддерживает интерполяцию внутри имен ресурсов. См. документацию здесь.

Что вам нужно:

  $c6release = $::operatingsystemmajrelease
  yumrepo { "EPEL${c6release}-x86_64":
    baseurl  => "http://repo.centos.com/cobbler/repo_mirror/EPEL${c6release}-x86_64/",
    gpgcheck => false,
    enabled  => true,
    priority => '2',
  }
person Alex Harvey    schedule 24.09.2016
comment
Также он должен просто использовать $::operatingsystemmajrelease в интерполяции. - person Matt Schuchard; 24.09.2016
comment
// , Да, скорее всего. Впрочем, это всего лишь пример. Кроме того, я стал уделять немного больше внимания этому пределу puppet-lint в 80 колонок. - person Nathan Basanese; 24.09.2016
comment
// , Говоря о puppet-lint, пожалуй, я задам еще один вопрос. Делает ли использование такого рода интерполяции хороший стиль Puppet? - person Nathan Basanese; 24.09.2016
comment
@ Натан Басанезе, я думаю, вам нужно ознакомиться с этикетом для редактирования ответов другого пользователя. Bash имеет сложные правила для интерполяции переменных, которые не применяются в Puppet. Если у вас есть комментарий к моему ответу, пожалуйста, сделайте комментарий. - person Alex Harvey; 25.09.2016
comment
Извините, я сказал в своем резюме редактирования, что вы также добавили синтаксическую ошибку. На самом деле, я вижу, что скопировал точку с запятой из вашего вопроса. Puppet разрешает использовать точку с запятой после приоритета, но это не рекомендуется и нарушает руководство по стилю. Я обновил свой ответ, чтобы показать предпочтительный синтаксис. - person Alex Harvey; 25.09.2016
comment
@MattSchuchard Я не уверен, что определение короткого псевдонима для длинной уродливой строки, такой как $::operatingsystemmajrelease, всегда является плохим стилем. - person Alex Harvey; 25.09.2016
comment
@NathanBasanese Иногда невозможно избежать ограничения в 80 столбцов, на которое жалуется Puppet-lint, поэтому многие люди просто отключают эту проверку. - person Alex Harvey; 25.09.2016
comment
@NathanBasanese Кстати, синтаксис Puppet исторически был смоделирован автором Puppet на основе Nagios. - person Alex Harvey; 25.09.2016
comment
@AlexHarvey Стиль у них одинаков, но один, очевидно, немного более эффективен в вычислительном отношении. Кроме того, рекомендации по стилю Puppet уже более года составляют 140 символов в строке, а не 80, так что сейчас это правило вполне разумно. - person Matt Schuchard; 25.09.2016
comment
Та, не знал этого. Я тоже не уверен, что включу 140 символов. Сокращение строк — хорошая привычка для удобочитаемости, но если это невозможно, то это невозможно. - person Alex Harvey; 25.09.2016
comment
@AlexHarvey Честно говоря, люди тоже часто отключают проверку 140 символов. Я почти уверен, что большую часть времени игнорирую это. Люди, не читавшие примечания к выпуску для puppet-lint или linter-puppet-lint (которые я поддерживаю), доставили мне головную боль из-за недопустимого аргумента (80-->140) и того, как puppet-lint выводит ошибки на стандартный вывод. - person Matt Schuchard; 26.09.2016