From 7db71adaf139e54f2186cfd19d468f5a1123835d Mon Sep 17 00:00:00 2001 From: Michal Jagiello Date: Fri, 16 Jul 2021 20:38:55 +0000 Subject: Refactor cds-mockserver helm chart I did some changes to run that helm chart in integration tests using multicloud-k8s. * I renamed helm/ directory into cds-mockserver/ based on "helm lint" * I changed Deployment apiVersion to "apps/v1" due to "extensions/v1beta1" deprecation [1] * I added "selector" into Deployment because it's required for "apps/v1" version [2] Add missing .coafile, .yamllint and tox.ini files [1] https://kubernetes.io/blog/2019/07/18/api-deprecations-in-1-16/ [2] https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#label-selector-updates Signed-off-by: Michal Jagiello Issue-ID: TEST-291 Change-Id: Ibe1fc564f3db9933071a9374d0c583724fbcf08d --- .coafile | 5 ++ .yamllint | 16 +++++ cds-mockserver/Chart.yaml | 4 ++ cds-mockserver/templates/_templates.tpl | 107 +++++++++++++++++++++++++++++++ cds-mockserver/templates/deployment.yaml | 46 +++++++++++++ cds-mockserver/templates/service.yaml | 39 +++++++++++ cds-mockserver/values.yaml | 29 +++++++++ helm/Chart.yaml | 4 -- helm/templates/_templates.tpl | 107 ------------------------------- helm/templates/deployment.yaml | 43 ------------- helm/templates/service.yaml | 39 ----------- helm/values.yaml | 29 --------- tox.ini | 22 +++++++ 13 files changed, 268 insertions(+), 222 deletions(-) create mode 100644 .coafile create mode 100644 .yamllint create mode 100644 cds-mockserver/Chart.yaml create mode 100644 cds-mockserver/templates/_templates.tpl create mode 100644 cds-mockserver/templates/deployment.yaml create mode 100644 cds-mockserver/templates/service.yaml create mode 100644 cds-mockserver/values.yaml delete mode 100644 helm/Chart.yaml delete mode 100644 helm/templates/_templates.tpl delete mode 100644 helm/templates/deployment.yaml delete mode 100644 helm/templates/service.yaml delete mode 100644 helm/values.yaml create mode 100644 tox.ini diff --git a/.coafile b/.coafile new file mode 100644 index 0000000..51f6028 --- /dev/null +++ b/.coafile @@ -0,0 +1,5 @@ +[yaml] +bears = YAMLLintBear +yamllint_config = .yamllint +ignore = + .tox/**, diff --git a/.yamllint b/.yamllint new file mode 100644 index 0000000..ab5bdc3 --- /dev/null +++ b/.yamllint @@ -0,0 +1,16 @@ +--- + +extends: default + +rules: + line-length: disable + truthy: disable + braces: + max-spaces-inside: 1 + brackets: + max-spaces-inside: 1 + comments-indentation: disable + comments: disable + document-start: disable + indentation: + indent-sequences: whatever diff --git a/cds-mockserver/Chart.yaml b/cds-mockserver/Chart.yaml new file mode 100644 index 0000000..299359e --- /dev/null +++ b/cds-mockserver/Chart.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +description: Mockserver for testing CDS REST capabilities +name: cds-mockserver +version: 1.0.0 diff --git a/cds-mockserver/templates/_templates.tpl b/cds-mockserver/templates/_templates.tpl new file mode 100644 index 0000000..3e92baf --- /dev/null +++ b/cds-mockserver/templates/_templates.tpl @@ -0,0 +1,107 @@ +{{/* +# Copyright (c) 2020 Bell Canada +# +# 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. +*/}} + +{{- define "common.namespace" -}} + {{- default .Release.Namespace .Values.nsPrefix -}} +{{- end -}} + + +{{/* + Expand the name of a chart. + The function takes from one to two arguments (inside a dictionary): + - .dot : environment (.) + - .suffix : add a suffix to the name +*/}} +{{- define "common.name" -}} + {{- $dot := default . .dot -}} + {{- $suffix := .suffix -}} + {{- default $dot.Chart.Name $dot.Values.nameOverride | trunc 63 | trimSuffix "-" -}}{{ if $suffix }}{{ print "-" $suffix }}{{ end }} +{{- end -}} + +{{/* + The same as common.full name but based on passed dictionary instead of trying to figure + out chart name on its own. +*/}} +{{- define "common.fullnameExplicit" -}} + {{- $dot := .dot }} + {{- $name := .chartName }} + {{- $suffix := default "" .suffix -}} + {{- printf "%s-%s-%s" (include "common.release" $dot) $name $suffix | trunc 63 | trimSuffix "-" | trimSuffix "-" -}} +{{- end -}} + +{{/* + Create a default fully qualified application name. + Truncated at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). + Usage: + include "common.fullname" . + include "common.fullname" (dict "suffix" "mySuffix" "dot" .) + The function takes from one to two arguments: + - .dot : environment (.) + - .suffix : add a suffix to the fullname +*/}} +{{- define "common.fullname" -}} +{{- $dot := default . .dot -}} +{{- $suffix := default "" .suffix -}} + {{- $name := default $dot.Chart.Name $dot.Values.nameOverride -}} + {{- include "common.fullnameExplicit" (dict "dot" $dot "chartName" $name "suffix" $suffix) }} +{{- end -}} + +{{/* + Retrieve the "original" release from the component release: + if ONAP is deploy with "helm deploy --name toto", then cassandra components + will have "toto-cassandra" as release name. + this function would answer back "toto". +*/}} +{{- define "common.release" -}} + {{- first (regexSplit "-" .Release.Name -1) }} +{{- end -}} + +{{- define "common.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* + Resolve the name of the common image repository. + The value for .Values.repository is used by default, + unless either override mechanism is used. + + - .Values.global.repository : override default image repository for all images + - .Values.repositoryOverride : override global and default image repository on a per image basis +*/}} +{{- define "common.repository" -}} + {{if .Values.repositoryOverride }} + {{- printf "%s" .Values.repositoryOverride -}} + {{else}} + {{- default .Values.repository .Values.global.repository -}} + {{end}} +{{- end -}} + +{{/* + Resolve the name of a chart's service. + + The default will be the chart name (or .Values.nameOverride if set). + And the use of .Values.service.name overrides all. + + - .Values.service.name: override default service (ie. chart) name +*/}} +{{/* + Expand the service name for a chart. +*/}} +{{- define "common.servicename" -}} + {{- $name := default .Chart.Name .Values.nameOverride -}} + {{- default $name .Values.service.name | trunc 63 | trimSuffix "-" -}} +{{- end -}} + diff --git a/cds-mockserver/templates/deployment.yaml b/cds-mockserver/templates/deployment.yaml new file mode 100644 index 0000000..11b9947 --- /dev/null +++ b/cds-mockserver/templates/deployment.yaml @@ -0,0 +1,46 @@ +# Copyright (c) 2020 Bell Canada +# +# 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: apps/v1 +kind: Deployment +metadata: + name: {{ include "common.fullname" . }} + namespace: {{ include "common.namespace" . }} + labels: + app: {{ include "common.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + release: {{ include "common.release" . }} + heritage: {{ .Release.Service }} +spec: + selector: + matchLabels: + app: {{ include "common.name" . }} + replicas: {{ .Values.replicaCount }} + strategy: + type: RollingUpdate + rollingUpdate: + maxUnavailable: 0 + template: + metadata: + labels: + app: {{ include "common.name" . }} + release: {{ include "common.release" . }} + spec: + containers: + - name: {{ include "common.name" . }} + terminationGracePeriodSeconds: {{ .Values.terminationGracePeriodSeconds | default 10 }} + image: "{{ include "common.repository" . }}/{{ .Values.image }}" + imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }} + ports: + - containerPort: {{ .Values.service.mockserver.internalPort }} diff --git a/cds-mockserver/templates/service.yaml b/cds-mockserver/templates/service.yaml new file mode 100644 index 0000000..5701aca --- /dev/null +++ b/cds-mockserver/templates/service.yaml @@ -0,0 +1,39 @@ +# Copyright (c) 2020 Bell Canada +# +# 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: {{ .Values.service.mockserver.portName }} + namespace: {{ include "common.namespace" . }} + labels: + app: {{ include "common.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + release: {{ include "common.release" . }} + heritage: {{ .Release.Service }} + annotations: +spec: + type: {{ .Values.service.mockserver.type }} + ports: + - port: {{ .Values.service.mockserver.port }} + protocol: TCP + targetPort: {{ .Values.service.mockserver.internalPort }} + {{- if eq .Values.service.mockserver.type "NodePort"}} + nodePort: {{ .Values.global.nodePortPrefix | default .Values.nodePortPrefix }}{{ .Values.service.nodePort }} + {{- end}} + name: {{ .Values.service.mockserver.portName | default "mockserver" }} + selector: + app: {{ include "common.name" . }} + release: {{ include "common.release" . }} + diff --git a/cds-mockserver/values.yaml b/cds-mockserver/values.yaml new file mode 100644 index 0000000..8418963 --- /dev/null +++ b/cds-mockserver/values.yaml @@ -0,0 +1,29 @@ +# Copyright (c) 2020 Bell Canada +# +# 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. + +image: mockserver/mockserver + +global: + name: cds-regression-mockserver + repository: nexus3.onap.org:10001 + pullPolicy: Always + replicas: 1 + terminationGracePeriodSeconds: 10 + +service: + mockserver: + type: ClusterIP + portName: cds-regression-mockserver + port: 80 + internalPort: 1080 diff --git a/helm/Chart.yaml b/helm/Chart.yaml deleted file mode 100644 index 299359e..0000000 --- a/helm/Chart.yaml +++ /dev/null @@ -1,4 +0,0 @@ -apiVersion: v1 -description: Mockserver for testing CDS REST capabilities -name: cds-mockserver -version: 1.0.0 diff --git a/helm/templates/_templates.tpl b/helm/templates/_templates.tpl deleted file mode 100644 index 3e92baf..0000000 --- a/helm/templates/_templates.tpl +++ /dev/null @@ -1,107 +0,0 @@ -{{/* -# Copyright (c) 2020 Bell Canada -# -# 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. -*/}} - -{{- define "common.namespace" -}} - {{- default .Release.Namespace .Values.nsPrefix -}} -{{- end -}} - - -{{/* - Expand the name of a chart. - The function takes from one to two arguments (inside a dictionary): - - .dot : environment (.) - - .suffix : add a suffix to the name -*/}} -{{- define "common.name" -}} - {{- $dot := default . .dot -}} - {{- $suffix := .suffix -}} - {{- default $dot.Chart.Name $dot.Values.nameOverride | trunc 63 | trimSuffix "-" -}}{{ if $suffix }}{{ print "-" $suffix }}{{ end }} -{{- end -}} - -{{/* - The same as common.full name but based on passed dictionary instead of trying to figure - out chart name on its own. -*/}} -{{- define "common.fullnameExplicit" -}} - {{- $dot := .dot }} - {{- $name := .chartName }} - {{- $suffix := default "" .suffix -}} - {{- printf "%s-%s-%s" (include "common.release" $dot) $name $suffix | trunc 63 | trimSuffix "-" | trimSuffix "-" -}} -{{- end -}} - -{{/* - Create a default fully qualified application name. - Truncated at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). - Usage: - include "common.fullname" . - include "common.fullname" (dict "suffix" "mySuffix" "dot" .) - The function takes from one to two arguments: - - .dot : environment (.) - - .suffix : add a suffix to the fullname -*/}} -{{- define "common.fullname" -}} -{{- $dot := default . .dot -}} -{{- $suffix := default "" .suffix -}} - {{- $name := default $dot.Chart.Name $dot.Values.nameOverride -}} - {{- include "common.fullnameExplicit" (dict "dot" $dot "chartName" $name "suffix" $suffix) }} -{{- end -}} - -{{/* - Retrieve the "original" release from the component release: - if ONAP is deploy with "helm deploy --name toto", then cassandra components - will have "toto-cassandra" as release name. - this function would answer back "toto". -*/}} -{{- define "common.release" -}} - {{- first (regexSplit "-" .Release.Name -1) }} -{{- end -}} - -{{- define "common.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} -{{- end -}} - -{{/* - Resolve the name of the common image repository. - The value for .Values.repository is used by default, - unless either override mechanism is used. - - - .Values.global.repository : override default image repository for all images - - .Values.repositoryOverride : override global and default image repository on a per image basis -*/}} -{{- define "common.repository" -}} - {{if .Values.repositoryOverride }} - {{- printf "%s" .Values.repositoryOverride -}} - {{else}} - {{- default .Values.repository .Values.global.repository -}} - {{end}} -{{- end -}} - -{{/* - Resolve the name of a chart's service. - - The default will be the chart name (or .Values.nameOverride if set). - And the use of .Values.service.name overrides all. - - - .Values.service.name: override default service (ie. chart) name -*/}} -{{/* - Expand the service name for a chart. -*/}} -{{- define "common.servicename" -}} - {{- $name := default .Chart.Name .Values.nameOverride -}} - {{- default $name .Values.service.name | trunc 63 | trimSuffix "-" -}} -{{- end -}} - diff --git a/helm/templates/deployment.yaml b/helm/templates/deployment.yaml deleted file mode 100644 index 95a83dd..0000000 --- a/helm/templates/deployment.yaml +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright (c) 2020 Bell Canada -# -# 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: extensions/v1beta1 -kind: Deployment -metadata: - name: {{ include "common.fullname" . }} - namespace: {{ include "common.namespace" . }} - labels: - app: {{ include "common.name" . }} - chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} - release: {{ include "common.release" . }} - heritage: {{ .Release.Service }} -spec: - replicas: {{ .Values.replicaCount }} - strategy: - type: RollingUpdate - rollingUpdate: - maxUnavailable: 0 - template: - metadata: - labels: - app: {{ include "common.name" . }} - release: {{ include "common.release" . }} - spec: - containers: - - name: {{ include "common.name" . }} - terminationGracePeriodSeconds: {{ .Values.terminationGracePeriodSeconds | default 10 }} - image: "{{ include "common.repository" . }}/{{ .Values.image }}" - imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }} - ports: - - containerPort: {{ .Values.service.mockserver.internalPort }} diff --git a/helm/templates/service.yaml b/helm/templates/service.yaml deleted file mode 100644 index 5701aca..0000000 --- a/helm/templates/service.yaml +++ /dev/null @@ -1,39 +0,0 @@ -# Copyright (c) 2020 Bell Canada -# -# 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: {{ .Values.service.mockserver.portName }} - namespace: {{ include "common.namespace" . }} - labels: - app: {{ include "common.name" . }} - chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} - release: {{ include "common.release" . }} - heritage: {{ .Release.Service }} - annotations: -spec: - type: {{ .Values.service.mockserver.type }} - ports: - - port: {{ .Values.service.mockserver.port }} - protocol: TCP - targetPort: {{ .Values.service.mockserver.internalPort }} - {{- if eq .Values.service.mockserver.type "NodePort"}} - nodePort: {{ .Values.global.nodePortPrefix | default .Values.nodePortPrefix }}{{ .Values.service.nodePort }} - {{- end}} - name: {{ .Values.service.mockserver.portName | default "mockserver" }} - selector: - app: {{ include "common.name" . }} - release: {{ include "common.release" . }} - diff --git a/helm/values.yaml b/helm/values.yaml deleted file mode 100644 index 8418963..0000000 --- a/helm/values.yaml +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (c) 2020 Bell Canada -# -# 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. - -image: mockserver/mockserver - -global: - name: cds-regression-mockserver - repository: nexus3.onap.org:10001 - pullPolicy: Always - replicas: 1 - terminationGracePeriodSeconds: 10 - -service: - mockserver: - type: ClusterIP - portName: cds-regression-mockserver - port: 80 - internalPort: 1080 diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..5c1461f --- /dev/null +++ b/tox.ini @@ -0,0 +1,22 @@ +[tox] +minversion = 3.2.0 +envlist = yaml +skipsdist = true +requires = pip >= 8 + +[testenv] +basepython = python3 +whitelist_externals = + git + bash +deps = + coala-bears + nodeenv + +[testenv:yaml] +commands_pre = + /bin/sh -c "git --no-pager diff HEAD HEAD^ --name-only '*.yaml' '*.yml' > /tmp/.coalist_yaml" +commands = +# '\ ' at the end of command is needed for a case where above command returns empty list (it adds empty file +# parameter to '--files' opt + /bin/bash -c "coala --non-interactive --disable-caching --no-autoapply-warn yaml --files $(