Статьи

Установка TomEE из Puppet

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 .