github.com/jenkins-x/jx/v2@v2.1.155/pkg/kube/secrets.go (about) 1 package kube 2 3 import ( 4 "fmt" 5 "sort" 6 7 "github.com/jenkins-x/jx-logging/pkg/log" 8 "github.com/jenkins-x/jx/v2/pkg/util" 9 "github.com/pkg/errors" 10 v1 "k8s.io/api/core/v1" 11 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 12 "k8s.io/client-go/kubernetes" 13 ) 14 15 // GetSecrets returns a map of the Secrets along with a sorted list of names 16 func GetSecrets(kubeClient kubernetes.Interface, ns string) (map[string]*v1.Secret, []string, error) { 17 m := map[string]*v1.Secret{} 18 19 names := []string{} 20 resourceList, err := kubeClient.CoreV1().Secrets(ns).List(metav1.ListOptions{}) 21 if err != nil { 22 return m, names, err 23 } 24 for _, resource := range resourceList.Items { 25 n := resource.Name 26 copy := resource 27 m[n] = © 28 if n != "" { 29 names = append(names, n) 30 } 31 } 32 sort.Strings(names) 33 return m, names, nil 34 } 35 36 // DefaultModifySecret default implementation of a function to modify 37 func DefaultModifySecret(kubeClient kubernetes.Interface, ns string, name string, fn func(env *v1.Secret) error, defaultSecret *v1.Secret) (*v1.Secret, error) { 38 secretInterface := kubeClient.CoreV1().Secrets(ns) 39 40 create := false 41 secret, err := secretInterface.Get(name, metav1.GetOptions{}) 42 if err != nil { 43 create = true 44 initialSecret := v1.Secret{ 45 ObjectMeta: metav1.ObjectMeta{ 46 Name: name, 47 Labels: map[string]string{}, 48 Annotations: map[string]string{}, 49 }, 50 Data: map[string][]byte{}, 51 } 52 if defaultSecret != nil { 53 initialSecret = *defaultSecret 54 } 55 secret = &initialSecret 56 } 57 err = fn(secret) 58 if err != nil { 59 return secret, err 60 } 61 if create { 62 log.Logger().Debugf("Creating Secret %s in namespace %s", util.ColorInfo(name), util.ColorInfo(ns)) 63 _, err = secretInterface.Create(secret) 64 if err != nil { 65 return secret, errors.Wrapf(err, "Failed to create Secret %s in namespace %s", name, ns) 66 } 67 return secret, err 68 } 69 log.Logger().Infof("Updating Secret %s in namespace %s", util.ColorInfo(name), util.ColorInfo(ns)) 70 _, err = secretInterface.Update(secret) 71 if err != nil { 72 return secret, errors.Wrapf(err, "Failed to update Secret %s in namespace %s", name, ns) 73 } 74 return secret, nil 75 } 76 77 // ValidateSecret checks a given secret and key exists in the provided namespace 78 func ValidateSecret(kubeClient kubernetes.Interface, secretName, key, ns string) error { 79 secret, err := kubeClient.CoreV1().Secrets(ns).Get(secretName, metav1.GetOptions{}) 80 if err != nil { 81 return errors.Wrapf(err, "could not find the Secret %s in the namespace: %s", secretName, ns) 82 } 83 if secret.Data == nil || len(secret.Data[key]) == 0 { 84 return fmt.Errorf("the Secret %s in the namespace: %s does not have a key: %s", secretName, ns, key) 85 } 86 log.Logger().Debugf("valid: there is a Secret: %s in namespace: %s\n", util.ColorInfo(secretName), util.ColorInfo(ns)) 87 return nil 88 }