tomcat
Overview
The tomcat module allows you to set up and manage a standalone or multiple instances.
Module Description
Compatibility
This module is currently aimed at the RHEL and Debian packaged versions of Tomcat versions 6 and 7.
It has only been tested on CentOS 6/7 and Debian 6/7/8 with the base OS tomcat 6 and tomcat 7 (EPEL for RHEL) packages.
Requirements
- Puppet 3.x
- puppetlabs/stdlib >= 3.2.1
- puppetlabs/concat >= 1.0.1
Setup
Beginning with Tomcat
All tomcat packages will be installed and tomcat is configured as standalone server. The OS specific file and directory structure is used, i.e. /etc/tomcat6/server.xml. Hash config could contain the hole configuration or just a part of it. For defaults take a look to manifests/params.pp, defaults hash.
class { 'tomcat': }
To install tomcat 7 standalone with an AJP connector instead of HTTP use the following:
class { 'tomcat':
version => '7',
services => {
Catalina => {
connectors => {
ajp-8009 => {
port => '8009',
protocol => 'AJP/1.3',
},
},
},
}, # services
}
Or use this yaml file in your hiera datastore:
tomcat::version: '7'
tomcat::services:
Catalina:
connectors:
ajp-8009:
port: '8009'
protocol: 'AJP/1.3'
Configure a virtual host
Setup a new virtual host instead the default host 'localhost', using a JRE 6.
tomcat::java_home: '/etc/alternatives/jre_1.6.0'
tomcat::services:
Catalina
engine:
Catalina:
default_host: 'www.example.com'
hosts:
www.example.com:
app_base: 'webapps'
unpack_wars: true
auto_deploy: true
xml_validation: false
xml_namespace_aware: false
Configure and manage another virtual host. First part of the title is the servername, tomcat6 or tomcat7 for standalone server. The second part is the service, the third the engine there the virtual host 'www.example.com' belongs to.
tomcat::host { 'tomcat6:Catalina:Catalina:www.example.com': app_base => 'webapps', unpack_wars => true, auto_deploy => true, xml_validation => false, xml_namespace_aware => false, }
Configure multiple instances
For using tomcat as multi instance server, set ensure to 'stopped' and enable to 'false'. That will shutdown and disable the the standalone server.
class { 'tomcat':
ensure => stopped,
enable => false,
}
Installs base OS tomcat version 6 packages in specified version 6.0.24-72.el6_5. All configuration files and webapps for instances of tomcat will be stored under /var/tomcat in a subdirectory named as the tomcat::server title.
class { 'tomcat':
ensure => stopped,
enable => false,
version => '6',
release => '6.0.24-72.el6_5',
basedir => '/var/tomcat',
}
Setup a new instance of tomcat, using a Java Runtime Environment 1.6.0 and management port 8005. Base directory for this instance is $basdir/myapp1, $basedir (default /var/tomcat) set in tomcat class.
tomcat::server { 'myapp1':
ensure => 'running',
enable => false,
port => '8005',
java_home => '/etc/alternatives/jre_1.6.0',
}
Usage
Classes and Defined Types
Class: tomcat
Parameters within tomcat
:
ensure
present or running (present), stopped
enable
Enables (true, default) or disables (false) the service to start at boot.
version
The version of Apache Tomcat server, supported versions are 6 (default) and 7.
release
Valid values are 'latest', 'installed' or an exact release version, i.e. '6.0.24-64.el6_5'.
port
Management port (default 8005) on localhost.
listeners
Hash of listeners in the global server section (server.xml).
resources
Hash of global resources in the server section (server.xml).
services
Hash of services and their attributes.
manage
Enables (default) the configuration by this module. Disable means, that you have to manage the configuration in server.xml outside and notify the service.
setenv
Handles environment variables in sysconfig file.
basedir
Base directory where to install server instances and their configurations. Directory 'basedir' has to exist. Ignored for multi instance setup (config => false).
Defined Type: tomcat::server
Notice: parameters you set in declaration of class tomcat
acts as defaults for tomcat::server
.
Parameters within tomcat::server
:
ensure
Valid values are present or running (present), stopped.
enabled
Enables (true, default) or disables (false) the service to start at boot.
user
user context for running of this instance.
group
same for group
class { 'tomcat':
ensure => stopped,
enable => false,
version => 6,
}
tomcat::server { 'myapp1': }
group { 'myapp2':
ensure => present,
}
user { 'myapp2':
ensure => present,
gid => 'myapp2',
shell => '/sbin/nologin',
home => '/var/tomcat/myapp1',
} ->
tomcat::server { 'myapp2':
user => 'myapp2',
group => 'myapp2',
port => '8006',
services => {
'Catalina' => {
connectors => {
'ajp-8009' => {
port => '8009',
protocol => 'AJP/1.3',
redirect_port => '8443',
},
},
},
},
}
port
Management port (default 8005) on localhost for this instance.
listeners
Hash of listeners in the global server section (server.xml). Default, for Tomcat 6
'listeners' => {
'org.apache.catalina.core.AprLifecycleListener' => { 'ssl_engine' => 'On', },
'org.apache.catalina.core.JasperListener' => {},
'org.apache.catalina.core.JreMemoryLeakPreventionListener' => {},
'org.apache.catalina.mbeans.GlobalResourcesLifecycleListener' => {},
'org.apache.catalina.mbeans.ServerLifecycleListener' => {},
},
rather for Tomcat 7
'listeners' => {
'org.apache.catalina.core.AprLifecycleListener' => { 'ssl_engine' => 'On', },
'org.apache.catalina.core.JasperListener' => {},
'org.apache.catalina.core.JreMemoryLeakPreventionListener' => {},
'org.apache.catalina.mbeans.GlobalResourcesLifecycleListener' => {},
'org.apache.catalina.core.ThreadLocalLeakPreventionListener' => {},
},
resources
Hash of global resources in the server section (server.xml), default sets to:
resources => {
'UserDatabase' => {
'auth' => 'Container',
'type' => 'org.apache.catalina.UserDatabase',
'extra_attrs' => {
'description' => 'User database that can be updated and saved',
'factory' => 'org.apache.catalina.users.MemoryUserDatabaseFactory',
'pathname' => 'conf/tomcat-users.xml',
},
},
services
Hash of services and their attributes.
java_home
Directory where to find the java binary in subdirectory bin.
manage
Enables (default) the configuration of server.xml by this module. Disable means, that you have to manage the configuration outside and start/restart the service.
class { 'tomcat':
ensure => stopped,
enable => false,
version => '6',
}
tomcat::server { 'myapp1':
manage => false,
}
file { '/var/tomcat/myapp1/conf/server.xml':
ensure => file,
owner => 'root',
group => 'root',
mode => '0644',
source => 'puppet:///modules/tomcat/example-server.xml',
notify => Tomcat::Server::Service['myapp1'],
}
Notice notifying Tomcat::Server does not work, you have to do this against Tomcat::Server::Service.
setenv
Handles environment variables in 'bin/setenv.sh'.
setenv => [ 'JAVA_XMX="256m"', 'JAVA_XX_MAXPERMSIZE="256m' ]
Variables to use:
DSUN_JAVA2D_OPENGL
true|falseDJAVA_AWT_HEADLESS
true|falseJAVA_XMX
JAVA_XX_MAXPERMSIZE
Use ADD_JAVA_OPTS
for all other environment variables.
setenv => [ 'ADD_JAVA_OPTS="-Xminf0.1 -Xmaxf0.3"' ]
Defined Type: tomcat::resource
tomcat::resource { 'myapp1:UserDatabase':
auth => 'Container',
type => 'org.apache.catalina.UserDatabase',
extra_attrs => {
description => 'User database that can be updated and saved',
factory => 'org.apache.catalina.users.MemoryUserDatabaseFactory',
pathname => 'conf/tomcat-users.xml',
},
}
Parameters within tomcat::resource
:
server
Name of tomcat server instance to add a resource, automaticly taken from 'title' then using 'title' like 'server:resource' otherwise undef.
resource
Name of the resource, automaticly taken from 'title' then using 'title' like 'server:resource' otherwise undef.
auth
authentication, default 'container'
type
Take a look at Apache Tomcat documentation.
extra_attrs
Hash of extra attributes (key => value) for this resource.
Defined Type: tomcat::listener
tomcat::listener { 'myapp1:org.apache.catalina.core.AprLifecycleListener':
ssl_engine => 'On',
}
Parameters within tomcat::listener
:
server
Name of tomcat server instance to add the listener, automaticly taken from 'title' then using 'title' like 'server:class_name' otherwise undef.
class_name
Listener with class_name 'class_name', automaticly taken from 'title' then using 'title' like 'server:class_name' otherwise undef.
ssl_engine
Specify the ssl_engine, default 'undef' (disabled).
Defined Type: tomcat::service
tomcat::service { 'myapp1:Catalina':
connetcors => {},
engine => {},
}
Parameters within tomcat::service
:
server
Name of tomcat server instance to add the service, automaticly taken from 'title' then using 'title' like 'server:service' otherwise undef.
service
Service with name 'service', automaticly taken from 'title' then using 'title' like 'server:service' otherwise undef.
connectors
Hash of connectors and their attributes. If sets and non equal to empty hash {}, the default is used:
connectors => {
'http-8080' => {
port => '8080',
protocol => 'HTTP/1.1',
redirect_port => '8443',
}
engine
Hash of the engine and their attributes.
Defined Type: tomcat::connector
tomcat::connector { 'myapp1:Catalina:ajp-8009':
port => '8009',
protocol => 'AJP/1.3',
redirect_port => '8443',
}
Parameters within tomcat::connector
:
server
Name of tomcat server instance to add the connector, automaticly taken from 'title' then using 'title' like 'server:service:connector' otherwise undef.
service
Name of tomcat service to add the connector, automaticly taken from 'title' then using 'title' like 'server:service:connector' otherwise undef.
connector
Name of the connector, automaticly taken from 'title' then using 'title' like 'server:service:connector' otherwise undef.
uri_encoding
accepted encoding
port
Listen port, default 8080 (HTTP/1.1)
address
Address to bind, default is false that means bind to all interfaces.
protocol
Supported protocols are HTTP/1.1 (default) and AJP/1.3.
For these parameters, take a look at the Apache Tomcat documentation:
connection_timeout
redirect_port
options
scheme
executor
Defined Type: tomcat::engine
tomcat::engine { 'myapp1:Catalina:Catalina':
default_host => 'localhost'
hosts => {},
realms => {
'org.apache.catalina.realm.UserDatabaseRealm' => {
'attrs' => {
'resource_name' => 'UserDatabase',
},
},
},
}
Parameters within tomcat::engine
:
server
Name of tomcat server instance to add the connector, automaticly taken from 'title' then using 'title' like 'server:service:engine' otherwise undef.
service
Name of tomcat engine to add the service 'service', automaticly taken from 'title' then using 'title' like 'server:service:engine' otherwise undef.
engine
Name of the engine, automaticly taken from 'title' then using 'title' like 'server:service:engine' otherwise undef.
default_host
Every engine has to have a default host, default 'localhost'.
hosts
Hash of hosts defined under this engine.
realms
Hash of realms defined under this engine.
Defined Type: tomcat::realm
tomcat::realm { 'myapp1:Catalina:Catalina:www.example:': }
tomcat::realm { 'myapp1:Catalina:Catalina:*:': }
Parameters within tomcat::realm
:
server
Name of tomcat server instance to add the connector, automaticly taken from 'title' then using 'title' like 'server:service:engine:host:realm:class_name' otherwise undef.
service
Name of tomcat engine to add the service 'service', automaticly taken from 'title' then using 'title' like 'server:service:engine:host:realm:class_name' otherwise undef.
engine
Name of the engine, automaticly taken from 'title' then using 'title' like 'server:service:engine:host:realm:class_name' otherwise undef.
host
Name of the host, automaticly taken from 'title' then using 'title' like 'server:service:engine:host:realm:class_name' otherwise undef.
realm
Name of the realm, automaticly taken from 'title' then using 'title' like 'server:service:engine:host:realm:class_name' otherwise undef.
class_name
Classname used for this realm, automaticly taken from 'title' then using 'title' like 'server:service:engine:host:realm:class_name' otherwise undef.
attrs
Hash of attributes defined for this realm.
realms
Hash of realms defined under this realm.
Defined Type: tomcat::host
tomcat::host { 'myapp1:Catalina:Catalina:www.example.com':
realms => {},
app_base => 'webapps',
unpack_wars => true,
auto_deploy => true,
xml_validation => false,
xml_namespace_aware => false,
}
Parameters within tomcat::host
:
server
Name of tomcat server instance to add the connector, automaticly taken from 'title' then using 'title' like 'server:service:engine:host' otherwise undef.
service
Name of tomcat engine to add the service 'service', automaticly taken from 'title' then using 'title' like 'server:service:engine:host' otherwise undef.
engine
Name of the engine, automaticly taken from 'title' then using 'title' like 'server:service:engine:host' otherwise undef.
host
Name of the host, automaticly taken from 'title' then using 'title' like 'server:service:engine:host' otherwise undef.
realms
Hash of realms defined for this host.
For these parameters, take a look at the Apache Tomcat documentation:
app_base
auto_deploy
unpack_wars
xml_validation
xml_namespace_aware