github.com/jenkins-x/jx/v2@v2.1.155/pkg/kube/pod_templates.go (about) 1 package kube 2 3 import ( 4 "strings" 5 6 "github.com/jenkins-x/jx/v2/pkg/errorutil" 7 8 "github.com/ghodss/yaml" 9 "github.com/jenkins-x/jx-logging/pkg/log" 10 corev1 "k8s.io/api/core/v1" 11 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 12 "k8s.io/client-go/kubernetes" 13 ) 14 15 // LoadPodTemplates loads the Jenkins pod templates from the given namespace 16 func LoadPodTemplates(kubeClient kubernetes.Interface, ns string) (map[string]*corev1.Pod, error) { 17 answer := map[string]*corev1.Pod{} 18 19 configMapName := ConfigMapJenkinsPodTemplates 20 configMapInterface := kubeClient.CoreV1().ConfigMaps(ns) 21 cm, err := configMapInterface.Get(configMapName, metav1.GetOptions{}) 22 if err == nil { 23 for k, v := range cm.Data { 24 pod := &corev1.Pod{} 25 if v != "" { 26 err := yaml.Unmarshal([]byte(v), pod) 27 if err != nil { 28 return answer, err 29 } 30 answer[k] = pod 31 } 32 } 33 return answer, nil 34 } 35 36 // lets try load all the ConfigMaps by selector 37 list, err2 := configMapInterface.List(metav1.ListOptions{ 38 LabelSelector: LabelKind + "=" + ValueKindPodTemplate, 39 }) 40 if err2 != nil { 41 return answer, errorutil.CombineErrors(err, err2) 42 } 43 for _, cm := range list.Items { 44 data := cm.Data 45 found := false 46 if data != nil { 47 podYaml := data["pod"] 48 if podYaml != "" { 49 pod := &corev1.Pod{} 50 err := yaml.Unmarshal([]byte(podYaml), pod) 51 if err != nil { 52 return answer, err 53 } 54 name := strings.TrimPrefix(cm.Name, "jenkins-x-pod-template-") 55 answer[name] = pod 56 found = true 57 } 58 } 59 if !found { 60 log.Logger().Warnf("ConfigMap %s does not contain a pod key", cm.Name) 61 } 62 } 63 return answer, nil 64 }