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) package list exec { 'update-package-list' : command => 'usrbinsudo usrbinapt-get update' , } |
Затем мы можем определить класс, отвечающий за установку OpenJDK . Класс в Puppet можно понимать как совокупность ресурсов, которые Puppet будет рассматривать как единое целое.
1
2
3
4
5
6
7
8
|
class java_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
|
class tomee { 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 .