В марионетке модули могут иметь тире в своем имени, и, следовательно, переменные тоже. Но тогда как мы можем использовать такие переменные?
Например, у меня есть $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.