--- /dev/null
+# Copyright 2020 Minsait - Indra S.A.
+#
+# 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: Jose Manuel Palacios (jmpalacios@minsait.com)
+# Author: Alberto Limon (alimonj@minsait.com)
+
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ labels:
+ app: grafana
+ name: grafana-clusterrole
+rules:
+- apiGroups:
+ - ""
+ resources:
+ - configmaps
+ - secrets
+ verbs:
+ - get
+ - watch
+ - list
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ labels:
+ app: grafana
+ name: grafana-clusterrolebinding
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: grafana-clusterrole
+subjects:
+- kind: ServiceAccount
+ name: grafana
+ namespace: osm
+---
+apiVersion: v1
+data:
+ admin-password: YWRtaW4=
+ admin-user: YWRtaW4=
+kind: Secret
+metadata:
+ labels:
+ app: grafana
+ name: grafana
+type: Opaque
+---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ labels:
+ app: grafana
+ name: grafana
+---
+apiVersion: v1
+data:
+ provider.yaml: |-
+ apiVersion: 1
+ providers:
+ - name: 'Kubernetes Cluster'
+ orgId: 1
+ folder: 'Kubernetes Cluster'
+ type: file
+ disableDeletion: false
+ options:
+ path: '/tmp/dashboards/Kubernetes Cluster'
+ - name: 'Open Source MANO'
+ orgId: 1
+ folder: 'Open Source MANO'
+ type: file
+ disableDeletion: false
+ options:
+ path: '/tmp/dashboards/Open Source MANO'
+kind: ConfigMap
+metadata:
+ labels:
+ app: grafana
+ name: grafana-dashboard-provider
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ labels:
+ grafana_datasource: "1"
+ name: grafana-datasource
+data:
+ datasource.yaml: |-
+ apiVersion: 1
+ datasources:
+ - name: osm_prometheus
+ type: prometheus
+ url: http://prometheus:9090
+ access: proxy
+ allowUiUpdates: true
+ isDefault: true
+ - name: Prometheus
+ type: prometheus
+ url: http://osm-monitoring-prometheus-prometheus.monitoring:9090
+ access: proxy
+ allowUiUpdates: true
+ isDefault: false
+---
+apiVersion: v1
+data:
+ grafana.ini: |
+ [log]
+ mode = console
+ [paths]
+ data = /var/lib/grafana/data
+ logs = /var/log/grafana
+ plugins = /var/lib/grafana/plugins
+ provisioning = /etc/grafana/provisioning
+kind: ConfigMap
+metadata:
+ labels:
+ app: grafana
+ name: grafana
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ labels:
+ app: grafana
+ name: grafana
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ app: grafana
+ template:
+ metadata:
+ labels:
+ app: grafana
+ spec:
+ containers:
+ - env:
+ - name: LABEL
+ value: grafana_dashboard
+ - name: FOLDER
+ value: "/tmp/dashboards/Kubernetes Cluster"
+ - name: RESOURCE
+ value: both
+ - name: NAMESPACE
+ value: monitoring
+ image: kiwigrid/k8s-sidecar:0.1.20
+ imagePullPolicy: IfNotPresent
+ name: grafana-sc-dashboard
+ resources: {}
+ terminationMessagePath: /dev/termination-log
+ terminationMessagePolicy: File
+ volumeMounts:
+ - mountPath: "/tmp/dashboards/Kubernetes Cluster"
+ name: sc-dashboard-volume-k8s
+ - mountPath: "/tmp/dashboards/Open Source MANO"
+ name: sc-dashboard-volume-osm
+ - env:
+ - name: GF_SECURITY_ADMIN_USER
+ valueFrom:
+ secretKeyRef:
+ key: admin-user
+ name: grafana
+ - name: GF_SECURITY_ADMIN_PASSWORD
+ valueFrom:
+ secretKeyRef:
+ key: admin-password
+ name: grafana
+ image: grafana/grafana:6.3.5
+ imagePullPolicy: IfNotPresent
+ livenessProbe:
+ failureThreshold: 10
+ httpGet:
+ path: /api/health
+ port: 3000
+ scheme: HTTP
+ initialDelaySeconds: 60
+ periodSeconds: 10
+ successThreshold: 1
+ timeoutSeconds: 30
+ name: grafana
+ ports:
+ - containerPort: 80
+ name: service
+ protocol: TCP
+ - containerPort: 3000
+ name: grafana
+ protocol: TCP
+ readinessProbe:
+ failureThreshold: 3
+ httpGet:
+ path: /api/health
+ port: 3000
+ scheme: HTTP
+ periodSeconds: 10
+ successThreshold: 1
+ timeoutSeconds: 1
+ resources: {}
+ terminationMessagePath: /dev/termination-log
+ terminationMessagePolicy: File
+ volumeMounts:
+ - mountPath: /etc/grafana/grafana.ini
+ name: config
+ subPath: grafana.ini
+ - mountPath: /var/lib/grafana
+ name: storage
+ - mountPath: "/tmp/dashboards/Kubernetes Cluster"
+ name: sc-dashboard-volume-k8s
+ - mountPath: "/tmp/dashboards/Open Source MANO"
+ name: sc-dashboard-volume-osm
+ - mountPath: /etc/grafana/provisioning/dashboards/sc-dashboardproviders.yaml
+ name: sc-dashboard-provider
+ subPath: provider.yaml
+ - mountPath: /etc/grafana/provisioning/datasources
+ name: sc-datasources-volume
+ dnsPolicy: ClusterFirst
+ initContainers:
+ - env:
+ - name: METHOD
+ value: LIST
+ - name: LABEL
+ value: grafana_datasource
+ - name: FOLDER
+ value: /etc/grafana/provisioning/datasources
+ - name: RESOURCE
+ value: both
+ image: kiwigrid/k8s-sidecar:0.1.20
+ imagePullPolicy: IfNotPresent
+ name: grafana-sc-datasources
+ resources: {}
+ terminationMessagePath: /dev/termination-log
+ terminationMessagePolicy: File
+ volumeMounts:
+ - mountPath: /etc/grafana/provisioning/datasources
+ name: sc-datasources-volume
+ restartPolicy: Always
+ schedulerName: default-scheduler
+ securityContext:
+ fsGroup: 472
+ runAsUser: 472
+ serviceAccount: grafana
+ serviceAccountName: grafana
+ terminationGracePeriodSeconds: 30
+ volumes:
+ - configMap:
+ defaultMode: 420
+ name: grafana
+ name: config
+ - emptyDir: {}
+ name: storage
+ - emptyDir: {}
+ name: sc-dashboard-volume-k8s
+ - emptyDir: {}
+ name: sc-dashboard-volume-osm
+ - configMap:
+ defaultMode: 420
+ name: grafana-dashboard-provider
+ name: sc-dashboard-provider
+ - emptyDir: {}
+ name: sc-datasources-volume
+---
+apiVersion: v1
+kind: Service
+metadata:
+ labels:
+ app: grafana
+ name: grafana
+spec:
+ ports:
+ - name: service
+ nodePort: 3000
+ port: 3000
+ protocol: TCP
+ targetPort: 3000
+ selector:
+ app: grafana
+ sessionAffinity: None
+ type: NodePort
echo -e " --elk_stack: additionally deploy an ELK docker stack for event logging"
echo -e " --pla: install the PLA module for placement support"
echo -e " -m <MODULE>: install OSM but only rebuild the specified docker images (LW-UI, NBI, LCM, RO, MON, POL, KAFKA, MONGO, PROMETHEUS, PROMETHEUS-CADVISOR, KEYSTONE-DB, PLA, NONE)"
- echo -e " -o <ADDON>: ONLY (un)installs one of the addons (vimemu, elk_stack)"
+ echo -e " -o <ADDON>: ONLY (un)installs one of the addons (vimemu, elk_stack, k8s_monitor)"
echo -e " -D <devops path> use local devops installation path"
echo -e " -w <work dir> Location to store runtime installation"
echo -e " -t <docker tag> specify osm docker tag (default is latest)"
echo -e " --source: install OSM from source code using the latest stable tag"
echo -e " --develop: (deprecated, use '-b master') install OSM from source code using the master branch"
echo -e " --pullimages: pull/run osm images from docker.io/opensourcemano"
- echo -e " --k8s_monitor: install the OSM kubernetes moitoring with prometheus and grafana"
+ echo -e " --k8s_monitor: install the OSM kubernetes monitoring with prometheus and grafana"
# echo -e " --reconfigure: reconfigure the modules (DO NOT change NAT rules)"
# echo -e " --update: update to the latest stable release or to the latest commit if using a specific branch"
echo -e " --showopts: print chosen options and exit (only for debugging)"
kubectl delete ns $1
}
+#removes helm only if there is nothing deployed in helm
+function remove_helm() {
+ if [ "$(helm ls -q)" == "" ] ; then
+ sudo helm reset --force
+ kubectl delete --namespace kube-system serviceaccount tiller
+ kubectl delete clusterrolebinding tiller-cluster-rule
+ sudo rm /usr/local/bin/helm
+ rm -rf $HOME/.helm
+ fi
+}
+
#Uninstall osmclient
function uninstall_osmclient() {
sudo apt-get remove --purge -y python-osmclient
kubectl apply -n $OSM_STACK_NAME -f $OSM_DOCKER_WORK_DIR/osm_pla
}
+#Install helm and tiller
+function install_helm() {
+ helm > /dev/null 2>&1
+ if [ $? != 0 ] ; then
+ # Helm is not installed. Install helm
+ curl https://get.helm.sh/helm-v2.15.2-linux-amd64.tar.gz --output helm-v2.15.2.tar.gz
+ tar -zxvf helm-v2.15.2.tar.gz
+ sudo mv linux-amd64/helm /usr/local/bin/helm
+ rm -r linux-amd64
+ rm helm-v2.15.2.tar.gz
+ fi
+
+ # Checking if tiller has being configured
+ kubectl --namespace kube-system get serviceaccount tiller > /dev/null 2>&1
+ if [ $? == 1 ] ; then
+ # tiller account for kubernetes
+ kubectl --namespace kube-system create serviceaccount tiller
+ kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
+ # HELM initialization
+ helm init --service-account tiller
+
+ # Wait for Tiller to be up and running. If timeout expires, continue installing
+ tiller_timeout=120; counter=0
+ while (( counter < tiller_timeout ))
+ do
+ tiller_status=`kubectl -n kube-system get deployment.apps/tiller-deploy --no-headers | awk '{print $2'}`
+ ( [ ! -z "$tiller_status" ] && [ $tiller_status == "1/1" ] ) && break
+ num=$((counter + 2))
+ sleep 2
+ done
+ fi
+}
+
function parse_yaml() {
osm_services="nbi lcm ro pol mon light-ui keystone"
TAG=$1
track end
echo -e "\nDONE"
+