iterating on new helm structure for SO 65/34965/3
authorMandeep Khinda <mandeep.khinda@amdocs.com>
Fri, 9 Mar 2018 14:29:37 +0000 (14:29 +0000)
committerMandeep Khinda <mandeep.khinda@amdocs.com>
Fri, 9 Mar 2018 14:54:49 +0000 (14:54 +0000)
with this change we can now do the following:

can deploy umbrella chart with currently working components:
helm install local/onap --name onap --namespace onap-all
helm install local/onap --name onap-2 --namespace onap-all-2 \
--set global.nodePortPrefix=303
- umbrella includes setup chart

can deploy a-la-carte component by component into a single namespace
- Need to deploy a setup chart first. cannot be made a helm dependency
as there will be conflicts if each app chart has the same setup dependency.
helm install local/setup --name onap-setup --namespace onap-apps
helm install local/so --name so1 --namespace onap-apps \
--set global.nodePortPrefix=304

helm list
NAME          REVISION    STATUS      CHART          NAMESPACE
onap          1           DEPLOYED    onap-2.0.0     onap-all
onap-2        1           DEPLOYED    onap-2.0.0     onap-all-2
onap-setup    1           DEPLOYED    setup-2.0.0    onap-apps
so1           1           DEPLOYED    so-2.0.0       onap-apps

Unfortunately, the config maps all have fixed names, so installing
the same app in the a-la-carte fashion will fail due to a collision.
Not worrying about this as I'm not sure we want to support this.

-made the common and setup charts standalone to remove relative file paths
from requirements.yaml
   This will help when there are different levels of subcharts that
need to include common

Issue-ID: OOM-786
Issue-ID: OOM-789
Issue-ID: OOM-788

Change-Id: I20bacae6f0f20e8f3bb1527af1e7e53f187341d5
Signed-off-by: Mandeep Khinda <mandeep.khinda@amdocs.com>
29 files changed:
kubernetes/Makefile
kubernetes/common/.helmignore [moved from kubernetes/common/common-templates/.helmignore with 100% similarity]
kubernetes/common/Chart.yaml [moved from kubernetes/common/common-templates/Chart.yaml with 79% similarity]
kubernetes/common/Makefile [deleted file]
kubernetes/common/templates/_name.tpl [moved from kubernetes/common/common-templates/templates/_name.tpl with 100% similarity]
kubernetes/common/templates/_namespace.tpl [moved from kubernetes/common/common-templates/templates/_namespace.tpl with 74% similarity]
kubernetes/common/values.yaml [moved from kubernetes/common/common-templates/values.yaml with 100% similarity]
kubernetes/onap/requirements.yaml
kubernetes/onap/values.yaml
kubernetes/setup/.helmignore [new file with mode: 0644]
kubernetes/setup/Chart.yaml [new file with mode: 0644]
kubernetes/setup/requirements.yaml [new file with mode: 0644]
kubernetes/setup/templates/clusterrolebinding.yaml [moved from kubernetes/so/charts/mariadb/templates/clusterrolebinding.yaml with 82% similarity]
kubernetes/setup/templates/secrets.yaml [moved from kubernetes/so/templates/secrets.yaml with 79% similarity]
kubernetes/setup/values.yaml [new file with mode: 0644]
kubernetes/so/charts/mariadb/Chart.yaml
kubernetes/so/charts/mariadb/templates/NOTES.txt
kubernetes/so/charts/mariadb/templates/deployment.yaml
kubernetes/so/charts/mariadb/templates/pv.yaml
kubernetes/so/charts/mariadb/templates/pvc.yaml
kubernetes/so/charts/mariadb/templates/secrets.yaml
kubernetes/so/charts/mariadb/templates/service.yaml
kubernetes/so/requirements.yaml
kubernetes/so/templates/NOTES.txt
kubernetes/so/templates/clusterrolebinding.yaml [deleted file]
kubernetes/so/templates/deployment.yaml
kubernetes/so/templates/namespace.yaml [deleted file]
kubernetes/so/templates/service.yaml
kubernetes/so/values.yaml

index 5e83504..4cf9705 100644 (file)
@@ -1,18 +1,26 @@
 PARENT_CHART := onap
 COMMON_CHARTS_DIR := common
