summaryrefslogtreecommitdiffstats
path: root/packaging/docker/scripts/gen-dockerfiles.sh
diff options
context:
space:
mode:
Diffstat (limited to 'packaging/docker/scripts/gen-dockerfiles.sh')
-rwxr-xr-xpackaging/docker/scripts/gen-dockerfiles.sh230
1 files changed, 230 insertions, 0 deletions
diff --git a/packaging/docker/scripts/gen-dockerfiles.sh b/packaging/docker/scripts/gen-dockerfiles.sh
new file mode 100755
index 000000000..5cd926a98
--- /dev/null
+++ b/packaging/docker/scripts/gen-dockerfiles.sh
@@ -0,0 +1,230 @@
+#!/bin/bash
+#
+# Copyright 2016-2017 Huawei Technologies Co., Ltd.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# $1 dirsrc
+# $2 autorelease build
+
+set -e
+
+dirsrc=$1
+
+if [ -z "$2" ]; then
+ BUILD="snapshots"
+else
+ BUILD=$2
+fi
+
+VERSION="1.1.0-SNAPSHOT"
+
+# docker root dir
+ROOT=`git rev-parse --show-toplevel`/test/csit/docker
+
+cd $ROOT
+dir=$dirsrc/target
+mkdir -p $dir
+
+if [ "$BUILD" = "snapshots" ]; then
+ $ROOT/scripts/gen-dockerfiles.py $dirsrc
+else
+ $ROOT/scripts/gen-dockerfiles.py $dirsrc --build $BUILD
+fi
+
+# Update build number in workaround files
+for file in `find $dirsrc -name 80-workaround.txt`; do
+ sed -i "s|autorelease-[0-9]\{4\}|$BUILD|" $file
+done
+
+
+cp $ROOT/../../../distribution/LICENSE $dir
+cp -f $dirsrc/*.txt $dir 2>/dev/null || :
+
+if [ -f $dir/20-mysql.txt ]; then
+ cp $ROOT/templates/init-mysql.sh $dir/init-mysql.sh
+else
+ rm -f $dir/init-mysql.sh
+fi
+
+
+# empty 30-tomcat.txt would be created by gen-dockerfiles.py where required
+if [ -f $dir/30-tomcat.txt ]; then
+ TOMCAT_VERSION=`$ROOT/scripts/get-tomcat-version.sh`
+ cat > $dir/30-tomcat.txt <<EOF
+# 30-tomcat.txt - AUTOGENERATED, DO NOT MODIFY MANUALLY
+# Set up tomcat
+RUN wget -q http://mirrors.ocf.berkeley.edu/apache/tomcat/tomcat-8/v${TOMCAT_VERSION}/bin/apache-tomcat-${TOMCAT_VERSION}.tar.gz && tar --strip-components=1 -xf apache-tomcat-${TOMCAT_VERSION}.tar.gz && rm -f apache-tomcat-${TOMCAT_VERSION}.tar.gz && rm -rf webapps && mkdir -p webapps/ROOT
+RUN echo 'export CATALINA_OPTS="\$CATALINA_OPTS -Xms64m -Xmx256m -XX:MaxPermSize=64m"' > /service/bin/setenv.sh
+ENV CATALINA_HOME /service
+
+EOF
+fi
+
+
+
+cat > $dir/docker-entrypoint.sh <<EOF
+#!/bin/bash
+#
+# Copyright 2016-2017 Huawei Technologies Co., Ltd.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+# This file was auto-generated by gen-all-dockerfiles.sh; do not modify manually.
+#
+# $dir/docker-entrypoint.sh
+#
+
+if [ -z "\$SERVICE_IP" ]; then
+ export SERVICE_IP=\`hostname -i\`
+fi
+echo
+echo Environment Variables:
+echo "SERVICE_IP=\$SERVICE_IP"
+
+EOF
+
+if [ $dirsrc != "common-services-msb" ]; then
+ cat >> $dir/docker-entrypoint.sh <<EOF
+if [ -z "\$MSB_ADDR" ]; then
+ echo "Missing required variable MSB_ADDR: Microservices Service Bus address <ip>:<port>"
+ exit 1
+fi
+echo "MSB_ADDR=\$MSB_ADDR"
+echo
+
+# Wait for MSB initialization
+echo Wait for MSB initialization
+for i in {1..20}; do
+ curl -sS -m 1 \$MSB_ADDR > /dev/null && break
+ sleep \$i
+done
+
+EOF
+fi
+
+cat >> $dir/docker-entrypoint.sh <<EOF
+echo
+
+# Configure service based on docker environment variables
+./instance-config.sh
+
+EOF
+if [ -f $dir/20-mysql.txt ]; then
+ cat >> $dir/docker-entrypoint.sh <<EOF
+# Start mysql
+su mysql -c /usr/bin/mysqld_safe &
+
+EOF
+fi
+if [ -f $dir/25-mongodb.txt ]; then
+ cat >> $dir/docker-entrypoint.sh <<EOF
+# Start mongodb
+mongod &
+
+EOF
+fi
+cat >> $dir/docker-entrypoint.sh <<EOF
+# Perform one-time config
+if [ ! -e init.log ]; then
+ # Perform workarounds due to defects in release binary
+ ./instance-workaround.sh
+
+EOF
+if [ -f $dir/20-mysql.txt ]; then
+ cat >> $dir/docker-entrypoint.sh <<EOF
+ # Init mysql; set root password
+ ./init-mysql.sh
+
+EOF
+fi
+cat >> $dir/docker-entrypoint.sh <<EOF
+ # microservice-specific one-time initialization
+ ./instance-init.sh
+
+ date > init.log
+fi
+
+# Start the microservice
+./instance-run.sh
+
+EOF
+
+cat > $dir/Dockerfile <<EOF
+#
+# This file was auto-generated by gen-all-dockerfiles.sh; do not modify manually.
+#
+# $dir/Dockerfile
+#
+
+EOF
+
+cat $dir/*.txt >> $dir/Dockerfile
+
+for file in instance-config.sh instance-init.sh instance-run.sh instance-workaround.sh; do
+ if [ ! -f $dirsrc/$file ]; then
+ cp -n $ROOT/templates/instance-script.sh $dirsrc/$file
+ fi
+done
+
+cp -f $dirsrc/instance-*.sh $dir
+touch $dir/instance-config.sh
+touch $dir/instance-init.sh
+touch $dir/instance-run.sh
+touch $dir/instance-workaround.sh
+chmod +x $dir/*.sh
+
+
+cat > $dir/pom.xml <<EOF
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.openo.integration.docker</groupId>
+ <artifactId>${dirsrc}</artifactId>
+ <version>${VERSION}</version>
+ <packaging>docker</packaging>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>io.fabric8</groupId>
+ <artifactId>docker-maven-plugin</artifactId>
+ <version>0.19.0</version>
+ <extensions>true</extensions>
+ <configuration>
+ <images>
+ <image>
+ <name>openoint/${dirsrc}</name>
+ <build>
+ <dockerFileDir>.</dockerFileDir>
+ <tags>
+ <tag>latest</tag>
+ </tags>
+ </build>
+ </image>
+ </images>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
+EOF