--- # # Note: the library role 'tomcat' is a dependency # - name: disable the tomcat main instance service: name='tomcat{{ tomcat_version }}' state=stopped enabled=no when: not tomcat_service_enabled tags: [ 'tomcat', 'tomcat_instances' ] - name: Create a tomcat user for each instance if needed user: name={{ item.user }} home={{ item.user_home }} createhome=false shell={{ item.user_shell | default('/bin/false') }} with_items: '{{ tomcat_m_instances }}' when: - not tomcat_m_use_default_user | bool - item.user != "tomcat{{ tomcat_version }}" register: tomcat_first_install tags: [ 'tomcat', 'tomcat_instances' ] - name: Create a tomcat user if needed user: name={{ tomcat_m_default_user }} home={{ tomcat_m_instances_base_path }} createhome=false shell={{ tomcat_m_default_user_shell }} when: - tomcat_m_use_default_user | bool - tomcat_m_default_user != "tomcat{{ tomcat_version }}" register: tomcat_first_install tags: [ 'tomcat', 'tomcat_instances' ] - name: Create the instances directory trees file: dest={{ item.0.instance_path }}/{{ item[1] }} owner={{ item.0.user }} group={{ item.0.user }} mode=0755 state=directory with_nested: - '{{ tomcat_m_instances }}' - [ 'common/classes', 'conf/Catalina/localhost', 'conf/policy.d', 'lib', 'server/classes', 'shared/classes', 'webapps' ] register: tomcat_first_install tags: [ 'tomcat', 'tomcat_instances' ] - name: Create the tomcat logs base directory file: dest: '{{ tomcat_m_instances_logdir_base }}' state: directory mode: 0755 tags: [ 'tomcat', 'tomcat_instances', 'tomcat_log_dir' ] - name: Create the instances log dirs file: dest={{ tomcat_m_instances_logdir_base }}/{{ item.http_port }} owner={{ item.user }} group={{ item.user }} mode='0750' state=directory with_items: '{{ tomcat_m_instances }}' register: tomcat_first_install when: not tomcat_m_expose_log_directory tags: [ 'tomcat', 'tomcat_instances', 'tomcat_log_dir' ] - name: Create log dirs, readable by the user that runs the http service file: dest={{ tomcat_m_instances_logdir_base }}/{{ item.http_port }} owner={{ item.user }} group='www-data' mode='0750' state=directory with_items: '{{ tomcat_m_instances }}' register: tomcat_first_install when: tomcat_m_expose_log_directory tags: [ 'tomcat', 'tomcat_instances', 'tomcat_log_dir' ] - name: Create the instances work dirs file: dest={{ tomcat_m_cache_base }}/{{ item.http_port }} owner={{ item.user }} group={{ item.user }} mode=0755 state=directory with_items: '{{ tomcat_m_instances }}' register: tomcat_first_install tags: [ 'tomcat', 'tomcat_instances' ] - name: Create links to work dir inside the instances directory tree file: src={{ tomcat_m_cache_base }}/{{ item.http_port }} dest={{ item.instance_path }}/work state=link with_items: '{{ tomcat_m_instances }}' register: tomcat_first_install tags: [ 'tomcat', 'tomcat_instances' ] - name: Create links to log dir inside the instances directory tree file: src={{ tomcat_m_instances_logdir_base }}/{{ item.http_port }} dest={{ item.instance_path }}/logs state=link with_items: '{{ tomcat_m_instances }}' register: tomcat_first_install tags: [ 'tomcat', 'tomcat_instances' ] - name: Create the catalina tmp directory file: dest={{ item.catalina_tmp_directory }} state=directory owner={{ item.user }} group={{ item.user }} mode=0700 with_items: '{{ tomcat_m_instances }}' when: item.catalina_tmp_directory is defined tags: [ 'tomcat', 'tomcat_instances' ] - name: Populate the instances conf directory copy: src={{ item[1] }} dest={{ item.0.instance_path }}/conf/{{ item[1] }} owner={{ item.0.user }} group={{ item.0.user }} mode=0640 with_nested: - '{{ tomcat_m_instances }}' - [ 'context.xml' ] notify: tomcat multiple-instances restart tags: [ 'tomcat', 'tomcat_instances' ] - name: Install catalina.properties template: src={{ item[1] }}.j2 dest={{ item.0.instance_path }}/conf/{{ item[1] }} owner={{ item.0.user }} group={{ item.0.user }} mode=0640 with_nested: - '{{ tomcat_m_instances }}' - [ 'catalina.properties' ] notify: tomcat multiple-instances restart tags: [ 'tomcat', 'tomcat_instances', 'tomcat_catalina_properties' ] - name: Populate the instances conf/policy.d directory copy: src=policy.d/{{ item[1] }} dest={{ item.0.instance_path }}/conf/policy.d/{{ item[1] }} owner={{ item.0.user }} group={{ item.0.user }} mode=0640 with_nested: - '{{ tomcat_m_instances }}' - [ '01system.policy', '02debian.policy', '03catalina.policy', '04webapps.policy', '50local.policy' ] notify: tomcat multiple-instances restart tags: [ 'tomcat', 'tomcat_instances' ] - name: Install logging.properties if we do not use log4j for the tomcat logging copy: src={{ item[1] }} dest={{ item.0.instance_path }}/conf/{{ item[1] }} owner={{ item.0.user }} group={{ item.0.user }} mode=0640 with_nested: - '{{ tomcat_m_instances }}' - [ 'logging.properties' ] when: - tomcat_use_log4j is defined - not tomcat_use_log4j | bool notify: tomcat multiple-instances restart tags: [ 'tomcat', 'tomcat_instances' ] - name: Install the server.xml conf file template: src=tomcat-server.xml.j2 dest={{ item.instance_path }}/conf/server.xml owner={{ item.user }} group={{ item.user }} mode=0640 with_items: '{{ tomcat_m_instances }}' notify: tomcat multiple-instances restart tags: [ 'tomcat', 'tomcat_instances', 'tomcat_conf', 'tomcat_serverxml' ] - name: Install the web.xml file template: src=tomcat-web.xml.j2 dest={{ item.instance_path }}/conf/web.xml owner={{ item.user }} group={{ item.user }} mode=0640 with_items: '{{ tomcat_m_instances }}' notify: tomcat multiple-instances restart tags: [ 'tomcat', 'tomcat_instances', 'tomcat_conf', 'tomcat_serverxml' ] - name: Install the tomcat-admin package if the host-manager or manager apps are required apt: pkg=tomcat{{ tomcat_version }}-admin state={{ tomcat_pkg_state }} cache_valid_time=1800 update_cache=yes when: tomcat_m_host_manager_install | bool or tomcat_m_manager_install | bool tags: [ 'tomcat', 'tomcat_instances', 'tomcat_conf', 'tomcat_host_manager', 'tomcat_manager' ] - name: Install the catalina configuration for the tomcat manager template: src=tomcat-manager.xml.j2 dest={{ item.instance_path }}/conf/Catalina/localhost/manager.xml owner={{ item.user }} group={{ item.user }} mode=0640 with_items: '{{ tomcat_m_instances }}' when: tomcat_m_manager_install | bool notify: tomcat multiple-instances restart tags: [ 'tomcat', 'tomcat_instances', 'tomcat_conf', 'tomcat_manager' ] - name: Install the catalina configuration for the tomcat host manager template: src=tomcat-host-manager.xml.j2 dest={{ item.instance_path }}/conf/Catalina/localhost/host-manager.xml owner={{ item.user }} group={{ item.user }} mode=0640 with_items: '{{ tomcat_m_instances }}' when: tomcat_m_host_manager_install | bool notify: tomcat multiple-instances restart tags: [ 'tomcat', 'tomcat_instances', 'tomcat_conf', 'tomcat_host_manager' ] - name: Install the catalina configuration for the tomcat manager template: src=tomcat-users.xml.j2 dest={{ item.instance_path }}/conf/tomcat-users.xml owner={{ item.user }} group={{ item.user }} mode=0640 with_items: '{{ tomcat_m_instances }}' notify: tomcat multiple-instances restart tags: [ 'tomcat', 'tomcat_instances', 'tomcat_conf', 'tomcat_host_manager', 'tomcat_manager' ] - name: Install the instances startup scripts template: src=tomcat-instance.init.j2 dest=/etc/init.d/tomcat-instance-{{ item.http_port }} mode=0755 owner=root group=root with_items: '{{ tomcat_m_instances }}' register: reload_systemd tags: [ 'tomcat', 'tomcat_instances', 'tomcat_init' ] - name: Install the tomcat instances default file template: src=tomcat-default.j2 dest=/etc/default/tomcat-instance-{{ item.http_port }} mode=0640 owner=root group={{ item.user }} with_items: '{{ tomcat_m_instances }}' notify: tomcat multiple-instances restart tags: [ 'tomcat', 'tomcat_instances', 'tomcat_conf', 'tomcat_default', 'jdk' ] - name: Reload the systemd daemon if we are running on a systemd-backed server command: systemctl daemon-reload when: - ansible_service_mgr == 'systemd' - reload_systemd | bool - name: Install a custom context.xml file template: src=tomcat-context.xml.j2 dest={{ item.instance_path }}/conf/context.xml owner={{ item.user }} group={{ item.user }} mode=0640 with_items: '{{ tomcat_m_instances }}' notify: tomcat multiple-instances restart when: tomcat_m_jndi_pool | bool tags: [ 'tomcat', 'tomcat_instances', 'tomcat_conf', 'tomcat_contextxml', 'jdk' ] - name: Install a logrotate entry for the access log file template: src=tomcat.logrotate.j2 dest=/etc/logrotate.d/tomcat_instance-{{ item.http_port }} owner=root group=root mode=0644 with_items: '{{ tomcat_m_instances }}' tags: [ 'tomcat', 'tomcat_instances', 'tomcat_conf' ] - name: Install the jmx authorization file template: src=jmxremote.passwd.j2 dest={{ item.instance_path }}/conf/jmxremote.passwd owner={{ item.user }} group={{ item.user }} mode=0600 with_items: '{{ tomcat_m_instances }}' when: - item.jmx_enabled is defined - item.jmx_auth_enabled is defined - item.jmx_enabled | bool - item.jmx_auth_enabled | bool notify: tomcat multiple-instances restart tags: [ 'tomcat', 'tomcat_instances', 'tomcat_jmx' ] - name: Install the jmx role file copy: src=jmxremote.access dest={{ item.instance_path }}/conf/jmxremote.access owner={{ item.user }} group={{ item.user }} mode=0644 with_items: '{{ tomcat_m_instances }}' when: - item.jmx_enabled is defined - item.jmx_auth_enabled is defined - item.jmx_enabled | bool - item.jmx_auth_enabled | bool notify: tomcat multiple-instances restart tags: [ 'tomcat', 'tomcat_instances', 'tomcat_jmx' ] - name: Start all the tomcat instances service: name='tomcat-instance-{{ item.http_port }}' state=started sleep=20 with_items: '{{ tomcat_m_instances }}' when: - tomcat_first_install.changed | bool - tomcat_m_start_instances | bool tags: [ 'tomcat', 'tomcat_instances'] ignore_errors: True - name: Enable all the tomcat instances service: name='tomcat-instance-{{ item.http_port }}' enabled=yes with_items: '{{ tomcat_m_instances }}' when: tomcat_m_enable_instances | bool tags: [ 'tomcat', 'tomcat_instances']