-
+SETUP_CHARTS_DIR := setup
 # FIXME OOM-765
 ROOT_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
 OUTPUT_DIR := $(ROOT_DIR)/dist
 PACKAGE_DIR := $(OUTPUT_DIR)/packages
 SECRET_DIR := $(OUTPUT_DIR)/secrets
 
-EXCLUDES := $(COMMON_CHARTS_DIR) config oneclick readiness test dist $(PARENT_CHART) dcae
-HELM_CHARTS := $(COMMON_CHARTS_DIR) $(filter-out $(EXCLUDES), $(patsubst %/.,%,$(wildcard */.))) $(PARENT_CHART)
+EXCLUDES := $(SETUP_CHARTS_DIR) $(COMMON_CHARTS_DIR) config oneclick readiness test dist $(PARENT_CHART) dcae
+HELM_CHARTS := $(filter-out $(EXCLUDES), $(patsubst %/.,%,$(wildcard */.))) $(PARENT_CHART)
 
 .PHONY: $(EXCLUDES) $(HELM_CHARTS)
 
-all: $(HELM_CHARTS)
+all: $(COMMON_CHARTS_DIR) $(SETUP_CHARTS_DIR) $(HELM_CHARTS)
+
+common:
+       @echo "\n[$@]"
+       @make package-$@
+
+setup:
+       @echo "\n[$@]"
+       @make package-$@
 
 $(HELM_CHARTS):
        @echo "\n[$@]"
similarity index 79%
rename from kubernetes/common/common-templates/Chart.yaml
rename to kubernetes/common/Chart.yaml
index 0113575..aed5734 100644 (file)
@@ -1,4 +1,4 @@
 apiVersion: v1
 description: Common templates for inclusion in other charts
-name: common-templates
+name: common
 version: 2.0.0
diff --git a/kubernetes/common/Makefile b/kubernetes/common/Makefile
deleted file mode 100644 (file)
index 1900f31..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-EXCLUDES := test
-HELM_CHARTS := $(filter-out $(EXCLUDES), $(patsubst %/.,%,$(wildcard */.)))
-
-.PHONY: $(EXCLUDES) $(HELM_CHARTS)
-
-all: $(HELM_CHARTS)
-
-$(HELM_CHARTS):
-       @echo "\n[$@]"
-       @make lint-$@
-
-make-%:
-       @if [ -f $*/Makefile ]; then make -C $*; fi
-
-dep-%: make-%
-       @if [ -f $*/requirements.yaml ]; then helm dep up $*; fi
-
-lint-%: dep-%
-       @if [ -f $*/Chart.yaml ]; then helm lint $*; fi
-
-clean:
-       @rm -f */requirements.lock
-       @rm -f *tgz */charts/*tgz
-%:
-       @:
\ No newline at end of file
@@ -4,8 +4,7 @@
   using the following value:
 
   - .Values.nsPrefix  : override namespace prefix
-  - .Values.nsSuffix  : override namespace suffix
 */}}
 {{- define "common.namespace" -}}
-  {{- default .Release.Name .Values.nsPrefix -}}
+  {{- default .Release.Namespace .Values.nsPrefix -}}
 {{- end -}}
index 8f12312..4a3dc3a 100644 (file)
@@ -23,6 +23,9 @@ dependencies:
     version: ~0.1.0
     repository: '@local'
     condition: cli.enabled
+  - name: common
+    version: ~2.0.0
+    repository: '@local'
   - name: consul
     version: ~1.1.0
     repository: '@local'
@@ -79,6 +82,9 @@ dependencies:
     version: ~0.1.0
     repository: '@local'
     condition: sdnc.enabled
+  - name: setup
+    version: ~2.0.0
+    repository: '@local'
   - name: so
     version: ~2.0.0
     repository: '@local'
index 5340c95..a1d901a 100644 (file)
@@ -28,6 +28,7 @@ global:
   # flag to enable debugging - application support required
   debugEnabled: false
 
+
 #################################################################
 # Enable/disable and configure helm charts (ie. applications)
 # to customize the ONAP deployment.
