Назад | Перейти на главную страницу

Переменные с тире

В марионетке модули могут иметь тире в своем имени, и, следовательно, переменные тоже. Но тогда как мы можем использовать такие переменные?

Например, у меня есть $ssh_mode переменная, определенная в google-authenticator::params класс, поэтому я надеюсь, что смогу позвонить $google-authenticator::params::ssh_mode, но марионетка (0,25,5) режет на тире. С помощью ${google-authenticator::params::ssh_mode} тоже не помогает.

Что я могу сделать, чтобы получить доступ к этой переменной?

Вы можете найти это в более поздних версиях. Конечно, в Puppet 2.7 интерполяция переменных в строках теперь включает тире (что также вызывает некоторые проблемы совместимости).

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

Имена классов, имена модулей и имена определенных и настраиваемых типов ресурсов должны быть ограничены строчными буквенно-цифровыми символами и знаками подчеркивания и должны начинаться со строчной буквы; то есть они должны соответствовать выражению [a-z] [a-z0-9 _] *. Хотя некоторые имена, которые нарушают эти ограничения, в настоящее время работают, использовать их не рекомендуется.

Из Руководство по языку (зарезервированные слова и допустимые символы).

Вот страница с описанием разрешенные символы в идентификаторах марионеток.

В разделе имен классов вы можете прочитать:

 …but if you use any hyphens, you screw up qualified variable access.

В разделе переменных вы можете прочитать:

* [a-zA-Z0-9_]+ (No unicode nonsense or %@^ etc.)
* i.e. no hyphens, ever.