Я тестирую марионеточный файл init.pp (в Windows), который выглядит примерно так:
class myclass {
package { 'java':
ensure => installed,
provider => 'msi',
source => 'S:\puppet-repo\jdk1.6.0_31.msi',
install_options => { 'INSTALLDIR' => 'C:\tools\java' },
}
}
Тогда мой файл site.pp выглядит так:
node default {
include myclass
}
Я создал файл tests / init.pp, который просто вызывает модуль myclass:
class { 'myclass': }
Я могу запустить файл tests / init.pp, и он правильно устанавливает Java. Мне было интересно, есть ли способ просто запустить модуль myclass из командной строки без создания отдельного файла tests / init.pp. Или, может быть, я мог бы переместить package
в myclass в свой собственный файл .pp и включить его в init.pp, а затем я мог бы запустить этот отдельный файл .pp, если бы захотел. Как это сделать более правильно?
Во-первых, уловка для проверки синтаксиса, если вы еще не знаете:
puppet parser validate my_file.pp
Теперь то, как вы подходите к выборочному тестированию нового класса, может варьироваться в зависимости от вашего развертывания, но я могу рассказать вам, как я это делаю, и, возможно, это будет иметь смысл в вашем случае. Или, возможно, все на ServerFault скажут мне, насколько я ошибаюсь.
В любой данной среде у меня есть набор объявлений узлов с использованием наследования:
node base_production_environment {
include ssh
include ntp
include whatever_else
}
node /prod-app\d+\.mycompany\.com/ inherits base_production_environment { }
Теперь, когда я пишу новый класс, я хочу сначала протестировать его в конкретной системе перед его развертыванием, поэтому я добавляю более конкретное (по имени хоста) объявление узла, чтобы оно переопределило менее конкретное (по регулярному выражению) объявление , вот так:
node 'prod-app7.mycompany.com' inherits base_production_environment {
include my_new_class
}
Я значительно упростил это, чтобы выделить использование определенных объявлений узлов для выборочной проверки новых классов. Мы также используем окружающая среда для внедрения изменений в менее важные среды до их внедрения в производственную среду и т. д.
Итак, я просто перечитал ваш вопрос, и мне пришло в голову, что вы, возможно, используете подход к каталогам с размещенными модулями, а не с помощью puppetmaster. Если это правда, вы можете включить класс для целей тестирования, например:
puppet apply --modulepath=C:\puppet-modules\ -e "include my_class"
Однако я не знаю, является ли это правильным синтаксисом каталога для марионетки под Windows.
вы также можете запустить: puppet agent -t --tags your_class_name
Итак, в вашем случае:
puppet agent -t --tags my_new_class