karmada/pkg/karmadactl/cmdinit/kubernetes/secret.go

81 lines
2.2 KiB
Go

package kubernetes
import (
"context"
"fmt"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
applycorev1 "k8s.io/client-go/applyconfigurations/core/v1"
applymetav1 "k8s.io/client-go/applyconfigurations/meta/v1"
"k8s.io/klog/v2"
)
// SecretFromSpec secret spec
func (i *CommandInitOption) SecretFromSpec(name string, secretType corev1.SecretType, data map[string]string) *corev1.Secret {
return &corev1.Secret{
TypeMeta: metav1.TypeMeta{
APIVersion: "v1",
Kind: "Secret",
},
ObjectMeta: metav1.ObjectMeta{
Name: name,
Namespace: i.Namespace,
Labels: map[string]string{"karmada.io/bootstrapping": "secret-defaults"},
},
//Immutable: immutable,
Type: secretType,
StringData: data,
}
}
// CreateSecret receive SecretFromSpec create secret
func (i *CommandInitOption) CreateSecret(secret *corev1.Secret) error {
secretClient := i.KubeClientSet.CoreV1().Secrets(i.Namespace)
secretList, err := secretClient.List(context.TODO(), metav1.ListOptions{})
if err != nil {
return err
}
// Update if secret exists.
for _, v := range secretList.Items {
if secret.Name == v.Name {
t := &applycorev1.SecretApplyConfiguration{
TypeMetaApplyConfiguration: applymetav1.TypeMetaApplyConfiguration{
APIVersion: &secret.APIVersion,
Kind: &secret.Kind,
},
ObjectMetaApplyConfiguration: &applymetav1.ObjectMetaApplyConfiguration{
Name: &secret.Name,
Namespace: &secret.Namespace,
},
Immutable: v.Immutable,
Data: secret.Data,
StringData: secret.StringData,
Type: &secret.Type,
}
_, err = secretClient.Apply(context.TODO(), t, metav1.ApplyOptions{
TypeMeta: metav1.TypeMeta{
APIVersion: secret.APIVersion,
Kind: secret.Kind,
},
FieldManager: "apply",
})
if err != nil {
return fmt.Errorf("apply secret %s failed: %v", secret.Name, err)
}
klog.Infof("secret %s update successfully.", secret.Name)
return nil
}
}
_, err = secretClient.Create(context.TODO(), secret, metav1.CreateOptions{})
if err != nil {
return fmt.Errorf("create secret %s failed: %v", secret.Name, err)
}
klog.Infof("secret %s Create successfully.", secret.Name)
return nil
}