Skip to content

Commit

Permalink
Merge pull request #6 from robertdebock/simpler
Browse files Browse the repository at this point in the history
Simpler
  • Loading branch information
robertdebock authored Aug 27, 2018
2 parents 60c2e2b + 172d4b1 commit 5b8b8e4
Show file tree
Hide file tree
Showing 8 changed files with 106 additions and 140 deletions.
14 changes: 7 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,12 @@ These requirements can help you prepare your system for this role:
Role Variables
--------------

You can install multiple instances and multiple versions. This configuration is defined in the variable "tomcat_layout". If you do not use the tomcat_layout, defaults will be used. See defaults/main.yml for the default values.
You can install multiple instances and multiple versions. This configuration is defined in the variable "tomcat_instances". If you do not use the tomcat_instances, defaults will be used. See defaults/main.yml for the default values.

This is the default tomcat_layout:
This is the default tomcat_instances:

```
tomcat_layout:
tomcat_instances:
- name: tomcat
directory: /opt
version: 8.5
Expand Down Expand Up @@ -63,11 +63,11 @@ See "Example Playbooks" for futher details.

# This role allows multiple installations of Apache Tomcat, each in their own
# location, potentially of different version.
# This is done by defining a "tomcat_layout" where "name:" is a unique
# This is done by defining a "tomcat_instances" where "name:" is a unique
# identifier of an instance.
# The default tomcat_layout is one instance using the defaults described
# The default tomcat_instances is one instance using the defaults described
# in defaults/main.yml.
tomcat_layout:
tomcat_instances:
- name: "{{ tomcat_name }}"
directory: "{{ tomcat_directory }}"
version: "{{ tomcat_version }}"
Expand Down Expand Up @@ -145,7 +145,7 @@ And here is a heavily customized installation:
- role: robertdebock.java
- role: robertdebock.haveged
- role: robertdebock.tomcat
tomcat_layout:
tomcat_instances:
- name: appone
directory: /opt/appone
version: 7
Expand Down
6 changes: 3 additions & 3 deletions defaults/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@ tomcat_ajp_port: 8009

# This role allows multiple installations of Apache Tomcat, each in their own
# location, potentially of different version.
# This is done by defining a "tomcat_layout" where "name:" is a unique
# This is done by defining a "tomcat_instances" where "name:" is a unique
# identifier of an instance.
# The default tomcat_layout is one instance using the defaults described
# The default tomcat_instances is one instance using the defaults described
# in defaults/main.yml.
tomcat_layout:
tomcat_instances:
- name: "{{ tomcat_name }}"
directory: "{{ tomcat_directory }}"
version: "{{ tomcat_version }}"
Expand Down
66 changes: 66 additions & 0 deletions tasks/instance.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
---
- name: ensure instance group exists
group:
name: "{{ instance.group | default(tomcat_group) }}"

- name: ensure instance user exists
user:
name: "{{ instance.user | default(tomcat_user) }}"
group: "{{ instance.group | default(tomcat_group) }}"
createhome: no
system: yes

- name: ensure instance directory exists
file:
path: "{{ instance.directory | default(tomcat_directory) }}"
state: directory
owner: "{{ instance.user | default(tomcat_user) }}"
group: "{{ instance.group | default(tomcat_group) }}"

- name: install tomcat instance
unarchive:
src: "{{ tomcat_mirror }}/{{ tomcat_archive[instance.version | default (tomcat_version)]['url_path'] }}/{{ tomcat_archive[instance.version | default (tomcat_version)]['targz'] }}"
dest: "{{ instance.directory | default(tomcat_directory) }}"
owner: "{{ instance.user | default(tomcat_user) }}"
group: "{{ instance.group | default(tomcat_group) }}"
remote_src: yes
creates: "{{ instance.directory | default(tomcat_directory) }}/{{ tomcat_archive[instance.version | default (tomcat_version)]['dir'] }}"
register: install_tomcat
until: install_tomcat is succeeded
retries: 3

- name: configure tomcat instance
template:
src: server.xml.j2
dest: "{{ instance.directory | default(tomcat_directory) }}/{{ tomcat_archive[instance.version | default (tomcat_version)]['dir'] }}/conf/server.xml"

- name: register tomcat instance to sysvinit
template:
src: tomcat.j2
dest: "/etc/init.d/{{ instance.name | default(tomcat_name) }}"
mode: 0750
when:
- ansible_service_mgr == "sysvinit" or ansible_service_mgr == "upstart"

- name: register tomcat instance to systemd
template:
src: tomcat.service.j2
dest: /etc/systemd/system/{{ instance.name | default(tomcat_name) }}.service
when:
- ansible_service_mgr == "systemd"

- name: start and enable tomcat instance
service:
name: "{{ instance.name | default(tomcat_name) }}"
state: started
enabled: yes
when:
- ansible_virtualization_type != "docker"

- name: loop over wars
include: war.yml
with_items: "{{ instance.wars }}"
loop_control:
loop_var: war
when:
- instance.wars is defined
106 changes: 5 additions & 101 deletions tasks/main.yml
Original file line number Diff line number Diff line change
@@ -1,105 +1,9 @@
---
# tasks file for tomcat
- name: ensure group exists
group:
name: "{{ item.group | default(tomcat_group) }}"
with_items:
- "{{ tomcat_layout }}"
- name: loop over tomcat_instances
include: instance.yml
with_items: "{{ tomcat_instances }}"
loop_control:
label: "{{ item.name }}"

- name: ensure user exists
user:
name: "{{ item.user | default(tomcat_user) }}"
createhome: no
system: yes
with_items:
- "{{ tomcat_layout }}"
loop_control:
label: "{{ item.name }}"

- name: ensure tomcat_directory exists
file:
path: "{{ item.directory | default(tomcat_directory) }}"
state: directory
owner: "{{ item.user | default(tomcat_user) }}"
group: "{{ item.group | default(tomcat_group) }}"
with_items:
- "{{ tomcat_layout }}"
loop_control:
label: "{{ item.name }}"

- name: download tomcat
get_url:
url: "{{ tomcat_mirror }}/{{ tomcat_archive[item.version | default (tomcat_version)]['url_path'] }}/{{ tomcat_archive[item.version | default (tomcat_version)]['targz'] }}"
dest: /tmp
with_items:
- "{{ tomcat_layout }}"
loop_control:
label: "{{ item.name }}"
register: download_tomcat
until: download_tomcat is succeeded
retries: 3

- name: install tomcat
unarchive:
src: "/tmp/{{ tomcat_archive[item.version | default (tomcat_version)]['targz'] }}"
dest: "{{ item.directory | default(tomcat_directory) }}"
group: "{{ item.group | default(tomcat_group) }}"
owner: "{{ item.user | default(tomcat_user) }}"
remote_src: yes
creates: "{{ item.directory | default(tomcat_directory) }}/{{ tomcat_archive[item.version | default (tomcat_version)]['dir'] }}"
with_items:
- "{{ tomcat_layout }}"
loop_control:
label: "{{ item.name }}"

- name: configure tomcat
template:
src: server.xml.j2
dest: "{{ item.directory | default(tomcat_directory) }}/{{ tomcat_archive[item.version | default (tomcat_version)]['dir'] }}/conf/server.xml"
with_items:
- "{{ tomcat_layout }}"
loop_control:
label: "{{ item.name }}"

- name: register tomcat to a sysvinit system
template:
src: tomcat.j2
dest: "/etc/init.d/{{ item.name | default(tomcat_name) }}"
mode: 0750
loop_var: instance
when:
- ansible_service_mgr == "sysvinit" or ansible_service_mgr == "upstart"
with_items:
- "{{ tomcat_layout }}"
loop_control:
label: "{{ item.name }}"

- name: loop over names in tomcat_layout
include: deploy_wars.yml
with_items: "{{ tomcat_layout }}"
loop_control:
loop_var: tomcat_names

- name: register tomcat to a systemd system
template:
src: tomcat.service.j2
dest: /etc/systemd/system/{{ item.name | default(tomcat_name) }}.service
when:
- ansible_service_mgr == "systemd"
with_items:
- "{{ tomcat_layout }}"
loop_control:
label: "{{ item.name }}"

- name: start and enable software
service:
name: "{{ item.name | default(tomcat_name) }}"
state: started
enabled: yes
with_items:
- "{{ tomcat_layout }}"
when:
- ansible_virtualization_type != "docker"
loop_control:
label: "{{ item.name }}"
- tomcat_instances is defined
8 changes: 2 additions & 6 deletions tasks/deploy_wars.yml → tasks/war.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,8 @@
---
- name: deploy war url
get_url:
url: "{{ item.url }}"
url: "{{ war.url }}"
dest: "{{ tomcat_directory }}/{{ tomcat_names.name }}/{{ tomcat_archive[tomcat_names.version | default (tomcat_version)]['dir'] }}/webapps/"
validate_certs: no
with_items:
- "{{ tomcat_names.wars }}"
when:
- tomcat_names.wars is defined
loop_control:
label: "{{ item.url }}"
- war.url is defined
16 changes: 8 additions & 8 deletions templates/server.xml.j2
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
define subcomponents such as "Valves" at this level.
Documentation at /docs/config/server.html
-->
<Server port="{{ item.shutdown_port | default(tomcat_shutdown_port) }}" shutdown="SHUTDOWN">
<Server port="{{ instance.shutdown_port | default(tomcat_shutdown_port) }}" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<!-- Security listener. Documentation at /docs/config/listeners.html
<Listener className="org.apache.catalina.security.SecurityListener" />
Expand Down Expand Up @@ -67,15 +67,15 @@
APR (HTTP/AJP) Connector: /docs/apr.html
Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
-->
<Connector port="{{ item.non_ssl_connector_port | default(tomcat_non_ssl_connector_port) }}" protocol="HTTP/1.1"
<Connector port="{{ instance.non_ssl_connector_port | default(tomcat_non_ssl_connector_port) }}" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="{{ item.ssl_connector_port | default(tomcat_ssl_connector_port) }}" />
redirectPort="{{ instance.ssl_connector_port | default(tomcat_ssl_connector_port) }}" />
<!-- A "Connector" using the shared thread pool-->
<!--
<Connector executor="tomcatThreadPool"
port="{{ item.non_ssl_connector_port | default(tomcat_non_ssl_connector_port) }}" protocol="HTTP/1.1"
port="{{ instance.non_ssl_connector_port | default(tomcat_non_ssl_connector_port) }}" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="{{ item.ssl_connector_port | default(tomcat_ssl_connector_port) }}" />
redirectPort="{{ instance.ssl_connector_port | default(tomcat_ssl_connector_port) }}" />
-->
<!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443
This connector uses the NIO implementation. The default
Expand All @@ -86,7 +86,7 @@
the SSLImplementation selected. JSSE style configuration is used below.
-->
<!--
<Connector port="{{ item.ssl_connector_port | default(tomcat_ssl_connector_port) }}" protocol="org.apache.coyote.http11.Http11NioProtocol"
<Connector port="{{ instance.ssl_connector_port | default(tomcat_ssl_connector_port) }}" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
Expand All @@ -101,7 +101,7 @@
configuration is used below.
-->
<!--
<Connector port="{{ item.ssl_connector_port | default(tomcat_ssl_connector_port) }}" protocol="org.apache.coyote.http11.Http11AprProtocol"
<Connector port="{{ instance.ssl_connector_port | default(tomcat_ssl_connector_port) }}" protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="150" SSLEnabled="true" >
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig>
Expand All @@ -114,7 +114,7 @@
-->

<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="{{ item.ajp_port | default (tomcat_ajp_port) }}" protocol="AJP/1.3" redirectPort="{{ item.ssl_connector_port | default(tomcat_ssl_connector_port) }}" />
<Connector port="{{ instance.ajp_port | default (tomcat_ajp_port) }}" protocol="AJP/1.3" redirectPort="{{ instance.ssl_connector_port | default(tomcat_ssl_connector_port) }}" />


<!-- An Engine represents the entry point (within Catalina) that processes
Expand Down
12 changes: 6 additions & 6 deletions templates/tomcat.j2
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,27 @@
#
# /etc/init.d/tomcat
#
# {{ item.name | default(tomcat_name) }}
# {{ instance.name | default(tomcat_name) }}
# As simple as possible, using Apache Tomcat's daemon.sh mostly.
#
# chkconfig: 2345 20 80
# description: {{ item.name | default(tomcat_name) }}
# description: {{ instance.name | default(tomcat_name) }}

# Source function library.
if [ -f /etc/init.d/functions ] ; then
. /etc/init.d/functions
fi

start() {
echo -n "Starting {{ item.name | default(tomcat_name) }}: "
returncode=$({{ item.directory | default(tomcat_directory) }}/{{ tomcat_archive[item.version | default(tomcat_version)]['dir'] }}/bin/startup.sh)
echo -n "Starting {{ instance.name | default(tomcat_name) }}: "
returncode=$({{ instance.directory | default(tomcat_directory) }}/{{ tomcat_archive[instance.version | default(tomcat_version)]['dir'] }}/bin/startup.sh)
touch /var/lock/subsys/tomcat
return ${returncode}
}

stop() {
echo -n "Shutting down {{ item.name | default(tomcat_name) }}: "
returncode=$({{ item.directory | default(tomcat_directory) }}/{{ tomcat_archive[item.version | default(tomcat_version)]['dir'] }}/bin/shutdown.sh)
echo -n "Shutting down {{ instance.name | default(tomcat_name) }}: "
returncode=$({{ instance.directory | default(tomcat_directory) }}/{{ tomcat_archive[instance.version | default(tomcat_version)]['dir'] }}/bin/shutdown.sh)
rm -f /var/lock/subsys/tomcat
return ${returncode}
}
Expand Down
18 changes: 9 additions & 9 deletions templates/tomcat.service.j2
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
{{ ansible_managed | comment }}
[Unit]
Description={{ item.name | default(tomcat_name) }}
Description={{ instance.name | default(tomcat_name) }}
After=syslog.target network.target

[Service]
Type=forking

Environment=CATALINA_PID={{ item.directory | default(tomcat_directory) }}/{{ tomcat_archive[item.version | default(tomcat_version)]['dir'] }}/temp/tomcat.pid
Environment=CATALINA_HOME={{ item.directory | default(tomcat_directory) }}/{{ tomcat_archive[item.version | default(tomcat_version)]['dir'] }}
Environment=CATALINA_BASE={{ item.directory | default(tomcat_directory) }}/{{ tomcat_archive[item.version | default(tomcat_version)]['dir'] }}
Environment='CATALINA_OPTS=-Xms{{ item.xms | default(tomcat_xms) }} -Xmx{{ item.xmx | default(tomcat_xmx) }} -server -XX:+UseParallelGC'
Environment=CATALINA_PID={{ instance.directory | default(tomcat_directory) }}/{{ tomcat_archive[instance.version | default(tomcat_version)]['dir'] }}/temp/tomcat.pid
Environment=CATALINA_HOME={{ instance.directory | default(tomcat_directory) }}/{{ tomcat_archive[instance.version | default(tomcat_version)]['dir'] }}
Environment=CATALINA_BASE={{ instance.directory | default(tomcat_directory) }}/{{ tomcat_archive[instance.version | default(tomcat_version)]['dir'] }}
Environment='CATALINA_OPTS=-Xms{{ instance.xms | default(tomcat_xms) }} -Xmx{{ instance.xmx | default(tomcat_xmx) }} -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'

ExecStart={{ item.directory | default(tomcat_directory) }}/{{ tomcat_archive[item.version | default(tomcat_version)]['dir'] }}/bin/startup.sh
ExecStop={{ item.directory | default(tomcat_directory) }}/{{ tomcat_archive[item.version | default(tomcat_version)]['dir'] }}/bin/shutdown.sh
ExecStart={{ instance.directory | default(tomcat_directory) }}/{{ tomcat_archive[instance.version | default(tomcat_version)]['dir'] }}/bin/startup.sh
ExecStop={{ instance.directory | default(tomcat_directory) }}/{{ tomcat_archive[instance.version | default(tomcat_version)]['dir'] }}/bin/shutdown.sh

User={{ item.user | default(tomcat_user) }}
Group={{ item.group | default(tomcat_group) }}
User={{ instance.user | default(tomcat_user) }}
Group={{ instance.group | default(tomcat_group) }}

[Install]
WantedBy=multi-user.target

0 comments on commit 5b8b8e4

Please sign in to comment.