From cf93b2011f620d28b9073c2207407f977777ddcd Mon Sep 17 00:00:00 2001 From: Andrea Dell'Amico <adellam@isti.cnr.it> Date: Tue, 4 Dec 2018 16:08:32 +0100 Subject: [PATCH] Role that installs and configure the java reverse proxy servlet. --- .../java_reverse_proxy/defaults/main.yml | 12 +++++ smartgears/java_reverse_proxy/tasks/main.yml | 49 +++++++++++++++++ .../java_reverse_proxy/templates/web.xml | 52 +++++++++++++++++++ 3 files changed, 113 insertions(+) create mode 100644 smartgears/java_reverse_proxy/defaults/main.yml create mode 100644 smartgears/java_reverse_proxy/tasks/main.yml create mode 100644 smartgears/java_reverse_proxy/templates/web.xml diff --git a/smartgears/java_reverse_proxy/defaults/main.yml b/smartgears/java_reverse_proxy/defaults/main.yml new file mode 100644 index 00000000..881a6660 --- /dev/null +++ b/smartgears/java_reverse_proxy/defaults/main.yml @@ -0,0 +1,12 @@ +--- +java_rproxy_service_install: False +java_rproxy_service_version: latest +java_rproxy_service_name: reverse-proxy +java_rproxy_group_id: org.gcube.portal.rproxy +java_rproxy_service_extension: war +java_rproxy_service_file: '{{ java_rproxy_service_name }}-{{ java_rproxy_service_version }}.{{ java_rproxy_service_extension }}' +smartgears_rproxy_base_url: 'http://maven.research-infrastructures.eu/nexus/content/repositories/gcube-snapshots' + +java_rproxy_display_name: 'Java Reverse Proxy Service' +java_rproxy_targets: + - { servlet_name: 'ReverseProxy', target_uri: 'https://revproxied-app.example.org/', log: 'true', forwardip: 'true', preserve_host: 'true', preserve_cookies: 'true', handle_redirects: 'true', socket_timeout: '60000', read_timeout: '60000', url_pattern: [ '/dest1/*', '/dest2/*' ] } \ No newline at end of file diff --git a/smartgears/java_reverse_proxy/tasks/main.yml b/smartgears/java_reverse_proxy/tasks/main.yml new file mode 100644 index 00000000..6392073b --- /dev/null +++ b/smartgears/java_reverse_proxy/tasks/main.yml @@ -0,0 +1,49 @@ +--- +- block: + - name: Remove the old java_rproxy service files + file: path={{ item }} state=absent + with_items: + - '{{ smartgears_instance_path }}/webapps/{{ java_rproxy_service_name }}' + - '{{ smartgears_instance_path }}/webapps/{{ java_rproxy_service_name }}.{{ java_rproxy_service_extension }}' + notify: Restart smartgears + + become: True + become_user: '{{ d4science_user }}' + when: not java_rproxy_service_install + tags: [ 'smartgears', 'java_rproxy_service', 'tomcat' ] + +- block: + - name: Get the java_rproxy-service war + #maven_artifact: artifact_id={{ java_rproxy_service_name }} version={{ java_rproxy_service_version | default(omit) }} group_id={{ java_rproxy_group_id }} extension={{ java_rproxy_service_extension | default('war') }} repository_url={{ smartgears_global_base_url }} dest={{ smartgears_downloads_dir }}/{{ java_rproxy_service_file }} verify_checksum=always + maven_artifact: artifact_id={{ java_rproxy_service_name }} version={{ java_rproxy_service_version | default(omit) }} group_id={{ java_rproxy_group_id }} extension={{ java_rproxy_service_extension | default('war') }} repository_url={{ smartgears_rproxy_base_url }} dest={{ smartgears_downloads_dir }}/{{ java_rproxy_service_file }} verify_checksum=always + register: java_rproxy_service_download + + - name: Remove the old java_rproxy service files + file: path={{ item }} state=absent + with_items: + - '{{ smartgears_instance_path }}/webapps/{{ java_rproxy_service_name }}' + - '{{ smartgears_instance_path }}/webapps/{{ java_rproxy_service_name }}.{{ java_rproxy_service_extension }}' + notify: Restart smartgears + when: java_rproxy_service_download is changed + + - name: Create the java_rproxy webapp directory + file: dest={{ smartgears_instance_path }}/webapps/{{ java_rproxy_service_name }} state=directory + when: java_rproxy_service_download is changed + + - name: Unarchive the java_rproxy war file + unarchive: copy=no src={{ smartgears_downloads_dir }}/{{ java_rproxy_service_file }} dest={{ smartgears_instance_path }}/webapps/{{ java_rproxy_service_name }} + args: + creates: '{{ smartgears_instance_path }}/webapps/{{ java_rproxy_service_name }}/WEB-INF/web.xml' + notify: Restart smartgears + + - name: Install the java_rproxy web.xml template + template: src=web.xml dest={{ smartgears_instance_path }}/webapps/{{ java_rproxy_service_name }}/WEB-INF/web.xml mode=0440 + notify: Restart smartgears + + +# TODO: unarchive the war file and install the web.xml. + + become: True + become_user: '{{ d4science_user }}' + when: java_rproxy_service_install + tags: [ 'smartgears', 'java_rproxy_service', 'tomcat' ] diff --git a/smartgears/java_reverse_proxy/templates/web.xml b/smartgears/java_reverse_proxy/templates/web.xml new file mode 100644 index 00000000..e2f6ffb2 --- /dev/null +++ b/smartgears/java_reverse_proxy/templates/web.xml @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="UTF-8"?> +<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/javaee + http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" + version="3.0"> + + <display-name>{{ java_rproxy_display_name }}</display-name> + {% for servlet in java_rproxy_targets %} + <servlet> + <servlet-name>{{ servlet.servlet_name }}</servlet-name> + <servlet-class>org.mitre.dsmiley.httpproxy.ProxyServlet</servlet-class> + <init-param> + <param-name>targetUri</param-name> + <param-value>{{ servlet. target_uri }}</param-value> + </init-param> + <init-param> + <param-name>log</param-name> + <param-value>{{ servlet.log }}</param-value> + </init-param> + <init-param> + <param-name>forwardip</param-name> + <param-value>{{ servlet.forwardip }}</param-value> + </init-param> + <init-param> + <param-name>preserveHost</param-name> + <param-value>{{ servlet.preserve_host }}</param-value> + </init-param> + <init-param> + <param-name>preserveCookies</param-name> + <param-value>{{ servlet.preserve_cookies }}</param-value> + </init-param> + <init-param> + <param-name>http.protocol.handle-redirects</param-name> + <param-value>{{ servlet.handle_redirects }}</param-value> + </init-param> + <init-param> + <param-name>http.socket.timeout</param-name> + <param-value>{{ servlet.socket_timeout }}</param-value> + </init-param> + <init-param> + <param-name>http.read.timeout</param-name> + <param-value>{{ servlet.read_timeout }}</param-value> + </init-param> + </servlet> + <servlet-mapping> + <servlet-name>{{ servlet.servlet_name }}</servlet-name> + {% for pattern in servlet.url_patterns %} + <url-pattern>{{ pattern }}</url-pattern> + {% endfor %} + </servlet-mapping> + {% endfor %} +</web-app>