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

Применение класса марионеток вручную

Я тестирую марионеточный файл 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