From 8339ed24e9270f4cd7aa34bb632505d8d72f6c4a Mon Sep 17 00:00:00 2001 From: vijaynag Date: Thu, 25 Jul 2019 17:10:58 +0530 Subject: [PATCH] Gerrit ID: 5665 - Deploys OSM on Kubernetes. Run the installation script with -c k8s to deploy osm on K8s. To Uninstall OSM deployed on Kubernetes run script with --uninstall -c k8s. Each yaml file in osm_pods directory contains yaml definitions for pods and services. Added license to yaml files in osm_pods. Changed volume mounts to OSM_NAMESPACE_VOL from docker volumes. Removes all pods and services while uninstalling. Added namespace to deploy osm services. Deleting namespace for uninstalling osm services. Resolved Merge conflict with Change-7931. Changed Mongo, Kafka, zookeeper, mysql and prometheus to statefulset. -s users can define namespace for k8s to deploy osm services. Added cluster configuration file which will be used to install k8s control plane Addressed nodeport range issue and resolved merge conflict. Added two yaml files to create a job for systest and robot test. Change-Id: Iabe70fa7aed9cd638011bb92e2f300e32cff5772 Signed-off-by: vijaynag.bs --- .gitignore | 15 ++ installers/docker/cluster-config.yaml | 23 +++ installers/docker/osm_pods/kafka.yaml | 73 +++++++ installers/docker/osm_pods/keystone.yaml | 57 ++++++ installers/docker/osm_pods/lcm.yaml | 56 ++++++ installers/docker/osm_pods/light-ui.yaml | 58 ++++++ installers/docker/osm_pods/mon.yaml | 71 +++++++ installers/docker/osm_pods/mongo.yaml | 60 ++++++ installers/docker/osm_pods/mysql.yaml | 63 ++++++ installers/docker/osm_pods/nbi.yaml | 71 +++++++ installers/docker/osm_pods/pol.yaml | 54 +++++ installers/docker/osm_pods/prometheus.yaml | 101 ++++++++++ installers/docker/osm_pods/ro.yaml | 69 +++++++ installers/docker/osm_pods/zookeeper.yaml | 52 +++++ installers/full_install_osm.sh | 218 +++++++++++++++++---- installers/osm_health.sh | 76 +++++-- jenkins/k8s/osmclient-robot.yaml | 46 +++++ jenkins/k8s/osmclient-systest.yaml | 46 +++++ 18 files changed, 1158 insertions(+), 51 deletions(-) create mode 100644 installers/docker/cluster-config.yaml create mode 100644 installers/docker/osm_pods/kafka.yaml create mode 100644 installers/docker/osm_pods/keystone.yaml create mode 100644 installers/docker/osm_pods/lcm.yaml create mode 100644 installers/docker/osm_pods/light-ui.yaml create mode 100644 installers/docker/osm_pods/mon.yaml create mode 100644 installers/docker/osm_pods/mongo.yaml create mode 100644 installers/docker/osm_pods/mysql.yaml create mode 100644 installers/docker/osm_pods/nbi.yaml create mode 100644 installers/docker/osm_pods/pol.yaml create mode 100644 installers/docker/osm_pods/prometheus.yaml create mode 100644 installers/docker/osm_pods/ro.yaml create mode 100644 installers/docker/osm_pods/zookeeper.yaml create mode 100644 jenkins/k8s/osmclient-robot.yaml create mode 100644 jenkins/k8s/osmclient-systest.yaml diff --git a/.gitignore b/.gitignore index e750d4ed..96ee3a36 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,18 @@ +# Copyright 2019 ETSI +# +# 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. + *.pyc .cache diff --git a/installers/docker/cluster-config.yaml b/installers/docker/cluster-config.yaml new file mode 100644 index 00000000..1d83bb64 --- /dev/null +++ b/installers/docker/cluster-config.yaml @@ -0,0 +1,23 @@ +# Copyright 2019 TATA ELXSI +# +# 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 +# Author: Vijay Nag B S (vijaynag.bs@tataelxsi.co.in) + +apiVersion: kubeadm.k8s.io/v1beta1 +kind: ClusterConfiguration +networking: + podSubnet: 10.244.0.0/16 +apiServer: + extraArgs: + service-node-port-range: "80-32767" diff --git a/installers/docker/osm_pods/kafka.yaml b/installers/docker/osm_pods/kafka.yaml new file mode 100644 index 00000000..7a39026f --- /dev/null +++ b/installers/docker/osm_pods/kafka.yaml @@ -0,0 +1,73 @@ +# Copyright 2019 TATA ELXSI +# +# 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 +# Author: Vijay Nag B S (vijaynag.bs@tataelxsi.co.in) + +apiVersion: v1 +kind: Service +metadata: + name: kafka +spec: + clusterIP: None + ports: + - port: 9092 + protocol: TCP + targetPort: 9092 + selector: + app: kafka + type: ClusterIP +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: kafka + labels: + app: kafka +spec: + replicas: 1 + serviceName: kafka + selector: + matchLabels: + app: kafka + template: + metadata: + labels: + app: kafka + spec: + initContainers: + - name: zookeeper-test + image: alpine:latest + command: ["sh", "-c", "until nc -zvw1 zookeeper 2181; do sleep3; done; exit 0"] + containers: + - name: kafka + image: wurstmeister/kafka:2.11-1.0.2 + ports: + - containerPort: 9092 + protocol: TCP + env: + - name: KAFKA_ADVERTISED_HOST_NAME + value: kafka + - name: KAFKA_ADVERTISED_PORT + value: "9092" + - name: KAFKA_ZOOKEEPER_CONNECT + value: zookeeper:2181 + - name: KAFKA_LOG_RETENTION_HOURS + value: "24" + volumeMounts: + - name: socket + mountPath: /var/run/docker.sock + volumes: + - name: socket + hostPath: + path: /var/run/docker.sock diff --git a/installers/docker/osm_pods/keystone.yaml b/installers/docker/osm_pods/keystone.yaml new file mode 100644 index 00000000..8a976cf8 --- /dev/null +++ b/installers/docker/osm_pods/keystone.yaml @@ -0,0 +1,57 @@ +# Copyright 2019 TATA ELXSI +# +# 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 +# Author: Vijay Nag B S (vijaynag.bs@tataelxsi.co.in) + +apiVersion: v1 +kind: Service +metadata: + name: keystone +spec: + ports: + - port: 5000 + protocol: TCP + targetPort: 5000 + selector: + app: keystone + type: ClusterIP +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: keystone + labels: + app: keystone +spec: + replicas: 1 + selector: + matchLabels: + app: keystone + template: + metadata: + labels: + app: keystone + spec: + containers: + - name: keystone + image: opensourcemano/keystone:latest + ports: + - containerPort: 5000 + protocol: TCP + env: + - name: DB_HOST + value: mysql + envFrom: + - secretRef: + name: keystone-secret diff --git a/installers/docker/osm_pods/lcm.yaml b/installers/docker/osm_pods/lcm.yaml new file mode 100644 index 00000000..f69fba3e --- /dev/null +++ b/installers/docker/osm_pods/lcm.yaml @@ -0,0 +1,56 @@ +# Copyright 2019 TATA ELXSI +# +# 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 +# Author: Vijay Nag B S (vijaynag.bs@tataelxsi.co.in) + +apiVersion: apps/v1 +kind: Deployment +metadata: + name: lcm + labels: + app: lcm +spec: + replicas: 1 + selector: + matchLabels: + app: lcm + template: + metadata: + labels: + app: lcm + spec: + initContainers: + - name: kafka-ro-mongo-test + image: alpine:latest + command: ["sh", "-c", "until (nc -zvw1 kafka 9092 && nc -zvw1 ro 9090 && nc -zvw1 mongo 27017 ); do sleep 3; done; exit 0"] + containers: + - name: lcm + image: opensourcemano/lcm:latest + env: + - name: OSMLCM_RO_HOST + value: ro + - name: OSMLCM_DATABASE_HOST + value: mongo + - name: OSMLCM_MESSAGE_HOST + value: kafka + envFrom: + - secretRef: + name: lcm-secret + volumeMounts: + - name: osm-packages + mountPath: /app/storage + volumes: + - name: osm-packages + hostPath: + path: /var/lib/osm/osm_osm_packages/_data diff --git a/installers/docker/osm_pods/light-ui.yaml b/installers/docker/osm_pods/light-ui.yaml new file mode 100644 index 00000000..20cb5aff --- /dev/null +++ b/installers/docker/osm_pods/light-ui.yaml @@ -0,0 +1,58 @@ +# Copyright 2019 TATA ELXSI +# +# 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 +# Author: Vijay Nag B S (vijaynag.bs@tataelxsi.co.in) + +apiVersion: v1 +kind: Service +metadata: + name: light-ui +spec: + ports: + - nodePort: 80 + port: 80 + protocol: TCP + targetPort: 80 + selector: + app: light-ui + type: NodePort +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: light-ui + labels: + app: light-ui +spec: + replicas: 1 + selector: + matchLabels: + app: light-ui + template: + metadata: + labels: + app: light-ui + spec: + containers: + - name: light-ui + image: opensourcemano/light-ui:latest + envFrom: + - secretRef: + name: lwui-secret + ports: + - containerPort: 80 + protocol: TCP + env: + - name: OSM_SERVER + value: nbi diff --git a/installers/docker/osm_pods/mon.yaml b/installers/docker/osm_pods/mon.yaml new file mode 100644 index 00000000..541f6c3a --- /dev/null +++ b/installers/docker/osm_pods/mon.yaml @@ -0,0 +1,71 @@ +# Copyright 2019 TATA ELXSI +# +# 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 +# Author: Vijay Nag B S (vijaynag.bs@tataelxsi.co.in) + +apiVersion: v1 +kind: Service +metadata: + name: mon +spec: + clusterIP: None + ports: + - port: 8662 + protocol: TCP + targetPort: 8662 + selector: + app: mon + type: ClusterIP +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: mon + labels: + app: mon +spec: + replicas: 1 + selector: + matchLabels: + app: mon + template: + metadata: + labels: + app: mon + spec: + initContainers: + - name: kafka-mongo-test + image: alpine:latest + command: ["sh", "-c", "until (nc -zvw1 kafka 9092 && nc -zvw1 mongo 27017); do sleep 3; done; exit 0"] + containers: + - name: mon + image: opensourcemano/mon:latest + ports: + - containerPort: 8662 + protocol: TCP + env: + - name: OSMMON_MESSAGE_HOST + value: kafka + - name: OSMMON_MESSAGE_PORT + value: "9092" + envFrom: + - secretRef: + name: mon-secret + volumeMounts: + - name: mon-storage + mountPath: /app/database + volumes: + - name: mon-storage + hostPath: + path: /var/lib/osm/osm_mon_db/_data diff --git a/installers/docker/osm_pods/mongo.yaml b/installers/docker/osm_pods/mongo.yaml new file mode 100644 index 00000000..5b2571d8 --- /dev/null +++ b/installers/docker/osm_pods/mongo.yaml @@ -0,0 +1,60 @@ +# Copyright 2019 TATA ELXSI +# +# 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 +# Author: Vijay Nag B S (vijaynag.bs@tataelxsi.co.in) + +apiVersion: v1 +kind: Service +metadata: + name: mongo +spec: + clusterIP: None + ports: + - port: 27017 + protocol: TCP + targetPort: 27017 + selector: + app: mongo + type: ClusterIP +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: mongo + labels: + app: mongo +spec: + replicas: 1 + serviceName: mongo + selector: + matchLabels: + app: mongo + template: + metadata: + labels: + app: mongo + spec: + containers: + - name: mongo + image: mongo:latest + ports: + - containerPort: 27017 + protocol: TCP + volumeMounts: + - name: mongo-db + mountPath: /data/db + volumes: + - name: mongo-db + hostPath: + path: /var/lib/osm/osm_mongo_db/_data diff --git a/installers/docker/osm_pods/mysql.yaml b/installers/docker/osm_pods/mysql.yaml new file mode 100644 index 00000000..bbff9c5e --- /dev/null +++ b/installers/docker/osm_pods/mysql.yaml @@ -0,0 +1,63 @@ +# Copyright 2019 TATA ELXSI +# +# 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 +# Author: Vijay Nag B S (vijaynag.bs@tataelxsi.co.in) + +apiVersion: v1 +kind: Service +metadata: + name: mysql +spec: + clusterIP: None + ports: + - port: 3306 + protocol: TCP + targetPort: 3306 + selector: + app: mysql + type: ClusterIP +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: mysql + labels: + app: mysql +spec: + replicas: 1 + serviceName: mysql + selector: + matchLabels: + app: mysql + template: + metadata: + labels: + app: mysql + spec: + containers: + - image: mysql:5 + name: mysql + envFrom: + - secretRef: + name: ro-db-secret + ports: + - containerPort: 3306 + name: mysql + volumeMounts: + - name: mysql-db + mountPath: /var/lib/mysql + volumes: + - name: mysql-db + hostPath: + path: /var/lib/osm/osm_ro_db/_data diff --git a/installers/docker/osm_pods/nbi.yaml b/installers/docker/osm_pods/nbi.yaml new file mode 100644 index 00000000..f842dd07 --- /dev/null +++ b/installers/docker/osm_pods/nbi.yaml @@ -0,0 +1,71 @@ +# Copyright 2019 TATA ELXSI +# +# 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 +# Author: Vijay Nag B S (vijaynag.bs@tataelxsi.co.in) + +apiVersion: v1 +kind: Service +metadata: + name: nbi +spec: + ports: + - nodePort: 9999 + port: 9999 + protocol: TCP + targetPort: 9999 + selector: + app: nbi + type: NodePort +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nbi + labels: + app: nbi +spec: + replicas: 1 + selector: + matchLabels: + app: nbi + template: + metadata: + labels: + app: nbi + spec: + initContainers: + - name: kafka-mongo-test + image: alpine:latest + command: ["sh", "-c", "until (nc -zvw1 kafka 9092 && nc -zvw1 mongo 27017); do sleep 3; done; exit 0"] + containers: + - name: nbi + image: opensourcemano/nbi:latest + ports: + - containerPort: 9999 + protocol: TCP + env: + - name: OSMNBI_DATABASE_HOST + value: mongo + - name: OSMNBI_MESSAGE_HOST + value: kafka + envFrom: + - secretRef: + name: nbi-secret + volumeMounts: + - name: osm-packages + mountPath: /app/storage + volumes: + - name: osm-packages + hostPath: + path: /var/lib/osm/osm_osm_packages/_data diff --git a/installers/docker/osm_pods/pol.yaml b/installers/docker/osm_pods/pol.yaml new file mode 100644 index 00000000..d6ca7cdd --- /dev/null +++ b/installers/docker/osm_pods/pol.yaml @@ -0,0 +1,54 @@ +# Copyright 2019 TATA ELXSI +# +# 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 +# Author: Vijay Nag B S (vijaynag.bs@tataelxsi.co.in) + +apiVersion: apps/v1 +kind: Deployment +metadata: + name: pol + labels: + app: pol +spec: + replicas: 1 + selector: + matchLabels: + app: pol + template: + metadata: + labels: + app: pol + spec: + initContainers: + - name: kafka-mongo-test + image: alpine:latest + command: ["sh", "-c", "until (nc -zvw1 kafka 9092 && nc -zvw1 mongo 27017); do sleep 3; done; exit 0"] + containers: + - name: pol + image: opensourcemano/pol:latest + env: + - name: OSMPOL_MESSAGE_HOST + value: kafka + - name: OSMPOL_MESSAGE_PORT + value: "9092" + envFrom: + - secretRef: + name: pol-secret + volumeMounts: + - name: db + mountPath: /app/database + volumes: + - name: db + hostPath: + path: /var/lib/osm/osm_pol_db/_data diff --git a/installers/docker/osm_pods/prometheus.yaml b/installers/docker/osm_pods/prometheus.yaml new file mode 100644 index 00000000..cdfd94d8 --- /dev/null +++ b/installers/docker/osm_pods/prometheus.yaml @@ -0,0 +1,101 @@ +apiVersion: v1 +kind: Service +metadata: + name: prometheus +spec: + ports: + - nodePort: 9091 + port: 9090 + protocol: TCP + targetPort: 9090 + selector: + app: prometheus + type: NodePort +--- +apiVersion: v1 +data: + prometheus.yml: | + # Copyright 2018 The Prometheus Authors + # Copyright 2018 Whitestack + # Copyright 2018 Telefonica Investigacion y Desarrollo, S.A.U. + # + # 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. + + # my global config + global: + scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute. + evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. + # scrape_timeout is set to the global default (10s). + + # Alertmanager configuration + alerting: + alertmanagers: + - static_configs: + - targets: + # - alertmanager:9093 + + # Load rules once and periodically evaluate them according to the global 'evaluation_interval'. + rule_files: + # - "first_rules.yml" + # - "second_rules.yml" + + # A scrape configuration containing exactly one endpoint to scrape: + # Here it's Prometheus itself. + scrape_configs: + # The job name is added as a label `job=` to any timeseries scraped from this config. + - job_name: 'prometheus' + + # metrics_path defaults to '/metrics' + # scheme defaults to 'http'. + + static_configs: + - targets: ['mon:8000'] +kind: ConfigMap +metadata: + name: prom +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: prometheus + labels: + app: prometheus +spec: + replicas: 1 + serviceName: prometheus + selector: + matchLabels: + app: prometheus + template: + metadata: + labels: + app: prometheus + spec: + containers: + - name: prometheus + image: prom/prometheus:v2.4.3 + ports: + - containerPort: 9090 + protocol: TCP + volumeMounts: + - name: prom-config + mountPath: /etc/prometheus/ + - name: prom-db + mountPath: /prometheus + volumes: + - configMap: + defaultMode: 420 + name: prom + name: prom-config + - emptyDir: {} + name: prom-db diff --git a/installers/docker/osm_pods/ro.yaml b/installers/docker/osm_pods/ro.yaml new file mode 100644 index 00000000..d63ed581 --- /dev/null +++ b/installers/docker/osm_pods/ro.yaml @@ -0,0 +1,69 @@ +# Copyright 2019 TATA ELXSI +# +# 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 +# Author: Vijay Nag B S (vijaynag.bs@tataelxsi.co.in) + +apiVersion: v1 +kind: Service +metadata: + name: ro +spec: + clusterIP: None + ports: + - port: 9090 + protocol: TCP + targetPort: 9090 + selector: + app: ro + type: ClusterIP +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: ro + labels: + app: ro +spec: + replicas: 1 + selector: + matchLabels: + app: ro + template: + metadata: + labels: + app: ro + spec: + initContainers: + - name: ro-db-test + image: alpine:latest + command: ["sh", "-c", "until nc -zvw1 mysql 3306; do sleep 3 ; done; exit 0"] + containers: + - name: ro + image: opensourcemano/ro:latest + ports: + - containerPort: 9090 + protocol: TCP + env: + - name: RO_DB_HOST + value: mysql + envFrom: + - secretRef: + name: ro-secret + volumeMounts: + - name: ro + mountPath: /var/log/osm + volumes: + - name: ro + hostPath: + path: /var/lib/osm/osm_ro/_data diff --git a/installers/docker/osm_pods/zookeeper.yaml b/installers/docker/osm_pods/zookeeper.yaml new file mode 100644 index 00000000..0e31ed48 --- /dev/null +++ b/installers/docker/osm_pods/zookeeper.yaml @@ -0,0 +1,52 @@ +# Copyright 2019 TATA ELXSI +# +# 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 + +apiVersion: v1 +kind: Service +metadata: + name: zookeeper +spec: + clusterIP: None + ports: + - port: 2181 + protocol: TCP + targetPort: 2181 + selector: + app: zookeeper + type: ClusterIP +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: zookeeper + labels: + app: zookeeper +spec: + replicas: 1 + serviceName: zookeeper + selector: + matchLabels: + app: zookeeper + template: + metadata: + labels: + app: zookeeper + spec: + containers: + - name: zookeeper + image: wurstmeister/zookeeper:latest + ports: + - containerPort: 2181 + protocol: TCP diff --git a/installers/full_install_osm.sh b/installers/full_install_osm.sh index 78716498..8384224e 100755 --- a/installers/full_install_osm.sh +++ b/installers/full_install_osm.sh @@ -26,7 +26,8 @@ function usage(){ echo -e " -b v2.0 (v2.0 branch)" echo -e " -b tags/v1.1.0 (a specific tag)" echo -e " ..." - echo -e " -s user defined stack name, default is osm" + echo -e " -c deploy osm services using container . Valid values are or . If -c is not used then osm will be deployed using default orchestrator. When used with --uninstall, osm services deployed by the orchestrator will be uninstalled" + echo -e " -s or user defined stack name when installed using swarm or namespace when installed using k8s, default is osm" echo -e " -H use specific juju host controller IP" echo -e " -S use VCA/juju secret key" echo -e " -P use VCA/juju public key file" @@ -113,11 +114,17 @@ function generate_secret() { } function remove_volumes() { - stack=$1 - volumes="mongo_db mon_db osm_packages ro_db" - for volume in $volumes; do - sg docker -c "docker volume rm ${stack}_${volume}" - done + if [ -n "$KUBERNETES" ]; then + k8_volume=$1 + echo "Removing ${k8_volume}" + $WORKDIR_SUDO rm -rf ${k8_volume} + else + stack=$1 + volumes="mongo_db mon_db osm_packages ro_db" + for volume in $volumes; do + sg docker -c "docker volume rm ${stack}_${volume}" + done + fi } function remove_network() { @@ -149,6 +156,11 @@ function remove_stack() { fi } +#removes osm deployments and services +function remove_k8s_namespace() { + kubectl delete ns $1 +} + #Uninstall lightweight OSM: remove dockers function uninstall_lightweight() { if [ -n "$INSTALL_ONLY" ]; then @@ -164,9 +176,13 @@ function uninstall_lightweight() { fi else echo -e "\nUninstalling OSM" - remove_stack $OSM_STACK_NAME - remove_stack osm_elk - remove_stack osm_metrics + if [ -n "$KUBERNETES" ]; then + remove_k8s_namespace $OSM_STACK_NAME + else + remove_stack $OSM_STACK_NAME + remove_stack osm_elk + remove_stack osm_metrics + fi echo "Now osm docker images and volumes will be deleted" newgrp docker << EONG docker image rm ${DOCKER_USER}/ro:${OSM_DOCKER_TAG} @@ -178,8 +194,14 @@ function uninstall_lightweight() { docker image rm ${DOCKER_USER}/pol:${OSM_DOCKER_TAG} docker image rm ${DOCKER_USER}/osmclient:${OSM_DOCKER_TAG} EONG - remove_volumes $OSM_STACK_NAME - remove_network $OSM_STACK_NAME + + if [ -n "$KUBERNETES" ]; then + OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}" + remove_volumes $OSM_NAMESPACE_VOL + else + remove_volumes $OSM_STACK_NAME + remove_network $OSM_STACK_NAME + fi echo "Removing $OSM_DOCKER_WORK_DIR" $WORKDIR_SUDO rm -rf $OSM_DOCKER_WORK_DIR sg lxd -c "juju destroy-controller --destroy-all-models --yes $OSM_STACK_NAME" @@ -759,7 +781,6 @@ function cmp_overwrite() { fi } - function generate_docker_env_files() { echo "Doing a backup of existing env files" $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/keystone-db.env{,~} @@ -773,11 +794,16 @@ function generate_docker_env_files() { $WORKDIR_SUDO cp $OSM_DOCKER_WORK_DIR/ro.env{,~} echo "Generating docker env files" - # Docker-compose - $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/docker-compose.yaml $OSM_DOCKER_WORK_DIR/docker-compose.yaml + if [ -n "$KUBERNETES" ]; then + #Kubernetes resources + $WORKDIR_SUDO cp -bR ${OSM_DEVOPS}/installers/docker/osm_pods $OSM_DOCKER_WORK_DIR + else + # Docker-compose + $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/docker-compose.yaml $OSM_DOCKER_WORK_DIR/docker-compose.yaml - # Prometheus - $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/prometheus.yml $OSM_DOCKER_WORK_DIR/prometheus.yml + # Prometheus + $WORKDIR_SUDO cp -b ${OSM_DEVOPS}/installers/docker/prometheus.yml $OSM_DOCKER_WORK_DIR/prometheus.yml + fi # LCM if [ ! -f $OSM_DOCKER_WORK_DIR/lcm.env ]; then @@ -884,6 +910,75 @@ function generate_osmclient_script () { echo "osmclient sidecar container can be found at: $OSM_DOCKER_WORK_DIR/osm" } +#installs kubernetes packages +function install_kube() { + sudo apt-get update && sudo apt-get install -y apt-transport-https + curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - + sudo add-apt-repository "deb https://apt.kubernetes.io/ kubernetes-xenial main" + sudo apt-get update + echo "Installing Kubernetes Packages ..." + sudo apt-get install -y kubelet=1.15.0-00 kubeadm=1.15.0-00 kubectl=1.15.0-00 +} + +#initializes kubernetes control plane +function init_kubeadm() { + sudo swapoff -a + sudo kubeadm init --config $1 + sleep 5 +} + +function kube_config_dir() { + [ ! -d $K8S_MANIFEST_DIR ] && FATAL "Cannot Install Kubernetes" + mkdir -p $HOME/.kube + sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config + sudo chown $(id -u):$(id -g) $HOME/.kube/config +} + +#deploys flannel as daemonsets +function deploy_cni_provider() { + CNI_DIR="$(mktemp -d -q --tmpdir "flannel.XXXXXX")" + trap 'rm -rf "${CNI_DIR}"' EXIT + wget -q https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml -P $CNI_DIR + kubectl apply -f $CNI_DIR + [ $? -ne 0 ] && FATAL "Cannot Install Flannel" +} + +#creates secrets from env files which will be used by containers +function kube_secrets(){ + kubectl create ns $OSM_STACK_NAME + kubectl create secret generic lcm-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/lcm.env + kubectl create secret generic mon-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/mon.env + kubectl create secret generic nbi-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/nbi.env + kubectl create secret generic ro-db-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/ro-db.env + kubectl create secret generic ro-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/ro.env + kubectl create secret generic keystone-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/keystone.env + kubectl create secret generic lwui-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/lwui.env + kubectl create secret generic pol-secret -n $OSM_STACK_NAME --from-env-file=$OSM_DOCKER_WORK_DIR/pol.env +} + +#deploys osm pods and services +function deploy_osm_services() { + K8S_MASTER=$(kubectl get nodes | awk '$3~/master/'| awk '{print $1}') + kubectl taint node $K8S_MASTER node-role.kubernetes.io/master:NoSchedule- + sleep 5 + kubectl apply -n $OSM_STACK_NAME -f $OSM_K8S_WORK_DIR +} + +function parse_yaml() { + osm_services="nbi lcm ro pol mon light-ui keystone" + TAG=$1 + for osm in $osm_services; do + $WORKDIR_SUDO sed -i "s/opensourcemano\/$osm:.*/opensourcemano\/$osm:$TAG/g" $OSM_K8S_WORK_DIR/$osm.yaml + done +} + +function namespace_vol() { + osm_services="nbi lcm ro pol mon kafka mongo mysql" + for osm in $osm_services; do + $WORKDIR_SUDO sed -i "s#path: /var/lib/osm#path: $OSM_NAMESPACE_VOL#g" $OSM_K8S_WORK_DIR/$osm.yaml + done +} + function init_docker_swarm() { if [ "${DEFAULT_MTU}" != "1500" ]; then DOCKER_NETS=`sg docker -c "docker network list" | awk '{print $2}' | egrep -v "^ID$" | paste -d " " -s` @@ -1013,13 +1108,29 @@ function deploy_perfmon() { function install_lightweight() { [ "${OSM_STACK_NAME}" == "osm" ] || OSM_DOCKER_WORK_DIR="$OSM_WORK_DIR/stack/$OSM_STACK_NAME" + [ -n "$KUBERNETES" ] && OSM_K8S_WORK_DIR="$OSM_DOCKER_WORK_DIR/osm_pods" && OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}" [ ! -d "$OSM_DOCKER_WORK_DIR" ] && $WORKDIR_SUDO mkdir -p $OSM_DOCKER_WORK_DIR + [ -n "$KUBERNETES" ] && $WORKDIR_SUDO cp -b $OSM_DEVOPS/installers/docker/cluster-config.yaml $OSM_DOCKER_WORK_DIR/cluster-config.yaml track checkingroot [ "$USER" == "root" ] && FATAL "You are running the installer as root. The installer is prepared to be executed as a normal user with sudo privileges." track noroot - [ -z "$ASSUME_YES" ] && ! ask_user "The installation will configure LXD, install juju, install docker CE and init a docker swarm, as pre-requirements. Do you want to proceed (Y/n)? " y && echo "Cancelled!" && exit 1 + + if [ -n "$KUBERNETES" ]; then + [ -z "$ASSUME_YES" ] && ! ask_user "The installation will do the following + 1. Install and configure LXD + 2. Install juju + 3. Install docker CE + 4. Disable swap space + 5. Install and initialize Kubernetes + as pre-requirements. + Do you want to proceed (Y/n)? " y && echo "Cancelled!" && exit 1 + + else + [ -z "$ASSUME_YES" ] && ! ask_user "The installation will configure LXD, install juju, install docker CE and init a docker swarm, as pre-requirements. Do you want to proceed (Y/n)? " y && echo "Cancelled!" && exit 1 + fi track proceed + echo "Installing lightweight build of OSM" LWTEMPDIR="$(mktemp -d -q --tmpdir "installosmlight.XXXXXX")" trap 'rm -rf "${LWTEMPDIR}"' EXIT @@ -1043,15 +1154,17 @@ function install_lightweight() { || FATAL "failed to install $need_packages_lw" fi track prereqok - [ -z "$INSTALL_NOJUJU" ] && install_juju + [ -z "$INSTALL_NOJUJU" ] && install_juju track juju_install + if [ -z "$OSM_VCA_HOST" ]; then juju_createcontroller OSM_VCA_HOST=`sg lxd -c "juju show-controller $OSM_STACK_NAME"|grep api-endpoints|awk -F\' '{print $2}'|awk -F\: '{print $1}'` [ -z "$OSM_VCA_HOST" ] && FATAL "Cannot obtain juju controller IP address" fi track juju_controller + if [ -z "$OSM_VCA_SECRET" ]; then OSM_VCA_SECRET=$(parse_juju_password $OSM_STACK_NAME) [ -z "$OSM_VCA_SECRET" ] && FATAL "Cannot obtain juju secret" @@ -1074,28 +1187,53 @@ function install_lightweight() { OSM_DATABASE_COMMONKEY=$(generate_secret) [ -z "OSM_DATABASE_COMMONKEY" ] && FATAL "Cannot generate common db secret" fi - track juju + [ -n "$INSTALL_NODOCKER" ] || install_docker_ce track docker_ce - #install_docker_compose - [ -n "$INSTALL_NODOCKER" ] || init_docker_swarm - track docker_swarm + + #Installs Kubernetes and deploys osm services + if [ -n "$KUBERNETES" ]; then + install_kube + track install_k8s + init_kubeadm $OSM_DOCKER_WORK_DIR/cluster-config.yaml + kube_config_dir + track init_k8s + else + #install_docker_compose + [ -n "$INSTALL_NODOCKER" ] || init_docker_swarm + track docker_swarm + fi + [ -z "$DOCKER_NOBUILD" ] && generate_docker_images track docker_build + generate_docker_env_files - # remove old stack - remove_stack $OSM_STACK_NAME - create_docker_network - deploy_lightweight - generate_osmclient_script - track docker_deploy - [ -n "$INSTALL_VIMEMU" ] && install_vimemu && track vimemu - [ -n "$INSTALL_ELK" ] && deploy_elk && track elk - [ -n "$INSTALL_PERFMON" ] && deploy_perfmon && track perfmon + if [ -n "$KUBERNETES" ]; then + #remove old namespace + remove_k8s_namespace $OSM_STACK_NAME + deploy_cni_provider + kube_secrets + [ ! $OSM_DOCKER_TAG == "latest" ] && parse_yaml $OSM_DOCKER_TAG + namespace_vol + deploy_osm_services + track deploy_osm_services_k8s + else + # remove old stack + remove_stack $OSM_STACK_NAME + create_docker_network + deploy_lightweight + generate_osmclient_script + track docker_deploy + [ -n "$INSTALL_VIMEMU" ] && install_vimemu && track vimemu + [ -n "$INSTALL_ELK" ] && deploy_elk && track elk + [ -n "$INSTALL_PERFMON" ] && deploy_perfmon && track perfmon + fi + [ -z "$INSTALL_NOHOSTCLIENT" ] && install_osmclient track osmclient + wget -q -O- https://osm-download.etsi.org/ftp/osm-6.0-six/README2.txt &> /dev/null track end return 0 @@ -1170,6 +1308,7 @@ function dump_vars(){ echo "DOCKER_USER=$DOCKER_USER" echo "OSM_STACK_NAME=$OSM_STACK_NAME" echo "PULL_IMAGES=$PULL_IMAGES" + echo "KUBERNETES=$KUBERNETES" echo "SHOWOPTS=$SHOWOPTS" echo "Install from specific refspec (-b): $COMMIT_ID" } @@ -1213,6 +1352,7 @@ TO_REBUILD="" INSTALL_NOLXD="" INSTALL_NODOCKER="" INSTALL_NOJUJU="" +KUBERNETES="" INSTALL_NOHOSTCLIENT="" NOCONFIGURE="" RELEASE_DAILY="" @@ -1229,6 +1369,9 @@ REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/debian" WORKDIR_SUDO=sudo OSM_WORK_DIR="/etc/osm" OSM_DOCKER_WORK_DIR="/etc/osm/docker" +OSM_K8S_WORK_DIR="${OSM_DOCKER_WORK_DIR}/osm_pods" +OSM_HOST_VOL="/var/lib/osm" +OSM_NAMESPACE_VOL="${OSM_HOST_VOL}/${OSM_STACK_NAME}" OSM_DOCKER_TAG=latest DOCKER_USER=opensourcemano PULL_IMAGES="y" @@ -1238,8 +1381,11 @@ KEYSTONEDB_TAG=10 OSM_DATABASE_COMMONKEY= ELASTIC_VERSION=6.4.2 ELASTIC_CURATOR_VERSION=5.5.4 +POD_NETWORK_CIDR=10.244.0.0/16 +K8S_MANIFEST_DIR="/etc/kubernetes/manifests" +RE_CHECK='^[a-z0-9]([-a-z0-9]*[a-z0-9])?$' -while getopts ":hy-:b:r:k:u:R:l:p:D:o:m:H:S:s:w:t:U:P:A:" o; do +while getopts ":hy-:b:r:c:k:u:R:l:p:D:o:m:H:S:s:w:t:U:P:A:" o; do case "${o}" in h) usage && exit 0 @@ -1252,6 +1398,12 @@ while getopts ":hy-:b:r:k:u:R:l:p:D:o:m:H:S:s:w:t:U:P:A:" o; do REPOSITORY="${OPTARG}" REPO_ARGS+=(-r "$REPOSITORY") ;; + c) + [ "${OPTARG}" == "swarm" ] && continue + [ "${OPTARG}" == "k8s" ] && KUBERNETES="y" && continue + echo -e "Invalid argument for -i : ' $OPTARG'\n" >&2 + usage && exit 1 + ;; R) RELEASE="${OPTARG}" REPO_ARGS+=(-R "$RELEASE") @@ -1277,7 +1429,7 @@ while getopts ":hy-:b:r:k:u:R:l:p:D:o:m:H:S:s:w:t:U:P:A:" o; do OSM_DEVOPS="${OPTARG}" ;; s) - OSM_STACK_NAME="${OPTARG}" + OSM_STACK_NAME="${OPTARG}" && [ -n "$KUBERNETES" ] && [[ ! "${OPTARG}" =~ $RE_CHECK ]] && echo "Namespace $OPTARG is invalid. Regex used for validation is $RE_CHECK" && exit 0 ;; H) OSM_VCA_HOST="${OPTARG}" diff --git a/installers/osm_health.sh b/installers/osm_health.sh index ebae8333..aed8e7ab 100755 --- a/installers/osm_health.sh +++ b/installers/osm_health.sh @@ -1,11 +1,29 @@ #!/bin/sh +# Copyright 2019 ETSI +# +# 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. + WAIT_TIME=340 # LCM healthcheck needs 2x(30+140) senconds SERVICES_WITH_HEALTH="nbi ro zookeeper lcm mon light-ui pol" NUM_SERVICES_WITH_HEALTH=$(echo $SERVICES_WITH_HEALTH | wc -w) WAIT_FINAL=30 +OSM_DEPLOYMENT="light-ui nbi lcm ro mon pol keystone" +OSM_STATEFULSET="zookeeper kafka mongo mysql prometheus" +NUM_K8S_PODS=$(echo $OSM_DEPLOYMENT $OSM_STATEFULSET | wc -w) -while getopts "w:s:n:c:" o; do +while getopts "w:s:n:c:k" o; do case "${o}" in w) WAIT_TIME=${OPTARG} @@ -19,6 +37,9 @@ while getopts "w:s:n:c:" o; do c) SERVICES_WITH_HEALTH="${OPTARG}" ;; + k) + KUBERNETES="y" + ;; esac done @@ -26,28 +47,47 @@ done time=0 step=2 while [ $time -le "$WAIT_TIME" ]; do - if [ "$(docker ps | grep " ${STACK_NAME}_" | grep -i healthy | wc -l)" -ge "$NUM_SERVICES_WITH_HEALTH" ]; then - # all dockers are healthy now. - # final sleep is needed until more health checks are added to validate system is ready to handle requests - sleep $WAIT_FINAL - exit 0 + if [ -n "$KUBERNETES" ]; then + if [ "$(kubectl get pods -n "${STACK_NAME}" | grep -i running | wc -l)" -ge "$NUM_K8S_PODS" ]; then + #all pods are running now. + sleep $WAIT_FINAL + exit 0 + fi + else + if [ "$(docker ps | grep " ${STACK_NAME}_" | grep -i healthy | wc -l)" -ge "$NUM_SERVICES_WITH_HEALTH" ]; then + # all dockers are healthy now. + # final sleep is needed until more health checks are added to validate system is ready to handle requests + sleep $WAIT_FINAL + exit 0 + fi fi sleep $step time=$((time+step)) done -echo "Not all Docker services are healthy" -docker ps | grep " ${STACK_NAME}_" - -for S_WITH_HEALTH in $SERVICES_WITH_HEALTH ; do - docker ps | grep " ${STACK_NAME}_" | grep -i healthy | grep -q "_${S_WITH_HEALTH}." && continue - echo - echo BEGIN LOGS of container ${S_WITH_HEALTH} not healthy - docker service logs ${STACK_NAME}_${S_WITH_HEALTH} 2>&1 | tail -n 100 - echo END LOGS of container ${S_WITH_HEALTH} not healthy - echo -done +if [ -n "$KUBERNETES" ]; then + echo "Not all pods are running" + kubectl get pods -n "${STACK_NAME}" + for POD in $OSM_DEPLOYMENT $OSM_STATEFULSET; do + kubectl get pods -n "${STACK_NAME}" | grep -i running | grep -q ^"${POD}-" && continue + echo + echo BEGIN LOGS of pods ${POD} not running + LOG_POD=$(kubectl get pods -n "${STACK_NAME}" | grep -e ^"${POD}-" | awk '{print $1}' ) + [ -z "$LOG_POD" ] && echo "${POD} Failed to deploy" || kubectl logs ${LOG_POD} -n $STACK_NAME 2>&1 | tail -n 100 + echo END LOGS of services $POD not running + done +else + echo "Not all Docker services are healthy" + docker ps | grep " ${STACK_NAME}_" + for S_WITH_HEALTH in $SERVICES_WITH_HEALTH ; do + docker ps | grep " ${STACK_NAME}_" | grep -i healthy | grep -q "_${S_WITH_HEALTH}." && continue + echo + echo BEGIN LOGS of container ${S_WITH_HEALTH} not healthy + docker service logs ${STACK_NAME}_${S_WITH_HEALTH} 2>&1 | tail -n 100 + echo END LOGS of container ${S_WITH_HEALTH} not healthy + echo + done +fi exit 1 - diff --git a/jenkins/k8s/osmclient-robot.yaml b/jenkins/k8s/osmclient-robot.yaml new file mode 100644 index 00000000..6e03212d --- /dev/null +++ b/jenkins/k8s/osmclient-robot.yaml @@ -0,0 +1,46 @@ +# Copyright 2019 TATA ELXSI +# +# 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. +# Author: VIJAY NAG B S (vijaynag.bs@tataelxsi.co.in) + +################################################################ +# Please execute this command prior to deploying this yaml file. +# __tag__ , __testName__ and __tempdir__ are placeholders for osm rel, testname and tempdir respectively. +# +# $ sed "s|__tag__|$TAG|; s|__testName__|$TEST|; s|__tempdir__|$tempdir|" osmclient-robot.yaml +# +############################################################ + +apiVersion: batch/v1 +kind: Job +metadata: + name: osmclient-robot + labels: + ciStage: stage3 +spec: + containers: + - name: osm-client + image: opensourcemano/osmclient:__tag__ + envFrom: + - secretRef: + name: robot-secret + command: [ "bash", "-C", "/usr/share/osm-devops/robot-systest/run_test.sh", "--do_install", "-t", "__testName__" ] + volumeMounts: + - name: temp-dir + mountPath: /usr/share/osm-devops/systest/reports + restartPolicy: OnFailure + volumes: + - name: temp-dir + hostPath: + path: __tempdir__ diff --git a/jenkins/k8s/osmclient-systest.yaml b/jenkins/k8s/osmclient-systest.yaml new file mode 100644 index 00000000..c810ecce --- /dev/null +++ b/jenkins/k8s/osmclient-systest.yaml @@ -0,0 +1,46 @@ +# Copyright 2019 TATA ELXSI +# +# 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. +# Author: VIJAY NAG B S (vijaynag.bs@tataelxsi.co.in) + +################################################################ +# Please execute this command prior to deploying this yaml file. +# __tag__ , __testName__ and __tempdir__ are placeholders for osm rel, testname and tempdir respectively. +# +# $ sed "s|__tag__|$TAG|; s|__testName__|$TEST|; s|__tempdir__|$tempdir|" osmclient-systest.yaml +# +############################################################ + +apiVersion: batch/v1 +kind: Job +metadata: + name: systest-client + labels: + ciStage: stage3 +spec: + containers: + - name: osm-client + image: opensourcemano/osmclient:__tag__ + envFrom: + - secretRef: + name: systest-secret + command: [ "make", "-C", "/usr/share/osm-devops/systest", "__testName__" ] + volumeMounts: + - name: temp-dir + mountPath: /usr/share/osm-devops/systest/reports + restartPolicy: OnFailure + volumes: + - name: temp-dir + hostPath: + path: __tempdir__ -- 2.17.1