blob: a2bba89229060c25080be90c53079137357247e8 [file] [log] [blame]
#!/usr/bin/env bash
#*******************************************************************************
# Copyright (c) 2019 Eclipse Foundation and others.
# This program and the accompanying materials are made available
# under the terms of the Eclipse Public License 2.0
# which is available at http://www.eclipse.org/legal/epl-v20.html,
# or the MIT License which is available at https://opensource.org/licenses/MIT.
# SPDX-License-Identifier: EPL-2.0 OR MIT
#*******************************************************************************
# Bash strict-mode
set -o errexit
set -o nounset
set -o pipefail
# Parameters:
release_name=${1:-}
sha_256=${2:-}
namespace="infocenter"
hostname="help.eclipse.org"
dockerhub_repo="eclipsecbi/eclipse-infocenter"
nginx_image="eclipsefdn/nginx:stable-alpine"
# Verify inputs
if [[ -z "${release_name}" ]]; then
printf "ERROR: a release name must be given.\n"
exit 1
fi
if [[ -z "${sha_256}" && $# -lt 2 ]]; then
printf "ERROR: a sha_256 must be given.\n"
exit 1
fi
create_license_header() {
local file=${1:-}
local year="2019"
cat <<EOF > ${file}
#*******************************************************************************
# Copyright (c) ${year} Eclipse Foundation and others.
# This program and the accompanying materials are made available
# under the terms of the Eclipse Public License 2.0
# which is available at http://www.eclipse.org/legal/epl-v20.html,
# or the MIT License which is available at https://opensource.org/licenses/MIT.
# SPDX-License-Identifier: EPL-2.0 OR MIT
#*******************************************************************************
EOF
}
create_route () {
local release_name=${1:-}
local namespace_name=${2:-}
local host_name=${3:-}
local file_name="${release_name}/route.yml"
create_license_header ${file_name}
cat <<EOF >> ${file_name}
apiVersion: "route.openshift.io/v1"
kind: "Route"
metadata:
labels:
infocenter.version: "${release_name}"
namespace: "${namespace_name}"
annotations:
haproxy.router.openshift.io/timeout: 60s
name: "infocenter-${release_name}"
spec:
host: "${host_name}"
path: "/${release_name}"
port:
targetPort: "http"
tls:
insecureEdgeTerminationPolicy: "Redirect"
termination: "edge"
to:
kind: "Service"
name: "infocenter-${release_name}"
weight: 100
EOF
}
create_service () {
local release_name=${1:-}
local namespace_name=${2:-}
local file_name="${release_name}/service.yml"
create_license_header ${file_name}
cat <<EOF >> ${file_name}
apiVersion: "v1"
kind: "Service"
metadata:
labels:
infocenter.version: "${release_name}"
namespace: "${namespace_name}"
name: "infocenter-${release_name}"
spec:
ports:
- name: "http"
port: 80
protocol: "TCP"
targetPort: 8080
selector:
infocenter.version: "${release_name}"
EOF
}
create_nginx_configmap () {
local release_name=${1:-}
local namespace_name=${2:-}
local file_name="${release_name}/nginx-configmap.yml"
create_license_header ${file_name}
cat <<EOF >> ${file_name}
apiVersion: v1
kind: ConfigMap
metadata:
labels:
infocenter.version: "${release_name}"
namespace: "${namespace_name}"
name: nginx-config-${release_name}
data:
nginx.conf: |-
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8080;
location /${release_name}/ {
proxy_pass http://127.0.0.1:8086/help/;
}
}
}
EOF
}
create_statefulset () {
local release_name=${1:-}
local namespace_name=${2:-}
local sha256=${3:-}
#local sha256="$(docker inspect --format='{{index .RepoDigests 0}}' "${dockerhub_repo}:${release_name}" | sed -E 's/.*sha256:(.*)/\1/g')"
local file_name="${release_name}/statefulset.yml"
local infocenter_image=${dockerhub_repo}:${release_name}@sha256:${sha256}
echo "Image name: ${infocenter_image}"
create_license_header ${file_name}
cat <<EOF >> ${file_name}
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
infocenter.version: "${release_name}"
namespace: "${namespace_name}"
name: "infocenter-${release_name}"
spec:
replicas: 1
selector:
matchLabels:
infocenter.version: "${release_name}"
serviceName: "infocenter-${release_name}"
template:
metadata:
labels:
infocenter.version: "${release_name}"
name: "infocenter-${release_name}"
spec:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: speed
operator: NotIn
values:
- fast
terminationGracePeriodSeconds: 1200
containers:
- name: infocenter-${release_name}
image: ${infocenter_image}
imagePullPolicy: IfNotPresent
command:
- /infocenter/startDockerInfoCenter.sh
livenessProbe:
httpGet:
path: /help/index.jsp
port: 8086
scheme: HTTP
initialDelaySeconds: 480
periodSeconds: 60
failureThreshold: 2
timeoutSeconds: 90
readinessProbe:
httpGet:
path: /help/index.jsp
port: 8086
periodSeconds: 60
timeoutSeconds: 90
initialDelaySeconds: 60
ports:
- containerPort: 8086
protocol: TCP
resources:
requests:
cpu: 500m
limits:
cpu: 2
memory: 1.5Gi
volumeMounts:
- name: workspace
mountPath: "/infocenter/workspace"
- name: nginx
image: ${nginx_image}
ports:
- containerPort: 8080
volumeMounts:
- name: nginx-config
mountPath: /etc/nginx/nginx.conf
subPath: nginx.conf
volumes:
- name: workspace
emptyDir: {}
- name: nginx-config
configMap:
name: nginx-config-${release_name}
EOF
}
mkdir -p ${release_name}
create_route ${release_name} ${namespace} ${hostname}
create_service ${release_name} ${namespace}
create_nginx_configmap ${release_name} ${namespace}
create_statefulset ${release_name} ${namespace} ${sha_256}