Можете ли вы прочитать содержимое params.pp в хеш в Rspec-puppet?

Мы хотели бы, чтобы наши тесты Rspec Puppet считывали содержимое params.pp в хэш и проверяли, нет ли в этом хеше неожиданных элементов.

Вся информация, которую я нашел, описывает, как установить параметры для тестирования через let (:params).

Мы уже делаем это, но хотим сделать что-то вроде expect params.keys.sort.to eq ('param1', 'param2', 'param3'), но не знаем, как получить содержимое params.pp в переменную, которую мы можем использовать в наших тестах.

Мы используем Puppet 3.7.5.


person Kenny Drobnack    schedule 13.07.2016    source источник
comment
Символ params на самом деле предназначен для параметров класса, а не для манифеста params. Моей первой реакцией на ваш вопрос было «нет», и беглый взгляд на более продвинутый материал rpsec-puppet, который я сделал, также указывает на «нет». Puppet 3.7.x является EOL, и использование params.pp на некоторое время устарело. Вы думали об обновлении, или это одна из головных болей устаревшего кода?   -  person Matt Schuchard    schedule 13.07.2016
comment
@MattSchuchard, я не понимаю. Если вы напишете класс params, скажем, mymodule::params, как вы назовете манифест, в котором хранится его определение?   -  person John Bollinger    schedule 13.07.2016
comment
Кроме того, существует множество модулей, использующих шаблон класса params, а в руководстве по языку Puppet есть конкретное обсуждение. Я не вижу никаких оснований утверждать, что он устарел или даже потерял популярность. В самом деле, хотя компания Puppet, Inc. может отказаться от наследования классов, на котором основан шаблон, она не имеет права осуждать сам шаблон.   -  person John Bollinger    schedule 13.07.2016
comment
@JohnBollinger Puppet неоднократно сообщал нам и в предоставленных нам официальных руководствах, что с конца 3.x следует полностью избегать наследования и params.pp. Я, вероятно, должен был сказать «крайне обескуражен» вместо того, чтобы осуждать. Теперь с 4.x вы должны использовать данные модуля с поставщиком данных Puppet (поэтому RIPIenaar больше не поддерживает свой драгоценный камень для данных модуля).   -  person Matt Schuchard    schedule 13.07.2016
comment
@MattSchuchard, очевидно, Puppet отправляет смешанные сообщения. Последнее руководство по языку (ссылка в предыдущем комментарии) содержит обсуждение наследования классов в целом и шаблона класса params в частности, без каких-либо предложений (там), что следует избегать шаблона класса params. Я не помню, чтобы видел какие-либо противоречивые сообщения. Наследование Node, с другой стороны, представляет собой совершенно другую проблему: оно устарело где-то в 3.x и больше не существует в Puppet 4.   -  person John Bollinger    schedule 13.07.2016
comment
Чтобы ответить на вопросы, у нас есть довольно много кода Puppet, и он стандартизирован для использования params.pp для передачи параметров. Обновление находится на нашем радаре, но, вероятно, пройдет некоторое время, прежде чем мы доберемся до него из-за других сроков реализации проектов.   -  person Kenny Drobnack    schedule 13.07.2016
comment
@JohnBollinger Я бы не удивился. Их служба поддержки работает изворотливо, и, похоже, существует разрыв между разработчиками/инженерами и их службой поддержки (об этом нам сообщила служба поддержки). Вы, вероятно, правы, что то, что я считал устаревшим, было наследованием узлов, а не наследованием классов, и я перепутал их.   -  person Matt Schuchard    schedule 13.07.2016
comment
@JohnBollinger Чтобы не заходить дальше темы, я только что вспомнил, что наследование от params является частью официальных рекомендаций по стилю, как что-то, что нельзя делать, и предупреждение в puppet-lint.   -  person Matt Schuchard    schedule 15.07.2016
comment
@MattSchuchard, я не знаю о puppet-lint, но текущая версия Официальное руководство по стилю Puppet демонстрирует шаблон класса params как рекомендуемый стиль и в других местах явно принимает наследование класса для этой цели (и только для этой цели). Например, помните: наследование классов следует использовать только для myclass::params параметров по умолчанию.   -  person John Bollinger    schedule 15.07.2016
comment
@JohnBollinger Хорошо, это явно кажется чрезвычайно противоречивой директивой. Я предполагаю, что моим личным предпочтением по-прежнему будут данные модуля от поставщика данных Puppet, но я не против, если другие наследуют параметры.   -  person Matt Schuchard    schedule 15.07.2016


Ответы (1)


Содержимое манифеста Puppet с именем params.pp обычно является определением класса Puppet с простым именем «params» (или, возможно, определенного типа с таким именем). Модули довольно часто используют такой класс в реализации шаблона «класс параметров», в котором цель класса - предоставить через свои переменные класса значения по умолчанию для параметров класса других классов в модуле.

Поэтому я предполагаю, что вы предлагаете собрать имена и значения переменных класса в хэш для их проверки, но такая проверка выходит за рамки rspec-puppet:

Тесты Rspec-puppet предназначены для проверки поведения Puppet, когда он компилирует ваши манифесты в каталог ресурсов Puppet.

(Учебное пособие по Rspec-puppet)

Другими словами, rspec-puppet предназначен для тестирования процесса составления каталога и его результатов. Если вы изучите доступные сопоставители, вы увидите, что это их цель. Однако значения переменных класса, которые не являются параметрами (например, значения класса params), сами по себе не включаются в скомпилированные каталоги, поэтому они не подлежат тестированию с помощью puppet-rspec. Вы можете проверить, отражаются ли эти значения в параметрах ресурсов, которые входят в каталог, но каталог не содержит никакой информации о переменных, которые были доступны, но не использовались.

person John Bollinger    schedule 13.07.2016