diff --git a/kubernetes/setup/.helmignore b/kubernetes/setup/.helmignore
new file mode 100644 (file)
index 0000000..f0c1319
--- /dev/null
@@ -0,0 +1,21 @@
+# Patterns to ignore when building packages.
+# This supports shell glob matching, relative path matching, and
+# negation (prefixed with !). Only one pattern per line.
+.DS_Store
+# Common VCS dirs
+.git/
+.gitignore
+.bzr/
+.bzrignore
+.hg/
+.hgignore
+.svn/
+# Common backup files
+*.swp
+*.bak
+*.tmp
+*~
+# Various IDEs
+.project
+.idea/
+*.tmproj
diff --git a/kubernetes/setup/Chart.yaml b/kubernetes/setup/Chart.yaml
new file mode 100644 (file)
index 0000000..cface13
--- /dev/null
@@ -0,0 +1,4 @@
+apiVersion: v1
+description: An ONAP environment setup chart
+name: setup
+version: 2.0.0
diff --git a/kubernetes/setup/requirements.yaml b/kubernetes/setup/requirements.yaml
new file mode 100644 (file)
index 0000000..56029ab
--- /dev/null
@@ -0,0 +1,7 @@
+dependencies:
+  - name: common
+    version: ~2.0.0
+    # local reference to common chart, as it is
+    # a part of this chart's package and will not
+    # be published independently to a repo (at this point)
+    repository: '@local'
\ No newline at end of file
@@ -1,8 +1,7 @@
-
 apiVersion: rbac.authorization.k8s.io/v1beta1
 kind: ClusterRoleBinding
 metadata:
-  name: {{ include "common.name" . }}
+  name: {{ include "common.namespace" . }}-binding
   namespace: {{ include "common.namespace" . }}
   labels:
     app: {{ include "common.name" . }}
similarity index 79%
rename from kubernetes/so/templates/secrets.yaml
rename to kubernetes/setup/templates/secrets.yaml
index 269d406..573883a 100644 (file)
@@ -1,7 +1,7 @@
 apiVersion: v1
 kind: Secret
 metadata:
-  name: {{ include "common.name" . }}-docker-registry-key
+  name: {{ include "common.namespace" . }}-docker-registry-key
   namespace: {{ include "common.namespace" . }}
   labels:
     app: {{ include "common.name" . }}
diff --git a/kubernetes/setup/values.yaml b/kubernetes/setup/values.yaml
new file mode 100644 (file)
index 0000000..49ec058
--- /dev/null
@@ -0,0 +1,4 @@
+global:
+  # image repositories
+  repository: nexus3.onap.org:10001
+  repositorySecret: eyJuZXh1czMub25hcC5vcmc6MTAwMDEiOnsidXNlcm5hbWUiOiJkb2NrZXIiLCJwYXNzd29yZCI6ImRvY2tlciIsImVtYWlsIjoiQCIsImF1dGgiOiJaRzlqYTJWeU9tUnZZMnRsY2c9PSJ9fQ==
index 1b3b5ff..da9cab3 100644 (file)
@@ -1,4 +1,4 @@
 apiVersion: v1
 description: MariaDB Service
-name: so-mariadb
+name: mariadb
 version: 2.0.0
index 87565ad..c60c745 100644 (file)
@@ -4,16 +4,16 @@
   http://{{ . }}
 {{- end }}
 {{- else if contains "NodePort" .Values.service.type }}
-  export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "common.name" . }})
-  export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
+  export NODE_PORT=$(kubectl get --namespace {{ include "common.namespace" . }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "common.name" . }})
+  export NODE_IP=$(kubectl get nodes --namespace {{ include "common.namespace" . }} -o jsonpath="{.items[0].status.addresses[0].address}")
   echo http://$NODE_IP:$NODE_PORT
 {{- else if contains "LoadBalancer" .Values.service.type }}
      NOTE: It may take a few minutes for the LoadBalancer IP to be available.
            You can watch the status of by running 'kubectl get svc -w {{ include "common.name" . }}'
