diff --git a/ceph-rgw/templates/bin/_helm-tests.sh.tpl b/ceph-rgw/templates/bin/_helm-tests.sh.tpl new file mode 100644 index 000000000..ca022872a --- /dev/null +++ b/ceph-rgw/templates/bin/_helm-tests.sh.tpl @@ -0,0 +1,32 @@ +#!/bin/bash + +{{/* +Copyright 2017 The Openstack-Helm Authors. + +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. +*/}} +set -ex + +function rgw_replicas_validation() +{ + available_rgw_count=$(ceph -s -f json-pretty | jq '.servicemap.services.rgw.daemons | del(.["summary"]) | length') + + if [ "x${available_rgw_count}" == "x${CEPH_RGW_REPLICAS}" ]; then + echo "Correct number of RGWs available: ${available_rgw_count}" + else + echo "Incorrect number of RGWs. Expected count: ${CEPH_RGW_REPLICAS}, Available count: ${available_rgw_count}" + exit 1 + fi +} + +rgw_replicas_validation diff --git a/ceph-rgw/templates/configmap-bin.yaml b/ceph-rgw/templates/configmap-bin.yaml index 98a118f10..bf382b2be 100644 --- a/ceph-rgw/templates/configmap-bin.yaml +++ b/ceph-rgw/templates/configmap-bin.yaml @@ -40,4 +40,6 @@ data: {{ tuple "bin/_ceph-admin-keyring.sh.tpl" . | include "helm-toolkit.utils.template" | indent 4 }} rgw-s3-admin.sh: | {{ tuple "bin/rgw/_rgw-s3-admin.sh.tpl" . | include "helm-toolkit.utils.template" | indent 4 }} + helm-tests.sh: | +{{ tuple "bin/_helm-tests.sh.tpl" . | include "helm-toolkit.utils.template" | indent 4 }} {{- end }} diff --git a/ceph-rgw/templates/pod-helm-tests.yaml b/ceph-rgw/templates/pod-helm-tests.yaml new file mode 100644 index 000000000..922288475 --- /dev/null +++ b/ceph-rgw/templates/pod-helm-tests.yaml @@ -0,0 +1,122 @@ +{{/* +Copyright 2017 The Openstack-Helm Authors. + +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. +*/}} + +{{- if and .Values.manifests.helm_tests .Values.deployment.ceph }} +{{- $envAll := . }} + +{{- $serviceAccountName := "ceph-rgw-test" }} +{{ tuple $envAll "tests" $serviceAccountName | include "helm-toolkit.snippets.kubernetes_pod_rbac_serviceaccount" }} +--- +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: Role +metadata: + name: {{ $serviceAccountName }} +rules: + - apiGroups: + - "" + resources: + - pods + - pods/exec + verbs: + - "*" + - get + - list + - create +--- +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: RoleBinding +metadata: + name: {{ $serviceAccountName }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: {{ $serviceAccountName }} +subjects: + - kind: ServiceAccount + name: {{ $serviceAccountName }} + namespace: {{ $envAll.Release.Namespace }} +--- +apiVersion: v1 +kind: Pod +metadata: + name: {{ $serviceAccountName }} + labels: +{{ tuple $envAll "ceph-rgw" "test" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 4 }} + annotations: + "helm.sh/hook": test-success +spec: + restartPolicy: Never + serviceAccountName: {{ $serviceAccountName }} + initContainers: +{{ tuple $envAll "tests" list | include "helm-toolkit.snippets.kubernetes_entrypoint_init_container" | indent 4 }} + - name: ceph-keyring-placement +{{ tuple $envAll "ceph_config_helper" | include "helm-toolkit.snippets.image" | indent 6 }} + securityContext: + runAsUser: 0 + command: + - /tmp/ceph-admin-keyring.sh + volumeMounts: + - name: etcceph + mountPath: /etc/ceph + - name: ceph-rgw-bin + mountPath: /tmp/ceph-admin-keyring.sh + subPath: ceph-admin-keyring.sh + readOnly: true + - name: ceph-keyring + mountPath: /tmp/client-keyring + subPath: key + readOnly: true + containers: + - name: ceph-rgw-validation +{{ tuple $envAll "ceph_config_helper" | include "helm-toolkit.snippets.image" | indent 6 }} +{{ tuple $envAll $envAll.Values.pod.resources.tests | include "helm-toolkit.snippets.kubernetes_resources" | indent 6 }} + env: + - name: CEPH_DEPLOYMENT_NAMESPACE + value: {{ .Values.endpoints.ceph_mon.namespace }} + - name: CEPH_RGW_REPLICAS + value: "{{ .Values.pod.replicas.rgw }}" + command: + - /tmp/helm-tests.sh + volumeMounts: + - name: etcceph + mountPath: /etc/ceph + - name: ceph-rgw-bin + mountPath: /tmp/helm-tests.sh + subPath: helm-tests.sh + readOnly: true + - name: ceph-keyring + mountPath: /tmp/client-keyring + subPath: key + readOnly: true + - name: ceph-rgw-etc + mountPath: /etc/ceph/ceph.conf + subPath: ceph.conf + readOnly: true + volumes: + - name: etcceph + emptyDir: {} + - name: ceph-rgw-bin + configMap: + name: ceph-rgw-bin + defaultMode: 0555 + - name: ceph-keyring + secret: + secretName: {{ .Values.secrets.keyrings.admin | quote }} + - name: ceph-rgw-etc + configMap: + name: ceph-rgw-etc + defaultMode: 0444 +{{- end }} diff --git a/ceph-rgw/values.yaml b/ceph-rgw/values.yaml index e42e71f36..87c95b487 100644 --- a/ceph-rgw/values.yaml +++ b/ceph-rgw/values.yaml @@ -110,6 +110,13 @@ pod: limits: memory: "1024Mi" cpu: "2000m" + tests: + requests: + memory: "128Mi" + cpu: "100m" + limits: + memory: "1024Mi" + cpu: "2000m" ceph_client: configmap: ceph-etc @@ -472,6 +479,7 @@ manifests: configmap_ceph_templates: true configmap_bin: true configmap_bin_ks: true + configmap_test_bin: true configmap_etc: true deployment_rgw: true ingress_rgw: true @@ -488,3 +496,4 @@ manifests: secret_keystone: true service_ingress_rgw: true service_rgw: true + helm_tests: true diff --git a/tools/deployment/multinode/115-radosgw-osh-infra.sh b/tools/deployment/multinode/115-radosgw-osh-infra.sh index c1ff5a218..0cd1f802b 100755 --- a/tools/deployment/multinode/115-radosgw-osh-infra.sh +++ b/tools/deployment/multinode/115-radosgw-osh-infra.sh @@ -55,3 +55,5 @@ helm upgrade --install radosgw-osh-infra ./ceph-rgw \ #NOTE: Validate Deployment info helm status radosgw-osh-infra + +helm test radosgw-osh-infra