package bootstrapping import ( corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) const ( regionConnectionSecretName = "region-connection" regionObjectNamespace = "edge-agent" secretKind = "Secret" secretAPIVersion = "v1" defaultStr = "" ) type ConnectionSecret struct { typeMetaKind string typeMetaAPIVersion string objectMetaName string objectMetaNamespace string clusterCA string endpoint string namespace string projectID string // TODO: convert this to clusterEdgeID or is it deprecated? // clusterID string clusterType string storeNamespace string joined string } func CreateRegionConnectionSecret() *ConnectionSecret { return &ConnectionSecret{ typeMetaKind: secretKind, typeMetaAPIVersion: secretAPIVersion, objectMetaName: regionConnectionSecretName, objectMetaNamespace: regionObjectNamespace, namespace: defaultStr, projectID: defaultStr, // clusterID: defaultStr, clusterType: defaultStr, storeNamespace: defaultStr, joined: defaultStr, } } func (c *ConnectionSecret) TypeMetaKind(kind string) *ConnectionSecret { c.typeMetaKind = kind return c } func (c *ConnectionSecret) TypeMetaAPIVersion(apiVersion string) *ConnectionSecret { c.typeMetaAPIVersion = apiVersion return c } func (c *ConnectionSecret) ObjectMetaName(name string) *ConnectionSecret { c.objectMetaName = name return c } func (c *ConnectionSecret) ObjectMetaNamespace(ns string) *ConnectionSecret { c.objectMetaNamespace = ns return c } func (c *ConnectionSecret) ClusterCA(ca string) *ConnectionSecret { c.clusterCA = ca return c } func (c *ConnectionSecret) Endpoint(endpoint string) *ConnectionSecret { c.endpoint = endpoint return c } func (c *ConnectionSecret) Namespace(ns string) *ConnectionSecret { c.namespace = ns return c } func (c *ConnectionSecret) ProjectID(pid string) *ConnectionSecret { c.projectID = pid return c } // func (c *ConnectionSecret) ClusterID(cid string) *ConnectionSecret { // c.clusterID = cid // return c // } func (c *ConnectionSecret) ClusterType(ct string) *ConnectionSecret { c.clusterType = ct return c } func (c *ConnectionSecret) StoreNamespace(sns string) *ConnectionSecret { c.storeNamespace = sns return c } func (c *ConnectionSecret) Joined(joined string) *ConnectionSecret { c.joined = joined return c } func (c *ConnectionSecret) Build(stringData bool) *corev1.Secret { connectionSecret := &corev1.Secret{ TypeMeta: metav1.TypeMeta{ Kind: c.typeMetaKind, APIVersion: c.typeMetaAPIVersion, }, ObjectMeta: metav1.ObjectMeta{ Name: c.objectMetaName, Namespace: c.objectMetaNamespace, }, } data := removeEmptyFields(map[string]string{ "clusterCA": c.clusterCA, "endpoint": c.endpoint, "namespace": c.namespace, "projectID": c.projectID, // "clusterID": c.clusterID, "clusterType": c.clusterType, "storeNamespace": c.storeNamespace, "joined": c.joined, }) if stringData { connectionSecret.StringData = removeEmptyFields(data) } else { byteData := make(map[string][]byte) for key, val := range data { byteData[key] = []byte(val) } connectionSecret.Data = byteData } return connectionSecret } func removeEmptyFields(data map[string]string) map[string]string { for key, val := range data { if val == defaultStr { delete(data, key) } } return data }