From 802df8f69b185890c9328c34aad959ca7e327c45 Mon Sep 17 00:00:00 2001 From: riya-singhal31 Date: Tue, 16 May 2023 12:00:26 +0530 Subject: [PATCH] deploy: move cephfs/csi-config-map to API Signed-off-by: riya-singhal31 --- .../kubernetes/cephfs/csi-config-map.go | 74 +++++++++++++++++++ .../kubernetes/cephfs/csi-config-map.yaml | 7 ++ .../kubernetes/cephfs/csi-config-map_test.go | 38 ++++++++++ deploy/Makefile | 5 ++ deploy/cephfs/kubernetes/csi-config-map.yaml | 12 ++- tools/yamlgen/main.go | 6 ++ .../kubernetes/cephfs/csi-config-map.go | 74 +++++++++++++++++++ .../kubernetes/cephfs/csi-config-map.yaml | 7 ++ 8 files changed, 220 insertions(+), 3 deletions(-) create mode 100644 api/deploy/kubernetes/cephfs/csi-config-map.go create mode 100644 api/deploy/kubernetes/cephfs/csi-config-map.yaml create mode 100644 api/deploy/kubernetes/cephfs/csi-config-map_test.go create mode 100644 vendor/github.com/ceph/ceph-csi/api/deploy/kubernetes/cephfs/csi-config-map.go create mode 100644 vendor/github.com/ceph/ceph-csi/api/deploy/kubernetes/cephfs/csi-config-map.yaml diff --git a/api/deploy/kubernetes/cephfs/csi-config-map.go b/api/deploy/kubernetes/cephfs/csi-config-map.go new file mode 100644 index 000000000..966606872 --- /dev/null +++ b/api/deploy/kubernetes/cephfs/csi-config-map.go @@ -0,0 +1,74 @@ +/* +Copyright 2023 The Ceph-CSI 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. +*/ + +package cephfs + +import ( + "bytes" + _ "embed" + "fmt" + "text/template" + + "github.com/ghodss/yaml" + v1 "k8s.io/api/core/v1" +) + +//go:embed csi-config-map.yaml +var csiConfigMap string + +type CSIConfigMapValues struct { + Name string +} + +var CSIConfigMapDefaults = CSIConfigMapValues{ + Name: "ceph-csi-config", +} + +// NewCSIConfigMap takes a name from the CSIConfigMapValues struct and relaces +// the value in the template. A ConfigMap object is returned which can be +// created in the Kubernetes cluster. +func NewCSIConfigMap(values CSIConfigMapValues) (*v1.ConfigMap, error) { + data, err := NewCSIConfigMapYAML(values) + if err != nil { + return nil, err + } + + cm := &v1.ConfigMap{} + err = yaml.Unmarshal([]byte(data), cm) + if err != nil { + return nil, fmt.Errorf("failed convert YAML to %T: %w", cm, err) + } + + return cm, nil +} + +// NewCSIConfigMapYAML takes a name from the CSIConfigMapValues struct and +// relaces the value in the template. A ConfigMap object in YAML is returned +// which can be created in the Kubernetes cluster. +func NewCSIConfigMapYAML(values CSIConfigMapValues) (string, error) { + var buf bytes.Buffer + + tmpl, err := template.New("CSIConfigMap").Parse(csiConfigMap) + if err != nil { + return "", fmt.Errorf("failed to parse template: %w", err) + } + err = tmpl.Execute(&buf, values) + if err != nil { + return "", fmt.Errorf("failed to replace values in template: %w", err) + } + + return buf.String(), nil +} diff --git a/api/deploy/kubernetes/cephfs/csi-config-map.yaml b/api/deploy/kubernetes/cephfs/csi-config-map.yaml new file mode 100644 index 000000000..a6af53a69 --- /dev/null +++ b/api/deploy/kubernetes/cephfs/csi-config-map.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: "{{ .Name }}" +data: + config.json: |- + [] diff --git a/api/deploy/kubernetes/cephfs/csi-config-map_test.go b/api/deploy/kubernetes/cephfs/csi-config-map_test.go new file mode 100644 index 000000000..42b46be8a --- /dev/null +++ b/api/deploy/kubernetes/cephfs/csi-config-map_test.go @@ -0,0 +1,38 @@ +/* +Copyright 2023 The Ceph-CSI 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. +*/ + +package cephfs + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestNewCSIConfigMap(t *testing.T) { + cm, err := NewCSIConfigMap(CSIConfigMapDefaults) + + require.NoError(t, err) + require.NotNil(t, cm) + require.Equal(t, cm.Name, CSIConfigMapDefaults.Name) +} + +func TestNewCSIConfigMapYAML(t *testing.T) { + yaml, err := NewCSIConfigMapYAML(CSIConfigMapDefaults) + + require.NoError(t, err) + require.NotEqual(t, "", yaml) +} \ No newline at end of file diff --git a/deploy/Makefile b/deploy/Makefile index 4758a6d5a..3f8162405 100644 --- a/deploy/Makefile +++ b/deploy/Makefile @@ -15,6 +15,8 @@ .PHONY: all all: \ scc.yaml \ + cephfs/kubernetes/csidriver.yaml \ + cephfs/kubernetes/csi-config-map.yaml \ nfs/kubernetes/csidriver.yaml \ nfs/kubernetes/csi-config-map.yaml \ rbd/kubernetes/csidriver.yaml \ @@ -23,6 +25,9 @@ all: \ scc.yaml: ../api/deploy/ocp/scc.yaml ../api/deploy/ocp/scc.go $(MAKE) -C ../tools generate-deploy +cephfs/kubernetes/csi-config-map.yaml: ../api/deploy/kubernetes/cephfs/csi-config-map.* + $(MAKE) -C ../tools generate-deploy + nfs/kubernetes/csidriver.yaml: ../api/deploy/kubernetes/nfs/csidriver.yaml ../api/deploy/kubernetes/nfs/csidriver.go $(MAKE) -C ../tools generate-deploy diff --git a/deploy/cephfs/kubernetes/csi-config-map.yaml b/deploy/cephfs/kubernetes/csi-config-map.yaml index 3efb0c1be..d29cdf5d5 100644 --- a/deploy/cephfs/kubernetes/csi-config-map.yaml +++ b/deploy/cephfs/kubernetes/csi-config-map.yaml @@ -1,8 +1,14 @@ ---- +# +# /!\ DO NOT MODIFY THIS FILE +# +# This file has been automatically generated by Ceph-CSI yamlgen. +# The source for the contents can be found in the api/deploy directory, make +# your modifications there. +# apiVersion: v1 kind: ConfigMap +metadata: + name: "ceph-csi-config" data: config.json: |- [] -metadata: - name: ceph-csi-config diff --git a/tools/yamlgen/main.go b/tools/yamlgen/main.go index dd93166c3..85bbbd5ca 100644 --- a/tools/yamlgen/main.go +++ b/tools/yamlgen/main.go @@ -22,6 +22,7 @@ import ( "path" "reflect" + "github.com/ceph/ceph-csi/api/deploy/kubernetes/cephfs" "github.com/ceph/ceph-csi/api/deploy/kubernetes/nfs" "github.com/ceph/ceph-csi/api/deploy/kubernetes/rbd" "github.com/ceph/ceph-csi/api/deploy/ocp" @@ -48,6 +49,11 @@ var yamlArtifacts = []deploymentArtifact{ reflect.ValueOf(ocp.NewSecurityContextConstraintsYAML), reflect.ValueOf(ocp.SecurityContextConstraintsDefaults), }, + { + "../deploy/cephfs/kubernetes/csi-config-map.yaml", + reflect.ValueOf(cephfs.NewCSIConfigMapYAML), + reflect.ValueOf(cephfs.CSIConfigMapDefaults), + }, { "../deploy/nfs/kubernetes/csidriver.yaml", reflect.ValueOf(nfs.NewCSIDriverYAML), diff --git a/vendor/github.com/ceph/ceph-csi/api/deploy/kubernetes/cephfs/csi-config-map.go b/vendor/github.com/ceph/ceph-csi/api/deploy/kubernetes/cephfs/csi-config-map.go new file mode 100644 index 000000000..966606872 --- /dev/null +++ b/vendor/github.com/ceph/ceph-csi/api/deploy/kubernetes/cephfs/csi-config-map.go @@ -0,0 +1,74 @@ +/* +Copyright 2023 The Ceph-CSI 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. +*/ + +package cephfs + +import ( + "bytes" + _ "embed" + "fmt" + "text/template" + + "github.com/ghodss/yaml" + v1 "k8s.io/api/core/v1" +) + +//go:embed csi-config-map.yaml +var csiConfigMap string + +type CSIConfigMapValues struct { + Name string +} + +var CSIConfigMapDefaults = CSIConfigMapValues{ + Name: "ceph-csi-config", +} + +// NewCSIConfigMap takes a name from the CSIConfigMapValues struct and relaces +// the value in the template. A ConfigMap object is returned which can be +// created in the Kubernetes cluster. +func NewCSIConfigMap(values CSIConfigMapValues) (*v1.ConfigMap, error) { + data, err := NewCSIConfigMapYAML(values) + if err != nil { + return nil, err + } + + cm := &v1.ConfigMap{} + err = yaml.Unmarshal([]byte(data), cm) + if err != nil { + return nil, fmt.Errorf("failed convert YAML to %T: %w", cm, err) + } + + return cm, nil +} + +// NewCSIConfigMapYAML takes a name from the CSIConfigMapValues struct and +// relaces the value in the template. A ConfigMap object in YAML is returned +// which can be created in the Kubernetes cluster. +func NewCSIConfigMapYAML(values CSIConfigMapValues) (string, error) { + var buf bytes.Buffer + + tmpl, err := template.New("CSIConfigMap").Parse(csiConfigMap) + if err != nil { + return "", fmt.Errorf("failed to parse template: %w", err) + } + err = tmpl.Execute(&buf, values) + if err != nil { + return "", fmt.Errorf("failed to replace values in template: %w", err) + } + + return buf.String(), nil +} diff --git a/vendor/github.com/ceph/ceph-csi/api/deploy/kubernetes/cephfs/csi-config-map.yaml b/vendor/github.com/ceph/ceph-csi/api/deploy/kubernetes/cephfs/csi-config-map.yaml new file mode 100644 index 000000000..a6af53a69 --- /dev/null +++ b/vendor/github.com/ceph/ceph-csi/api/deploy/kubernetes/cephfs/csi-config-map.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: "{{ .Name }}" +data: + config.json: |- + []