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  }