-  export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "common.name" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
+  export SERVICE_IP=$(kubectl get svc --namespace {{ include "common.namespace" . }} {{ include "common.name" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
   echo http://$SERVICE_IP:{{ .Values.service.externalPort }}
 {{- else if contains "ClusterIP" .Values.service.type }}
-  export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ include "common.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
+  export POD_NAME=$(kubectl get pods --namespace {{ include "common.namespace" . }} -l "app={{ include "common.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
   echo "Visit http://127.0.0.1:8080 to use your application"
   kubectl port-forward $POD_NAME 8080:{{ .Values.service.internalPort }}
 {{- end }}
index 9c9cf09..3d0cd81 100644 (file)
@@ -1,7 +1,7 @@
 apiVersion: extensions/v1beta1
 kind: Deployment
 metadata:
-  name: {{ include "common.name" . }}
+  name: {{ include "common.fullname" . }}
   namespace: {{ include "common.namespace" . }}
   labels:
     app: {{ include "common.name" . }}
@@ -41,7 +41,7 @@ spec:
             - name: MYSQL_ROOT_PASSWORD
               valueFrom:
                 secretKeyRef:
-                  name: {{ template "common.name" . }}
+                  name: {{ template "common.fullname" . }}
                   key: db-root-password
           volumeMounts:
           - mountPath: /var/lib/mysql
@@ -83,7 +83,7 @@ spec:
       {{- if .Values.persistence.enabled }}
         - name: mariadb-data
           persistentVolumeClaim:
-            claimName: {{ include "common.name" . }}
+            claimName: {{ include "common.fullname" . }}
       {{- else }}
           emptyDir: {}
       {{- end }}
@@ -115,4 +115,4 @@ spec:
           hostPath:
             path: /etc/localtime
       imagePullSecrets:
-      - name: "{{ include "common.name" . }}-docker-registry-key"
+      - name: "{{ include "common.namespace" . }}-docker-registry-key"
index d60e075..27343e3 100644 (file)
@@ -2,7 +2,7 @@
 kind: PersistentVolume
 apiVersion: v1
 metadata:
-  name: {{ include "common.name" . }}
+  name: {{ include "common.fullname" . }}
   namespace: {{ include "common.namespace" . }}
   labels:
     app: {{ include "common.name" . }}
index 2271d3c..faff46c 100644 (file)
@@ -2,7 +2,7 @@
 kind: PersistentVolumeClaim
 apiVersion: v1
 metadata:
-  name: {{ include "common.name" . }}
+  name: {{ include "common.fullname" . }}
   namespace: {{ include "common.namespace" . }}
   labels:
     app: {{ include "common.name" . }}
index dc97610..b96d720 100644 (file)
@@ -1,7 +1,7 @@
 apiVersion: v1
 kind: Secret
 metadata:
-  name: {{ include "common.name" . }}
+  name: {{ include "common.fullname" . }}
   namespace: {{ include "common.namespace" . }}
   labels:
     app: {{ include "common.name" . }}
@@ -11,17 +11,3 @@ metadata:
 type: Opaque
 data:
   db-root-password: {{ .Values.config.mariadbRootPassword | b64enc | quote }}
----
-apiVersion: v1
-kind: Secret
-metadata:
-  name: {{ include "common.name" . }}-docker-registry-key
-  namespace: {{ include "common.namespace" . }}
-  labels:
-    app: {{ include "common.name" . }}
-    chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
-    release: {{ .Release.Name }}
-    heritage: {{ .Release.Service }}
-data:
-  .dockercfg: {{ .Values.global.repositorySecret | default .Values.repositorySecret }}
-type: kubernetes.io/dockercfg
\ No newline at end of file
index 5c133b7..0a040bc 100644 (file)
@@ -1,7 +1,7 @@
 apiVersion: v1
 kind: Service
 metadata:
-  name: {{ include "common.name" . }}
+  name: {{ include "common.fullname" . }}
   namespace: {{ include "common.namespace" . }}
   labels:
     app: {{ include "common.name" . }}
index fb8f1f6..56029ab 100644 (file)
@@ -1,7 +1,7 @@
 dependencies:
-  - name: common-templates
+  - name: common
     version: ~2.0.0
     # local reference to common chart, as it is
     # a part of this chart's package and will not
     # be published independently to a repo (at this point)
-    repository: file://../common/common-templates
\ No newline at end of file
+    repository: '@local'
\ No newline at end of file
index 0fa17a6..91d8ed4 100644 (file)
@@ -4,16 +4,16 @@
   http://{{ . }}
 {{- end }}
 {{- else if contains "NodePort" .Values.service.type }}
-  export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "common.name" . }})
-  export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
+  export NODE_PORT=$(kubectl get --namespace {{ include "common.namespace" . }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "common.name" . }})
+  export NODE_IP=$(kubectl get nodes --namespace {{ include "common.namespace" . }} -o jsonpath="{.items[0].status.addresses[0].address}")
   echo http://$NODE_IP:$NODE_PORT
 {{- else if contains "LoadBalancer" .Values.service.type }}
      NOTE: It may take a few minutes for the LoadBalancer IP to be available.
            You can watch the status of by running 'kubectl get svc -w {{ include "common.name" . }}'
