shardingsphere-operator/pkg/kubernetes/configmap/factory.go (90 lines of code) (raw):

/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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 configmap import ( v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" ) // ConfigMapFactory generic configmap factory interface type ConfigMapFactory interface { NewConfigMapBuilder(metav1.Object, schema.GroupVersionKind) ConfigMapBuilder } // NewConfigMapFactory Create a new common configmap factory func NewConfigMapFactory(obj runtime.Object) ConfigMapFactory { return &configmapFactory{ obj: obj, } } type configmapFactory struct { obj runtime.Object } // NewConfigMapBuilder Create a new common configmap builder func (c *configmapFactory) NewConfigMapBuilder(meta metav1.Object, gvk schema.GroupVersionKind) ConfigMapBuilder { cm := DefaultConfigMap(meta, gvk) if gvk.Group == "shardingsphere.apache.org" { if gvk.Kind == "ComputeNode" && gvk.Version == "v1alpha1" { return &computeNodeConfigMapBuilder{ obj: c.obj, configMapBuilder: configMapBuilder{ configmap: cm, }, } } if gvk.Kind == "ShardingSphereChaos" && gvk.Version == "v1alpha1" { return &shardingsphereChaosConfigMapBuilder{ obj: c.obj, configMapBuilder: configMapBuilder{ configmap: cm, }, } } } return &configMapBuilder{ configmap: cm, } } // ConfigMapBuilder generic configmap interface type ConfigMapBuilder interface { SetName(name string) ConfigMapBuilder SetNamespace(namespace string) ConfigMapBuilder SetLabels(labels map[string]string) ConfigMapBuilder SetAnnotations(annos map[string]string) ConfigMapBuilder SetBinaryData(binaryData map[string][]byte) ConfigMapBuilder SetData(data map[string]string) ConfigMapBuilder Build() *v1.ConfigMap } type configMapBuilder struct { configmap *v1.ConfigMap } // NewConfigMapBuilder Create a new common configmap builder func NewConfigMapBuilder(configmap *v1.ConfigMap) ConfigMapBuilder { return &configMapBuilder{configmap} } // SetName set the ConfigMap name func (c *configMapBuilder) SetName(name string) ConfigMapBuilder { c.configmap.Name = name return c } // SetNamespace set the ConfigMap namespace func (c *configMapBuilder) SetNamespace(namespace string) ConfigMapBuilder { c.configmap.Namespace = namespace return c } // SetLabels set the ConfigMap labels func (c *configMapBuilder) SetLabels(labels map[string]string) ConfigMapBuilder { c.configmap.Labels = labels return c } // SetAnnotations set the ConfigMap annotations func (c *configMapBuilder) SetAnnotations(annos map[string]string) ConfigMapBuilder { c.configmap.Annotations = annos return c } // SetData set the ConfigMap data func (c *configMapBuilder) SetData(data map[string]string) ConfigMapBuilder { if c.configmap.Data == nil { c.configmap.Data = map[string]string{} } c.configmap.Data = data return c } // SetBinaryData set the ConfigMap binary data func (c *configMapBuilder) SetBinaryData(binary map[string][]byte) ConfigMapBuilder { if c.configmap.BinaryData == nil { c.configmap.BinaryData = map[string][]byte{} } c.configmap.BinaryData = binary return c } // Build returns a ConfigMap func (c *configMapBuilder) Build() *v1.ConfigMap { return c.configmap }