| #!/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} |
| |