-  export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "common.name" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
+  export SERVICE_IP=$(kubectl get svc --namespace {{ include "common.namespace" . }} {{ include "common.name" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
   echo http://$SERVICE_IP:{{ .Values.service.externalPort }}
 {{- else if contains "ClusterIP" .Values.service.type }}
-  export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "so.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
+  export POD_NAME=$(kubectl get pods --namespace {{ include "common.namespace" . }} -l "app={{ template "so.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
   echo "Visit http://127.0.0.1:8080 to use your application"
   kubectl port-forward $POD_NAME 8080:{{ .Values.service.internalPort }}
 {{- end }}
diff --git a/kubernetes/so/templates/clusterrolebinding.yaml b/kubernetes/so/templates/clusterrolebinding.yaml
deleted file mode 100644 (file)
index df270f5..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-
-apiVersion: rbac.authorization.k8s.io/v1beta1
-kind: ClusterRoleBinding
-metadata:
-  name: {{ include "common.name" . }}
-  namespace: {{ include "common.namespace" . }}
-  labels:
-    app: {{ include "common.name" . }}
-    chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
-    release: {{ .Release.Name }}
-    heritage: {{ .Release.Service }}
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: ClusterRole
-  name: cluster-admin
-subjects:
-  - kind: ServiceAccount
-    name: default
-    namespace: {{ include "common.namespace" . }}
\ No newline at end of file
index 2d25a46..b66de44 100644 (file)
@@ -1,7 +1,7 @@
 apiVersion: extensions/v1beta1
 kind: Deployment
 metadata:
-  name: {{ include "common.name" . }}
+  name: {{ include "common.fullname" . }}
   namespace: {{ include "common.namespace" . }}
   labels:
     app: {{ include "common.name" . }}
@@ -21,7 +21,7 @@ spec:
         - /root/ready.py
         args:
         - --container-name
-        - so-mariadb
+        - mariadb
         env:
         - name: NAMESPACE
           valueFrom:
@@ -174,4 +174,4 @@ spec:
               path: start-jboss-server.sh
               mode: 0755
       imagePullSecrets:
-      - name: "{{ include "common.name" . }}-docker-registry-key"
+      - name: "{{ include "common.namespace" . }}-docker-registry-key"
diff --git a/kubernetes/so/templates/namespace.yaml b/kubernetes/so/templates/namespace.yaml
deleted file mode 100644 (file)
index 83eb8e7..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-apiVersion: v1
-kind: Namespace
-metadata:
-  name: {{ include "common.namespace" . }}
\ No newline at end of file
index f1b5322..e3e4d48 100644 (file)
@@ -1,7 +1,7 @@
 apiVersion: v1
 kind: Service
 metadata:
-  name: {{ include "common.name" . }}
+  name: {{ include "common.fullname" . }}
   namespace: {{ include "common.namespace" . }}
   labels:
     app: {{ include "common.name" . }}
index b929fcc..4700bb6 100644 (file)
@@ -9,6 +9,8 @@ global: # global defaults
   loggingRepository: docker.elastic.co
   loggingImage: beats/filebeat:5.5.0
 
+subChartsOnly:
+  enabled: true
 
 # application image
 repository: nexus3.onap.org:10001