package bootstrapping import ( corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) const ( // DataSyncSecretName is the name of the secret for data sync DataSyncSecretName = "gcp-auth-token" //nolint // DataSyncNamespace is the namespace of the secret for data sync DataSyncNamespace = "data-sync-connector" // DataSyncKey is the key for the data sync secret data containing the service account DataSyncKey = "auth-token" ) // DataSyncSecret is the struct used to create the data sync secret type DataSyncSecret struct { typeMetaKind string typeMetaAPIVersion string objectMetaName string objectMetaNamespace string serviceAccount string } // CreateDataSyncSecret creates a new data sync secret struct func CreateDataSyncSecret() *DataSyncSecret { return &DataSyncSecret{ typeMetaKind: secretKind, typeMetaAPIVersion: secretAPIVersion, objectMetaName: DataSyncSecretName, objectMetaNamespace: DataSyncNamespace, serviceAccount: defaultStr, } } // TypeMetaKind sets the typeMetaKind for the data sync secret func (d *DataSyncSecret) TypeMetaKind(kind string) *DataSyncSecret { d.typeMetaKind = kind return d } // TypeMetaAPIVersion sets the typeMetaAPIVersion for the data sync secret func (d *DataSyncSecret) TypeMetaAPIVersion(apiVersion string) *DataSyncSecret { d.typeMetaAPIVersion = apiVersion return d } // ObjectMetaName sets the objectMetaName for the data sync secret func (d *DataSyncSecret) ObjectMetaName(name string) *DataSyncSecret { d.objectMetaName = name return d } // ObjectMetaNamespace sets the objectMetaNamespace for the data sync secret func (d *DataSyncSecret) ObjectMetaNamespace(ns string) *DataSyncSecret { d.objectMetaNamespace = ns return d } // ServiceAccount sets the serviceAccount for the data sync secret func (d *DataSyncSecret) ServiceAccount(sa string) *DataSyncSecret { d.serviceAccount = sa return d } // Build creates the data sync secret and returns it. func (d *DataSyncSecret) Build(stringData bool) *corev1.Secret { dataSyncSecret := &corev1.Secret{ TypeMeta: metav1.TypeMeta{ Kind: d.typeMetaKind, APIVersion: d.typeMetaAPIVersion, }, ObjectMeta: metav1.ObjectMeta{ Name: d.objectMetaName, Namespace: d.objectMetaNamespace, }, } data := removeEmptyFields(map[string]string{ DataSyncKey: d.serviceAccount, }) if stringData { dataSyncSecret.StringData = removeEmptyFields(data) } else { byteData := make(map[string][]byte) for key, val := range data { byteData[key] = []byte(val) } dataSyncSecret.Data = byteData } return dataSyncSecret }