diff --git a/api/deploy/kubernetes/rbd/csi-config-map.go b/api/deploy/kubernetes/rbd/csi-config-map.go new file mode 100644 index 000000000..13012ee4e --- /dev/null +++ b/api/deploy/kubernetes/rbd/csi-config-map.go @@ -0,0 +1,74 @@ +/* +Copyright 2021 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 rbd + +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/rbd/csi-config-map.yaml b/api/deploy/kubernetes/rbd/csi-config-map.yaml new file mode 100644 index 000000000..c8a48eb4a --- /dev/null +++ b/api/deploy/kubernetes/rbd/csi-config-map.yaml @@ -0,0 +1,8 @@ +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: "{{ .Name }}" +data: + config.json: |- + [] diff --git a/api/deploy/kubernetes/rbd/csi-config-map_test.go b/api/deploy/kubernetes/rbd/csi-config-map_test.go new file mode 100644 index 000000000..1cc5cd67f --- /dev/null +++ b/api/deploy/kubernetes/rbd/csi-config-map_test.go @@ -0,0 +1,38 @@ +/* +Copyright 2021 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 rbd + +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) +} diff --git a/deploy/Makefile b/deploy/Makefile index d68bb8af5..9d6decc4c 100644 --- a/deploy/Makefile +++ b/deploy/Makefile @@ -15,10 +15,14 @@ .PHONY: all all: \ scc.yaml \ - rbd/kubernetes/csidriver.yaml + rbd/kubernetes/csidriver.yaml \ + rbd/kubernetes/csi-config-map.yaml scc.yaml: ../api/deploy/ocp/scc.yaml ../api/deploy/ocp/scc.go $(MAKE) -C ../tools generate-deploy rbd/kubernetes/csidriver.yaml: ../api/deploy/kubernetes/rbd/csidriver.yaml ../api/deploy/kubernetes/rbd/csidriver.go $(MAKE) -C ../tools generate-deploy + +rbd/kubernetes/csi-config-map.yaml: ../api/deploy/kubernetes/rbd/csidriver.* + $(MAKE) -C ../tools generate-deploy diff --git a/deploy/rbd/kubernetes/csi-config-map.yaml b/deploy/rbd/kubernetes/csi-config-map.yaml index 3efb0c1be..a358a16cc 100644 --- a/deploy/rbd/kubernetes/csi-config-map.yaml +++ b/deploy/rbd/kubernetes/csi-config-map.yaml @@ -1,8 +1,16 @@ --- +# +# /!\ 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 5bdfd5a4e..d90655919 100644 --- a/tools/yamlgen/main.go +++ b/tools/yamlgen/main.go @@ -52,6 +52,11 @@ var yamlArtifacts = []deploymentArtifact{ reflect.ValueOf(rbd.NewCSIDriverYAML), reflect.ValueOf(rbd.CSIDriverDefaults), }, + { + "../deploy/rbd/kubernetes/csi-config-map.yaml", + reflect.ValueOf(rbd.NewCSIConfigMapYAML), + reflect.ValueOf(rbd.CSIConfigMapDefaults), + }, } func main() { diff --git a/vendor/github.com/ceph/ceph-csi/api/deploy/kubernetes/rbd/csi-config-map.go b/vendor/github.com/ceph/ceph-csi/api/deploy/kubernetes/rbd/csi-config-map.go new file mode 100644 index 000000000..13012ee4e --- /dev/null +++ b/vendor/github.com/ceph/ceph-csi/api/deploy/kubernetes/rbd/csi-config-map.go @@ -0,0 +1,74 @@ +/* +Copyright 2021 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 rbd + +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/rbd/csi-config-map.yaml b/vendor/github.com/ceph/ceph-csi/api/deploy/kubernetes/rbd/csi-config-map.yaml new file mode 100644 index 000000000..c8a48eb4a --- /dev/null +++ b/vendor/github.com/ceph/ceph-csi/api/deploy/kubernetes/rbd/csi-config-map.yaml @@ -0,0 +1,8 @@ +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: "{{ .Name }}" +data: + config.json: |- + []