Apache TomEE — это стек Apache, предназначенный для сертификации веб-профилей Java EE 6, где Tomcat является лидером. Это соединение Tomcat + Java EE . Puppet — это инструмент, разработанный для декларативного управления конфигурацией наших систем. Осталось только описать системные ресурсы и их состояние. Это описание хранится в файлах ядра Puppet , которые называются манифестами Puppet . В этом посте мы рассмотрим, как определить TomEE как ресурс Puppet , чтобы его можно было автоматически устанавливать на все компьютеры, которые управляются Puppet . Я использую Ubuntu 12.04 , но, конечно, это можно адаптировать к вашей системе. Поскольку TomEE написан на Java , нам, очевидно, нужно убедиться, что в нашей системе присутствует JDK , в нашем примере мы будем использовать OpenJDK 1.6 . Способ установки пакета в нашей системе заключается в использовании ресурса Package, который использует соответствующий менеджер пакетов для его поиска, загрузки и установки.
Давайте создадим файл манифеста init.pp, и первое, что мы собираемся сделать, — это создать задачу exec, которая обновит менеджер пакетов списком последних доступных пакетов.
| 1 2 3 4 | # update the (outdated) packagelistexec { 'update-package-list':command => 'usrbinsudo usrbinapt-get update',} | 
Затем мы можем определить класс, отвечающий за установку OpenJDK . Класс в Puppet можно понимать как совокупность ресурсов, которые Puppet будет рассматривать как единое целое.
| 1 2 3 4 5 6 7 8 | classjava_6 {  package{ "openjdk-6-jdk":    ensure => installed,    require => Exec["update-package-list"],  }} | 
Я полагаю, это довольно интуитивно понятно , прежде всего мы гарантируем, что пакет openjdk-6-jdk уже присутствует в системе. Если он не установлен, выполняется ресурс Exec [‘update-package-list’] , и, наконец, менеджер пакетов устанавливает OpenJDK в систему. После выполнения этой части мы можем без проблем запустить java -version или javac -version , OpenJDK здесь.
Следующий шаг — установка TomEE . Возможно, пакет TomEE отсутствует в вашем репозитории дистрибутивов в формате программного пакета (например, в случае Debian .deb ). По этой причине нам нужен другой подход к тому, который следует за OpenJDK . Мы собираемся скачать файл tar.gz с сайта TomEE и распаковать его в каталог установки.
| 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 | classtomee { file {"/opt/tomee-1.5.1":    ensure => directory,    recurse => true, } -> exec { "download-tomee":    command => "/usr/bin/wget http://apache.rediris.es/openejb/openejb-4.5.1/apache-tomee-1.5.1-webprofile.tar.gz -O /tmp/tomee-1.5.1.tar.gz",    creates => "/tmp/tomee-1.5.1.tar.gz", } -> exec { "unpack-tomee":     command => "/bin/tar -xzf /tmp/tomee-1.5.1.tar.gz -C /opt/tomee-1.5.1 --strip-components=1",    creates => "/opt/tomee-1.5.1/bin", }} | 
Как и в OpenJDK, мы создаем класс с именем tomee . Сначала мы создаем каталог, в который будет установлен TomEE (команда tar требует, чтобы каталог назначения уже был создан). Затем мы загружаем TomEE с сайта Apache с помощью команды wget , чтобы окончательно распаковать его в уже созданный каталог.
Обратите внимание на использование -> . Puppet не гарантирует порядок выполнения определенных ресурсов, поэтому вы не можете вывести «a priori», если TomEE будет загружен сначала, а затем установлен или наоборот. Для определения порядка мы используем оператор ->, который устанавливает приоритет между ресурсами.
Теперь у нас установлен Apache TomEE на компьютере, но, очевидно, он не запускается и не останавливается автоматически, вы должны выполнить /opt/tomee-1.5.1/bin/startup.sh, чтобы TomEE был доступен. Давайте изменим это с помощью сервисного ресурса. Как следует из названия, он регистрирует в качестве службы установленный сервер. Итак, внутри класса Tomee определите следующий ресурс сервиса :
| 01 02 03 04 05 06 07 08 09 10 11 | service { "tomee":    provider => "init",    ensure => running,    start => "/opt/tomee-1.5.1/bin/startup.sh",    stop => "/opt/tomee-1.5.1/bin/shutdown.sh",    status => "",    restart => "",    hasstatus => false,    hasrestart => false,    require => [ Exec["unpack-tomee"], Package["openjdk-6-jdk"] ],  } | 
Следите за двумя пунктами предыдущего объявления, первое — это объявления провайдера / запуска / остановки, провайдер настроен на инициализацию, что означает, что мы хотим использовать стандартное управление сервисами в стиле инициализации, но, например, вы можете использовать launchd ( в случае Mac OS X), upstart , windows (для компьютеров с Windows),… см. [ http://docs.puppetlabs.com/references/latest/type.html#service ] для получения дополнительной информации. И поскольку TomEE по умолчанию не реализован в качестве службы Linux (в основном потому, что он не был установлен из собственного пакета, такого как .deb ), нам нужно указать, какую команду следует выполнить для запуска и остановки TomEE .
Второй момент: сервисный ресурс требует распаковки TomEE и установки OpenJDK , поэтому атрибут require содержит два объявления. Смотрите полный сценарий здесь .
Заключительные замечания о примере:
- В Puppet создает атрибут внутри задачи exec , используется, чтобы узнать, должен ли ресурс выполняться или нет (в случае, если файл существует, exec не будет выполнен). В нашем случае мы загружаем TomEE в каталог tmp . Большинство ОС периодически удаляет этот каталог, так что это плохое место для его загрузки, но для этого урока это работает отлично, потому что я мог бы повторно выполнять скрипт каждый раз как новое выполнение.
- Для упрощения мы добавили весь контент в один файл, на вашем предприятии я предлагаю создать модуль TomEE, чтобы вы могли поделиться им со всеми своими проектами.
- Версия TomEE должна быть установлена как переменная / параметр / hiera, чтобы тот же класс можно было повторно использовать при выпуске новой версии TomEE .
Ссылка: установка TomEE от Puppet от нашего партнера по JCG Алекса Сото в блоге One Jar To Rule All .