From 644f38958cba2b75e9a3a56f50af6b27ef1ef902 Mon Sep 17 00:00:00 2001 From: daniele-pavia Date: Wed, 6 Dec 2017 12:26:14 +0100 Subject: [PATCH] added the smartgears container related roles to build a smartgears docker image --- .../smartgears-base-image/defaults/main.yml | 27 ++++ .../files/common-authorization-patched.jar | Bin 0 -> 56718 bytes .../files/common-scope-maps-patched.jar | Bin 0 -> 6484 bytes .../files/smartgears_run.sh | 74 ++++++++++ .../smartgears-base-image/meta/main.yml | 3 + .../smartgears-base-image/tasks/main.yml | 34 +++++ .../templates/Dockerfile | 69 +++++++++ .../templates/logback.xml.j2 | 139 ++++++++++++++++++ .../defaults/main.yml | 10 ++ .../tasks/main.yml | 20 +++ .../defaults/main.yml | 7 + .../tasks/main.yml | 20 +++ .../templates/Dockerfile | 3 + 13 files changed, 406 insertions(+) create mode 100644 smartgears/smartgears-base-image/defaults/main.yml create mode 100644 smartgears/smartgears-base-image/files/common-authorization-patched.jar create mode 100644 smartgears/smartgears-base-image/files/common-scope-maps-patched.jar create mode 100755 smartgears/smartgears-base-image/files/smartgears_run.sh create mode 100644 smartgears/smartgears-base-image/meta/main.yml create mode 100644 smartgears/smartgears-base-image/tasks/main.yml create mode 100644 smartgears/smartgears-base-image/templates/Dockerfile create mode 100644 smartgears/smartgears-base-image/templates/logback.xml.j2 create mode 100644 smartgears/smartgears-container-bootstrap/defaults/main.yml create mode 100644 smartgears/smartgears-container-bootstrap/tasks/main.yml create mode 100644 smartgears/smartgears-container-home-library/defaults/main.yml create mode 100644 smartgears/smartgears-container-home-library/tasks/main.yml create mode 100644 smartgears/smartgears-container-home-library/templates/Dockerfile diff --git a/smartgears/smartgears-base-image/defaults/main.yml b/smartgears/smartgears-base-image/defaults/main.yml new file mode 100644 index 00000000..ad72861c --- /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 0000000000000000000000000000000000000000..ef72face4e78323fd9b8e538e6afde0ca0b4ba6a GIT binary patch literal 56718 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 z zk8(H3j$J($Lu61YxYBEQKGyNcy9$zx1lS&TArEZbB}I4lxPf)IZ~ToEX1?Qz&lNt# zyteN-M_=sx=Dm z$uHAMNSU+pbv>GL-M|L8Son43BQ(Q@abVu_BwF4-9V$-8&qdR8b``NHIojLe!p)<(5NijBx1 zpqWzHzLr!>^_nF2V$ic%e#07EI5wq!__8FhL)6?+<1j`ZqZm)azR2<5_RUJ|!*Uga z!=t7H+2va9`f>~q$<5u3YVS|8{{6K}pKk!$M*f>E5pX<s!MSX;-4@NwF4C_6d& z3uGH>x+BtD@7|e++@@xl(}u5(@?mpYYFk5Um^%l{Y)>~px105 z)qwB3*fuRa6At`Bxd9Z0<-L1#wlCt__KJU_PiCZgLnc<2lwpYf{wzwv{OF4~)x+(_U0_^L>%E=;JJ8(e-x~ zUQ{MQ1B1w9ZKCm~Ua%$O9Rrqf9tP^ut{-nt2K>croQ?@K7sc3KwHv z1EJpBCHclOvq(x{Z-YB0A(J|W=}BubLKa`*BSYefmXD|ap2IzIH{9K38zkdRW>a72 znMwNEL0tD#sW}DdjcV4ij(O_3RD)lZxUV4EdO8II4+C;mw{Bkn^ zTH3Zc8rD3fuTg8t=khSGhOn#*1+eK5Q?Qt_E+VnqCCu0>_DLv`wuzcD1cgYmaKU1AeRBKA{kUhsG1L65eeWyFUYHc>)E4fp%8!)lg-*y@UEcb#W7U-{NqcJCxMm>4rttRL zwM%QQ%=-6@y&P!kclxV1Yd?ynbMuZI@O=!41TQ?y)M=@#!rs%YHz zn0}02piekMX{;(RWj7Gic0dEBHc%+lDMe*p(05t#8xwR+`uH&EGxaOHh39XryY9TH zk9Qbbm$wCrvgA7oy3Ud_JZ21!rjc(`-Z;ST0qEM%M$g}kF7wL3di?57}7-De*UF2)` zT`R{vO!s+9*NRa4_xY&Jcyx{&rB9R zFnj_w26vz$j=-5HciP0rBjI;QDwP5oI0nP9LXIAHJ`#nN!__`0MR6*$& z10xTwk0JZ+Be%WG6Dp`x&uFo%ORu&pFp5x)B9`|q&-*^^dpu+$HWZ(e2r42NPZj)l z7nS1Cjt2P~4HbgGlC0<^$?4^^@yqf25_|MJ1W_3&3zn0Zbzv*-!Y^+R-tbiA@fuc$ z%!tXjA2wlDAHbO^Z@xUvG9BcGm4MtNNHpc66Edwr? zUEinCW$qc-+Rx)@D?cf2a6u^24+pzZg@cSL7wy0BiGs7;wvc)bSJ!3Hi;UWh;vX4V zjVL_{8DQCz1o>vYazjX=Y_s#X%mb1$dm~Nm-lK?cN6=BEQr%R_>bVy`E$e(7vO@cGsSVp20m;XX2WWOB1!_0voC`Ch7KwKT<#&uO zvsmNriELE_Iz9>MtopEFXLz6FU`*}d>QIPGWp>n2;}sO9h6vZoo#iK6)o<=4C>T}8wyZYU=B zVS~jI9xO{!Hh7F1NmV@JD2E>~VK7!Esh+c4m$;dgla%`UUFBN-Rmv`kbvhNz)`-BG zmX~kB;Q@#3TS5F{G1-&1EX(gvDm;=u5TFY%&Ltrj(}`IjAP2kG+@HN9g(PKjV2Odc^tsn-RD*{aFfdz$#tuM0nh!UAaj|11_d^ zz4*BX7URw>k?`>m#yR4i=UkOBG9y-%$3Jfw9Pt!T76FmK5QphMZ+Ees-<9(8uyufC zuM2u-O#wKt5rnlWNl4W3Ii0gSbtQXJPVB&)0~#+r&-B=QM_e1Hm!#Q}X&N!t!4fUG zL@1K?r>dUEvy|yu^2Z%NBOpN#{D872n{?k|L~Kp6ka#dgW_LD?cyD*&2jU&?$+E1l z$G|dS{(cI6!!whVEHZn#k(jIze!hA6blHS1DX>|7-}+f?dZ=iolnd;z+Yth zVuz$Ud5i}g?zxDa+rNRL>?DCabnH?E@|0?y3QpPmvV=0OU zgvMFS;h-#u7Mkx@efw18KEfAR)AnlTDtwPD5`H%_{cabyr^kKpW25Xkd`vTD4i-Q4 za!X8zN?7{6IgK~cE>|<7=95FdqlWAowuHp3a5U&@mgC8wIEC4`8DQRu9K4P{gGK|6 z2?>ky#%E>GHAPhvTU zRHJ9S&}S^<7>3u5s8W<$8OBcL27Q+l8w(9eC8K`OZm=b|^FHl2NOl@XopJSOC37@h z582D+pse22=|Bd8ts?Qh4Rhz-55GsecXI&Ses;8EXR|YZDl6?7v69orsu+7xZP78i zNBMgbX*pPA6Y;LTPNCGa=$F0`wYsMXHnO4$qHl7CammasICap+c`eATk(Cu^MOSUL zlhJ4efx_D~O&h;HGTqVrQf2A?4#$7*L|oW~{5sv&x6alRU()N->|aIAGuY0I^4-l( z<}K#EXQ16((y~xR;8}Sn{bIIMqifEMmN`UGK;zk@;E#N&gKYP$%^K<>t#k>)4(28^ zqMOWo_*mOjADi}ooJ1@Drzb@K%lnkfaW9`Kvs3%MZ-VPU@Wcdf3`c%qB% zi>FCsrrU+=X`o?;zcrt(Fmdb&uAnh4!0eVBd*Jj%1asG7&Z&F$BWo0IT_(Fsmrri5 zbqIUulLkX>AzlSdtu2bY-#(3Q$XZZb>dflr#UkgD^%u*ma3?4a8m zt_rroO5FEouZ{;hmRslgY+tztZ;Lr^L^76&*gwZAPk#kjWRZGbWd|e9kfOM?ZJV^= z?yT)_Ag0#-%J5D{pcWF*?e_9PJg^R`@3sD#XLR6+k6=m{?D~^-yQrB!F9x;B- zCuf~}jI_zJl;JMX)O1r6e%-tzMwkHf+O#|TBeiz4uH|dd9#P4XA^ZU#R%GgEytAh= zmPp$f*IbJ+?O8zpo65bY;&Ns#5%9hFR*WDt-fu~^uAlvTwE=?0HTmG zmD8uLc+99>Mq^oWq}v{tp_}J_q%NE%>Stl$ZohNy!PTXb08%>FYu6JWl*Z_NC7WvF z5yrZNCz7aUA+TS@0AAHSp4#eZHhbJeuX2(E?~aRCP{^Xnu4bkDd4N?if=rEHlDyyz zueiF4c9TRhAVEk-{YxMvSZ)s=IS*>7SCfod0$*KQzMtkxr1bn)=Ip*(Yw(xeX2 z%XUdz%c)8n)}q-eb-Vx0{!;`i#?PzB#r_QWfxrw0>F)pRY;m7|h6DDcoIQR9EM3&) zN(7+55TOrU;hDWM$cC+(v%~rJ$Q~z%sI+llg9m;nFx_IyG!v7?#AmfI6_#;=CbGAzDapSYE4Z<7(@EHpkuzh(B! zvS+SYiO68b#%8xH>|K;hVR%c#r&u}4%QBfE(cJ9j>O=dN8s$s53J{8dyf-}S9FY&- z(osxE@<>rwEluM}uCDYk$f-V^{#xqChMW?#$Fm{z(n_G~Nh-zkZWqzu-7)T@TrWN% zj@Lu4NBGSyAzxxt*UT;yh69_3KiUD|Ej>Z#<(Y^w%JNOB;SKXFlwi|i-@ZI~1aJuj zb!DGKP8Hx5q(lE@WLA^KL6Gxmh&%#5H~_aSc-+}dJ%LMlZnl0uxud0d84hKid`RyD z@PYj6>4O0WkF*T0}7*CY?qi!1e*NiVFAtC6?%+v!#uD&7eawlTCLtahxKi{Tf zzV^%hzI>(q@~_4-baheF%z8@5Q`q`5SGz(DL#D>m*TS8e_T98B?BtB)m@vk_S8J#s zw!XcCOF>`qJr8LfRPI^f5z8qdzz}xwZTRP6OFibwQ~&@U(u6-Zt_}DNKBSK}A<4rf{`MC0rG`xH^1-16rC= zn(-=5Ez;D%_$hza*zU`k{PK3gFFad1N>uv7cykCf6%%@WWJk@tanOr8rbAA&^o+5U z5%6}^q7A0-sSK}>-0koUaY08tDeJrr;h)gj3oKs%J){MyAb12kL_FX-AYV69x5CeF z{`!IjwC+?k#3A1)No$I;$t%nJN=dc=bYJ(MyYIAER5;Y10T~6wk;4u^0bt;R2UTot zuq<@3O5)1$GSV8F>`F2}nf?#wNT)RbfBtX4v7l-=5yyvz0`6$)W$E-U`2V4M{;BY5 zX9_p__rifY{_MXPZ|>~q==}eyjrUA#&F84?SEX!c%*MGJ4Cya%fClJ%Ne?;!^AwKu z>kWH|mLZZG%ng}^PHFHi5cc9J&lKgM}Pfe@QA{Lhs_xCiN&Fug^mD1h%l0Mi7ZD$NaM z2lnCqO@U`ycv`8dvxBX+seqRr-FzR{V4Rvm?3E{cH{Nx8< zhb{)eD|tm>1c0Cp=me4&=~QxqrAf{W;kPJaMO$}|i=lCB^}hEUV8~ryct94(r;;0- zPkwGRr@doop=s)F?|vpN1q@8trF5%z1F%#9_Tem+4^$V%!gVpd*tN}#nF3hc{%ty4 zpt~rRiy`UX9TXo1_`(D51(M?URC0s+n9hwv&C}H3XKGk?*r@`k@OOg_3DG^34RJ=c za|8K1VfWvY_{jMzd!uo#4<$g1W59Tw^(vAtQ2SpNP2Akv(j9snpVPiVrW*83#1;HVzxh}fQxEiu7m%RcQ^^fBHHRG%gwg*CqYV9^!dahU!VY#+Fuc9- z`xbs+um&(4jd^Z9}Non`{E=?fw5Ih`Bm6w{Cw08S-0c;o`L z|22qUeGdS-Zy*j1bZ%EjcI#8g4UX}IT_vZW&YjTpcR0`~JI|WmLO|~a~hHV+jUSF+)?Osa*+Ijr;;076MO+c|Bq~gzpDy5lNBVL-KpdTFNXea zkU^Q|b7~ASwaM4X-N zk7Hm52C>(_F&+ji(3uF%_McY*>{w3sFfNp#0-Ev=YC&HgKihw)iT@*L7wbRh3%HQm z>!*?%d?y8VV83}tuy-Y-`hT8%CsNN1>+gFeux>3tU%5KlTheK;*M5dbr+2QPdJ6^% z1$`Cgtn+w~1v{`)EU@1H`kma+QLT_`K&O%$?4Juesz0g=rb|Jm_#ilbCle&L_Ea{+ zJ4?=u@4S(=zs_P$_qw5@EFrPBr;;1YSqfv-uteUTYTy(GbW9W^r1MmObx=8sFklVv z{2dB(RLm%hTMGw!R10+RkhKJKa0Vp4$65^eH( p1<(-^kQk3s0gk`x0sI$<_)rC10(J`_o4aCgwp4I%SPhV${ttCa8bkm9 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..15c2afdde8ea7a1d2d038d72b85856941e077fad GIT binary patch literal 6484 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\/infrastructure>/a \\\t$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.xml; +fi + +if [[ -z "$CONTAINER_HOSTNAME" ]]; + then + echo "CONTAINER_HOSTNAME not set, assuming default value."; + else + sed -i "s/localhost<\/hostname>/$CONTAINER_HOSTNAME<\/hostname>/" container.xml; +fi + +if [[ -z "$CONTAINER_PORT" ]]; + then + echo "CONTAINER_PORT not set, assuming default value."; + else + sed -i "s/8080<\/port>/$CONTAINER_PORT<\/port>/" container.xml; +fi + +if [[ -z "$CONTAINER_INFRASTRUCTURE" ]]; + then + echo "CONTAINER_INFRASTRUCTURE not set, assuming default value."; + else + sed -i "s/gcube<\/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 00000000..96a30ae1 --- /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 00000000..b127eefd --- /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 00000000..0fb733af --- /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 00000000..9f822160 --- /dev/null +++ b/smartgears/smartgears-base-image/templates/logback.xml.j2 @@ -0,0 +1,139 @@ + + + {{ smartgears_log_dir }}/ghn.log + true + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{0}: %msg%n + +{% if smartgears_log_use_timesize_appender %} + + {{ smartgears_log_dir }}/ghn.%d{yyyy-MM-dd}.%i.log + {{ smartgears_log_max_history }} + {{ smartgears_log_max_file_size }} + {{ smartgears_log_total_file_cap }} + +{% else %} + + {{ smartgears_log_dir }}/ghn.%d{yyyy-MM-dd}.log + {{ smartgears_log_max_history }} + +{% endif %} + + + + {{ smartgears_log_dir }}/accounting.log + true + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{0}: %msg%n + +{% if smartgears_log_use_timesize_appender %} + + {{ smartgears_log_dir }}/accounting.%d{yyyy-MM-dd}.%i.log + {{ smartgears_log_max_history }} + {{ smartgears_log_max_file_size }} + {{ smartgears_log_total_file_cap }} + +{% else %} + + {{ smartgears_log_dir }}/accounting.%d{yyyy-MM-dd}.log + {{ smartgears_log_max_history }} + +{% endif %} + + + + {{ smartgears_log_dir }}/access.log + true + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{0}: %msg%n + +{% if smartgears_log_use_timesize_appender %} + + {{ smartgears_log_dir }}/access.%d{yyyy-MM-dd}.%i.log + {{ smartgears_log_max_history }} + {{ smartgears_log_max_file_size }} + {{ smartgears_log_total_file_cap }} + +{% else %} + + {{ smartgears_log_dir }}/access.%d{yyyy-MM-dd}.log + {{ smartgears_log_max_history }} + +{% endif %} + + +{% if dataminer_app_install is defined and dataminer_app_install %} + + {{ smartgears_log_dir }}/analysis.log + true + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{0}: %msg%n + +{% if smartgears_log_use_timesize_appender %} + + {{ smartgears_log_dir }}/analysis.%d{yyyy-MM-dd}.%i.log + {{ smartgears_log_max_history }} + {{ smartgears_log_max_file_size }} + {{ smartgears_log_total_file_cap }} + +{% else %} + + {{ smartgears_log_max_file_size }} + {{ smartgears_log_dir }}/analysis.%d{yyyy-MM-dd}.log + {{ smartgears_log_max_history }} + +{% endif %} + + + + + + + + +{% endif %} + +{% if smartgears_appender_list is defined %} +{% for obj in smartgears_appender_list %} + + /home/gcube/tomcat/logs/{{ obj.appender_file_name }}.log + true + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{0}: %msg%n + + + /home/gcube/tomcat/logs/{{ obj.appender_file_name | default('custom') }}.%d{yyyy-MM-dd}.%i.log + {{ obj.appender_maxHistory | default('30') }} + {{ obj.appender_maxFileSize | default('10MB') }} + {{ obj.appender_totalSizeCap | default('2GB') }} + + + + + +{% endfor %} +{% endif %} + + + + + + + + + + + + + + + + + + + + + + + diff --git a/smartgears/smartgears-container-bootstrap/defaults/main.yml b/smartgears/smartgears-container-bootstrap/defaults/main.yml new file mode 100644 index 00000000..6e03c1eb --- /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 00000000..cbb27325 --- /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 00000000..fa78d793 --- /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 00000000..9c395032 --- /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 00000000..e4dc1fdc --- /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/"