diff --git a/smartgears/smartgears-base-image/defaults/main.yml b/smartgears/smartgears-base-image/defaults/main.yml new file mode 100644 index 0000000..ad72861 --- /dev/null +++ b/smartgears/smartgears-base-image/defaults/main.yml @@ -0,0 +1,27 @@ +smartgears_user: "root" +smartgears_user_home: "/root/" +#smartgears_user: "tomcat7" +#smartgears_user_home: "/usr/share/tomcat7/" +smartgears_distribution_version: "2.1.3-4.7.0-154641" +smartgears_url: "http://maven.research-infrastructures.eu/nexus/service/local/repositories/{{ repo }}/content/org/gcube/distribution/smartgears-distribution/{{ smartgears_distribution_version }}/smartgears-distribution-{{ smartgears_distribution_version }}.tar.gz" +smartgears_log_dir: "/var/log/tomcat7" +smartgears_log_max_history: 30 +smartgears_log_max_file_size: 10MB +smartgears_log_total_file_cap: 500MB +smartgears_loglevel: "WARN" +smartgears_log_use_timesize_appender: True + +orchestrator_user: "orchestrator" +orchestrator_ssh_key: +#orchestrator_ssh_key: "ssh-rsa placeholder orchestrator@placeholder" + +java_jdk: "java8-jdk" #### either java8-jdk or openjdk-8 +java_home: "/usr/lib/jvm/java-8-oracle" +catalina_home: "{{ smartgears_user_home }}" +catalina_opts: "-Xmx2000m -Xms2000m -XX:MaxPermSize=512M" +tomcat_port: 8080 + +image_name: "smartgears-base-image-{{ java_jdk }}" +#image_tag: "latest" #{{ smartgears_distribution_version }} +image_tag: "{{ smartgears_distribution_version }}" +push_to_repo: "no" diff --git a/smartgears/smartgears-base-image/files/common-authorization-patched.jar b/smartgears/smartgears-base-image/files/common-authorization-patched.jar new file mode 100644 index 0000000..ef72fac Binary files /dev/null and b/smartgears/smartgears-base-image/files/common-authorization-patched.jar differ diff --git a/smartgears/smartgears-base-image/files/common-scope-maps-patched.jar b/smartgears/smartgears-base-image/files/common-scope-maps-patched.jar new file mode 100644 index 0000000..15c2afd Binary files /dev/null and b/smartgears/smartgears-base-image/files/common-scope-maps-patched.jar differ diff --git a/smartgears/smartgears-base-image/files/smartgears_run.sh b/smartgears/smartgears-base-image/files/smartgears_run.sh new file mode 100755 index 0000000..081a29d --- /dev/null +++ b/smartgears/smartgears-base-image/files/smartgears_run.sh @@ -0,0 +1,74 @@ +#!/bin/bash +#################################################################### +#### Written by Daniele Pavia (ENG) +#### configures the container.xml, runs the default tomcat instance +#### and executes the ssh server in foreground to enable ansible +#### provisioning while keeping the container alive +#################################################################### + +#### let's configure the container +#### if no token is set refuse to run +if [[ -z "$CONTAINER_TOKENS" ]]; + ## spacchetta_token! + then + echo "CONTAINER_TOKENS not set, failed to configure the container. Exiting with errors."; + exit 1 + else + #echo "tokens: $CONTAINER_TOKENS" + OLDIFS=$IFS + IFS="," + read -r -a tokens <<< "$CONTAINER_TOKENS" + for token in ${tokens[@]}; + do + sed -i "/<infrastructure>gcube<\/infrastructure>/a \\\t<token>$token<\/token>" container.xml; + done + IFS=$OLDIFS +fi + +if [[ -z "$CONTAINER_MODE" ]]; + then + echo "CONTAINER_MODE not set, assuming default value."; + else + sed -i "s/<container mode='offline'>/<container mode='$CONTAINER_MODE'>/" container.xml; +fi + +if [[ -z "$CONTAINER_HOSTNAME" ]]; + then + echo "CONTAINER_HOSTNAME not set, assuming default value."; + else + sed -i "s/<hostname>localhost<\/hostname>/<hostname>$CONTAINER_HOSTNAME<\/hostname>/" container.xml; +fi + +if [[ -z "$CONTAINER_PORT" ]]; + then + echo "CONTAINER_PORT not set, assuming default value."; + else + sed -i "s/<port>8080<\/port>/<port>$CONTAINER_PORT<\/port>/" container.xml; +fi + +if [[ -z "$CONTAINER_INFRASTRUCTURE" ]]; + then + echo "CONTAINER_INFRASTRUCTURE not set, assuming default value."; + else + sed -i "s/<infrastructure>gcube<\/infrastructure>/<infrastructure>$CONTAINER_INFRASTRUCTURE<\/infrastructure>/" container.xml; +fi + +if [[ $PATCH_COMMON_SCOPES = "1" ]]; + then + rm ./lib/common-scope-maps-*; + mv common-scope-maps-patched.jar ./lib/ +fi + +if [[ $PATCH_COMMON_AUTHORIZATION = "1" ]]; + then + rm ./lib/common-authorization-*; + mv common-authorization-patched.jar ./lib/ +fi +echo "Container configuration done" + +#### let's start tomcat. Ignore its status after the start. +echo "Starting Tomcat7" +service tomcat7 start + +echo "Starting ssh server in foreground" +/usr/sbin/sshd -D diff --git a/smartgears/smartgears-base-image/meta/main.yml b/smartgears/smartgears-base-image/meta/main.yml new file mode 100644 index 0000000..96a30ae --- /dev/null +++ b/smartgears/smartgears-base-image/meta/main.yml @@ -0,0 +1,3 @@ +dependencies: +# - role: java-17 + - role: ../roles/docker diff --git a/smartgears/smartgears-base-image/tasks/main.yml b/smartgears/smartgears-base-image/tasks/main.yml new file mode 100644 index 0000000..b127eef --- /dev/null +++ b/smartgears/smartgears-base-image/tasks/main.yml @@ -0,0 +1,34 @@ + +- name: create temporary build directory + shell: mktemp -d + register: tempdir + +- name: copy the Dockerfile + template: src=Dockerfile dest="{{ tempdir.stdout }}/" + +- name: copy the logback configuration + template: src=logback.xml.j2 dest="{{ tempdir.stdout }}/logback.xml" + +- name: copy the startup script + copy: src=smartgears_run.sh dest="{{ tempdir.stdout }}/" mode=0755 + +- name: copy the pacthed common-scope-maps jar + copy: src=common-scope-maps-patched.jar dest="{{ tempdir.stdout }}/" mode=0755 + when: patch_common_scope != 0 + +- name: copy the pacthed common-authorization jar + copy: src=common-authorization-patched.jar dest="{{ tempdir.stdout }}/" mode=0755 + when: patch_common_authorization != 0 + +- name: Build the docker image + docker_image: + path: "{{ tempdir.stdout }}" + name: "{{ image_name }}" + tag: "{{ image_tag }}" + state: present + force: yes + rm: True + push: "{{ push_to_repo }}" + +- name: remove the temporary build directory + file: path="{{ tempdir.stdout }}" state=absent diff --git a/smartgears/smartgears-base-image/templates/Dockerfile b/smartgears/smartgears-base-image/templates/Dockerfile new file mode 100644 index 0000000..0fb733a --- /dev/null +++ b/smartgears/smartgears-base-image/templates/Dockerfile @@ -0,0 +1,69 @@ +FROM ubuntu:14.04 + +ENV JAVA_HOME {{ java_home }} +ENV CATALINA_HOME {{ catalina_home }} +ENV GHN_HOME {{ smartgears_user_home }} + +WORKDIR {{ smartgears_user_home }} +ADD {{ smartgears_url }} {{ smartgears_user_home }} +ADD smartgears_run.sh {{ smartgears_user_home }} +COPY common-scope-maps-patched.ja* {{ smartgears_user_home }} +COPY common-authorization-patched.ja* {{ smartgears_user_home }} + +RUN \ + #### install either the Oracle JDK or OpenJDK + apt-get update && \ + apt-get install -y software-properties-common && \ + {% if java_jdk == 'java8-jdk' %} + echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | debconf-set-selections && \ + add-apt-repository -y ppa:webupd8team/java && \ + apt-get update && \ + apt-get install -y oracle-java8-installer && \ + rm -rf /var/lib/apt/lists/* && \ + rm -rf /var/cache/oracle-jdk8-installer && \ + {% elif java_jdk == 'openjdk-8' %} + apt-add-repository -y ppa:openjdk-r/ppa && \ + apt-get update && \ + apt-get install -y openjdk-8-jdk-headless && \ + {% endif %} + + apt-get update && apt-get install -y tomcat7 openssh-client openssh-server python wget && \ + ln -s /var/lib/tomcat7/webapps/ /usr/share/tomcat7/webapps && \ + sed -ie 's/^TOMCAT7_USER=tomcat7/TOMCAT7_USER={{ smartgears_user }}/' /etc/default/tomcat7 && \ + sed -ie 's/^TOMCAT7_GROUP=tomcat7/TOMCAT7_GROUP={{ smartgears_user }}/' /etc/default/tomcat7 && \ + + #### set the default JDK for tomcat + {% if java_jdk == 'java8-jdk' %} + echo "JAVA_HOME=/usr/lib/jvm/java-8-oracle/" >> /etc/default/tomcat7 && \ + {% elif java_jdk == 'openjdk-8' %} + echo "JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/" >> /etc/default/tomcat7 && \ + {% endif %} + + echo GHN_HOME={{ smartgears_user_home }} >> /etc/default/tomcat7 && \ + echo CATALINA_HOME={{ catalina_home }} >> /etc/default/tomcat7 && \ + echo CATALINA_OPTS=\"{{ catalina_opts }}\" >> /etc/default/tomcat7 && \ + ln -s /etc/init.d/tomcat7 /etc/init.d/tomcat-instance-9000 && \ + sed -i 's/8080/{{ tomcat_port }}/' /var/lib/tomcat7/conf/server.xml && \ + mkdir /var/run/sshd && \ + + #### if an orchestrator ssh key is specified then add it to the authorized_keys + {% if orchestrator_ssh_key is defined %} + mkdir -p ~/.ssh/ && touch ~/.ssh/authorized_keys && \ + echo "{{ orchestrator_ssh_key }}" >> ~/.ssh/authorized_keys && \ + echo "{{ orchestrator_user }} ALL=(ALL) ALL" >> /etc/sudoers && \ + {% endif %} + + #### is this pem required? + wget -O /usr/local/share/ca-certificates/infn-ca-2015.crt https://security.fi.infn.it/CA/mgt/INFNCA.pem && \ + tar xzvf smartgears-distribution-{{ smartgears_distribution_version }}.tar.gz + +WORKDIR {{ smartgears_user_home }}/smartgears-distribution-{{ smartgears_distribution_version }}/ +RUN \ + ./install -s tomcat + +COPY logback.xml {{ smartgears_user_home }}/lib/ + +WORKDIR {{ smartgears_user_home }} + +EXPOSE 22 8080 +ENTRYPOINT ["{{ smartgears_user_home }}/smartgears_run.sh"] diff --git a/smartgears/smartgears-base-image/templates/logback.xml.j2 b/smartgears/smartgears-base-image/templates/logback.xml.j2 new file mode 100644 index 0000000..9f82216 --- /dev/null +++ b/smartgears/smartgears-base-image/templates/logback.xml.j2 @@ -0,0 +1,139 @@ +<configuration> + <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> + <file>{{ smartgears_log_dir }}/ghn.log</file> + <append>true</append> + <encoder> + <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{0}: %msg%n</pattern> + </encoder> +{% if smartgears_log_use_timesize_appender %} + <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> + <fileNamePattern>{{ smartgears_log_dir }}/ghn.%d{yyyy-MM-dd}.%i.log</fileNamePattern> + <maxHistory>{{ smartgears_log_max_history }}</maxHistory> + <maxFileSize>{{ smartgears_log_max_file_size }}</maxFileSize> + <totalSizeCap>{{ smartgears_log_total_file_cap }}</totalSizeCap> + </rollingPolicy> +{% else %} + <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> + <fileNamePattern>{{ smartgears_log_dir }}/ghn.%d{yyyy-MM-dd}.log</fileNamePattern> + <maxHistory>{{ smartgears_log_max_history }}</maxHistory> + </rollingPolicy> +{% endif %} + </appender> + + <appender name="ACCOUNT_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> + <file>{{ smartgears_log_dir }}/accounting.log</file> + <append>true</append> + <encoder> + <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{0}: %msg%n</pattern> + </encoder> +{% if smartgears_log_use_timesize_appender %} + <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> + <fileNamePattern>{{ smartgears_log_dir }}/accounting.%d{yyyy-MM-dd}.%i.log</fileNamePattern> + <maxHistory>{{ smartgears_log_max_history }}</maxHistory> + <maxFileSize>{{ smartgears_log_max_file_size }}</maxFileSize> + <totalSizeCap>{{ smartgears_log_total_file_cap }}</totalSizeCap> + </rollingPolicy> +{% else %} + <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> + <fileNamePattern>{{ smartgears_log_dir }}/accounting.%d{yyyy-MM-dd}.log</fileNamePattern> + <maxHistory>{{ smartgears_log_max_history }}</maxHistory> + </rollingPolicy> +{% endif %} + </appender> + + <appender name="ACCESS_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> + <file>{{ smartgears_log_dir }}/access.log</file> + <append>true</append> + <encoder> + <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{0}: %msg%n</pattern> + </encoder> +{% if smartgears_log_use_timesize_appender %} + <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> + <fileNamePattern>{{ smartgears_log_dir }}/access.%d{yyyy-MM-dd}.%i.log</fileNamePattern> + <maxHistory>{{ smartgears_log_max_history }}</maxHistory> + <maxFileSize>{{ smartgears_log_max_file_size }}</maxFileSize> + <totalSizeCap>{{ smartgears_log_total_file_cap }}</totalSizeCap> + </rollingPolicy> +{% else %} + <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> + <fileNamePattern>{{ smartgears_log_dir }}/access.%d{yyyy-MM-dd}.log</fileNamePattern> + <maxHistory>{{ smartgears_log_max_history }}</maxHistory> + </rollingPolicy> +{% endif %} + </appender> + +{% if dataminer_app_install is defined and dataminer_app_install %} + <appender name="ANALYSIS" class="ch.qos.logback.core.rolling.RollingFileAppender"> + <file>{{ smartgears_log_dir }}/analysis.log</file> + <append>true</append> + <encoder> + <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{0}: %msg%n</pattern> + </encoder> +{% if smartgears_log_use_timesize_appender %} + <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> + <fileNamePattern>{{ smartgears_log_dir }}/analysis.%d{yyyy-MM-dd}.%i.log</fileNamePattern> + <maxHistory>{{ smartgears_log_max_history }}</maxHistory> + <maxFileSize>{{ smartgears_log_max_file_size }}</maxFileSize> + <totalSizeCap>{{ smartgears_log_total_file_cap }}</totalSizeCap> + </rollingPolicy> +{% else %} + <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> + <maxFileSize>{{ smartgears_log_max_file_size }}</maxFileSize> + <fileNamePattern>{{ smartgears_log_dir }}/analysis.%d{yyyy-MM-dd}.log</fileNamePattern> + <maxHistory>{{ smartgears_log_max_history }}</maxHistory> + </rollingPolicy> +{% endif %} + </appender> + + <logger name="org.gcube.dataanalysis" level="{{ smartgears_dataanalysis_loglevel }}"> + <appender-ref ref="ANALYSIS" /> + </logger> + <logger name="AnalysisLogger" level="{{ smartgears_dataanalysis_loglevel }}"> + <appender-ref ref="ANALYSIS" /> + </logger> +{% endif %} + +{% if smartgears_appender_list is defined %} +{% for obj in smartgears_appender_list %} + <appender name="{{ obj.appender_name }}" class="ch.qos.logback.core.rolling.RollingFileAppender"> + <file>/home/gcube/tomcat/logs/{{ obj.appender_file_name }}.log</file> + <append>true</append> + <encoder> + <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{0}: %msg%n</pattern> + </encoder> + <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> + <fileNamePattern>/home/gcube/tomcat/logs/{{ obj.appender_file_name | default('custom') }}.%d{yyyy-MM-dd}.%i.log</fileNamePattern> + <maxHistory>{{ obj.appender_maxHistory | default('30') }}</maxHistory> + <maxFileSize>{{ obj.appender_maxFileSize | default('10MB') }}</maxFileSize> + <totalSizeCap>{{ obj.appender_totalSizeCap | default('2GB') }}</totalSizeCap> + </rollingPolicy> + </appender> + <logger name="{{ obj.appender_package }}" level="{{ obj.appender_level | default('WARN') }}"> + <appender-ref ref="{{ obj.appender_name | default('SERVICE') }}" /> + </logger> +{% endfor %} +{% endif %} + + + <logger name="org.gcube.data.publishing" level="FATAL"> + <appender-ref ref="ACCOUNT_FILE" /> + </logger> + <logger name="org.gcube.documentstore" level="FATAL"> + <appender-ref ref="ACCOUNT_FILE" /> + </logger> + + <logger name="org.gcube.smartgears.handlers.application.request" + level="INFO"> + <appender-ref ref="ACCESS_FILE" /> + </logger> + + <logger name="org.gcube" level="{{ smartgears_loglevel }}" /> + <logger name="org.gcube.smartgears" level="{{ smartgears_loglevel }}" /> + <logger name="org.gcube.common.events" level="{{ smartgears_loglevel }}" /> + <logger name="org.gcube.data.publishing" level="FATAL" /> + <logger name="org.gcube.documentstore" level="FATAL" /> + + <root level="{{ smartgears_loglevel }}"> + <appender-ref ref="FILE" /> + </root> +</configuration> diff --git a/smartgears/smartgears-container-bootstrap/defaults/main.yml b/smartgears/smartgears-container-bootstrap/defaults/main.yml new file mode 100644 index 0000000..6e03c1e --- /dev/null +++ b/smartgears/smartgears-container-bootstrap/defaults/main.yml @@ -0,0 +1,10 @@ +smartgears_container_name: "smartgears_base_container" +smartgears_image: "smartgears_base_image" +image_version: "{{ smartgears_distribution_version }}" +container_ssh_port: 2222 +tomcat_port: 8080 + +smartgear_tokens: "c8610c1b-4293-4ed4-ad53-f2aeaf4fbeb8-97827" +container_mode: "online" +container_hostname: "shinyproxy" +container_infrastructure: "d4s" diff --git a/smartgears/smartgears-container-bootstrap/tasks/main.yml b/smartgears/smartgears-container-bootstrap/tasks/main.yml new file mode 100644 index 0000000..cbb2732 --- /dev/null +++ b/smartgears/smartgears-container-bootstrap/tasks/main.yml @@ -0,0 +1,20 @@ +#### runs/replaces a smartgears container with the provided params +- name: run a smartgears container based on the "{{ smartgears_image }}" image + docker_container: + name: "{{ smartgears_container_name }}" + state: started + image: "{{ smartgears_image }}:{{ image_version }}" + #pull: True + recreate: yes + detach: True + env: + CONTAINER_TOKENS: "{{ smartgear_tokens }}" + CONTAINER_MODE: "{{ container_mode }}" + CONTAINER_HOSTNAME: "{{ container_hostname }}" + CONTAINER_PORT: "{{ tomcat_port }}" + CONTAINER_INFRASTRUCTURE: "{{ container_infrastructure }}" + PATCH_COMMON_SCOPES: "{{ patch_common_scope }}" + PATCH_COMMON_AUTHORIZATION: "{{ patch_common_authorization }}" + published_ports: + - "{{ container_ssh_port }}:22" + - "{{ tomcat_port }}:{{ tomcat_port }}" diff --git a/smartgears/smartgears-container-home-library/defaults/main.yml b/smartgears/smartgears-container-home-library/defaults/main.yml new file mode 100644 index 0000000..fa78d79 --- /dev/null +++ b/smartgears/smartgears-container-home-library/defaults/main.yml @@ -0,0 +1,7 @@ +image_name: "smartgears_home_library" +image_tag: "{{ home_library_war_version }}" +push_to_repo: "no" +repo: "gcube-staging" + +home_library_artifact_url: "http://maven.research-infrastructures.eu/nexus/service/local/repositories/{{ repo }}/content/org/gcube/data/access/home-library-webapp/{{ home_library_war_version }}/home-library-webapp-{{ home_library_war_version }}.war" +catalina_home: "/usr/share/tomcat7/" diff --git a/smartgears/smartgears-container-home-library/tasks/main.yml b/smartgears/smartgears-container-home-library/tasks/main.yml new file mode 100644 index 0000000..9c39503 --- /dev/null +++ b/smartgears/smartgears-container-home-library/tasks/main.yml @@ -0,0 +1,20 @@ +- name: create temporary build directory + shell: mktemp -d + register: tempdir + +- name: copy the Dockerfile + template: src=Dockerfile dest="{{ tempdir.stdout }}/" + +- name: Build the docker image + docker_image: + path: "{{ tempdir.stdout }}" + name: "{{ image_name }}" + tag: "{{ image_tag }}" + state: present + force: yes + rm: True + pull: False + push: "{{ push_to_repo }}" + +- name: remove the temporary build directory + file: path="{{ tempdir.stdout }}" state=absent diff --git a/smartgears/smartgears-container-home-library/templates/Dockerfile b/smartgears/smartgears-container-home-library/templates/Dockerfile new file mode 100644 index 0000000..e4dc1fd --- /dev/null +++ b/smartgears/smartgears-container-home-library/templates/Dockerfile @@ -0,0 +1,3 @@ +FROM smartgears_base_image:{{ smartgears_distribution_version }} + +ADD {{ home_library_artifact_url }} "{{ catalina_home }}/webapps/"