github.com/jenkins-x/jx/v2@v2.1.155/pkg/kube/ingress.go (about) 1 package kube 2 3 import ( 4 "fmt" 5 "strings" 6 7 "strconv" 8 9 meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" 10 "k8s.io/client-go/kubernetes" 11 ) 12 13 const ( 14 IngressConfigConfigmap = "ingress-config" 15 Domain = "domain" 16 Email = "email" 17 TLS = "tls" 18 Issuer = "issuer" 19 ClusterIssuer = "clusterissuer" 20 Exposer = "exposer" 21 UrlTemplate = "urltemplate" 22 ) 23 24 type IngressConfig struct { 25 Email string `structs:"email" yaml:"email" json:"email"` 26 Domain string `structs:"domain" yaml:"domain" json:"domain"` 27 Issuer string `structs:"issuer" yaml:"issuer" json:"issuer"` 28 ClusterIssuer bool `structs:"clusterissuer" yaml:"clusterissuer" json:"clusterissuer"` 29 Exposer string `structs:"exposer" yaml:"exposer" json:"exposer"` 30 UrlTemplate string `structs:"urltemplate" yaml:"urltemplate" json:"urltemplate"` 31 TLS bool `structs:"tls" yaml:"tls" json:"tls"` 32 } 33 34 func GetIngress(client kubernetes.Interface, ns, name string) (string, error) { 35 36 ing, err := client.ExtensionsV1beta1().Ingresses(ns).Get(name, meta_v1.GetOptions{}) 37 if err != nil { 38 return "", fmt.Errorf("failed to get ingress rule %s. error: %v", name, err) 39 } 40 if ing == nil { 41 return "", fmt.Errorf("failed to find ingress rule %s", name) 42 } 43 44 // default to the first rule 45 if len(ing.Spec.Rules) > 0 { 46 return ing.Spec.Rules[0].Host, nil 47 } 48 return "", fmt.Errorf("no hostname found for ingress rule %s", name) 49 } 50 51 func GetIngressConfig(c kubernetes.Interface, ns string) (IngressConfig, error) { 52 var ic IngressConfig 53 configMapInterface := c.CoreV1().ConfigMaps(ns) 54 cm, err := configMapInterface.Get(IngressConfigConfigmap, meta_v1.GetOptions{}) 55 data := map[string]string{} 56 if err != nil { 57 cm2, err2 := configMapInterface.Get("exposecontroller", meta_v1.GetOptions{}) 58 if err2 != nil { 59 return ic, err 60 } 61 config := cm2.Data["config.yml"] 62 lines := strings.Split(config, "\n") 63 for _, pair := range lines { 64 z := strings.Split(pair, ":") 65 data[z[0]] = strings.TrimSpace(z[1]) 66 } 67 return ic, err 68 } else { 69 data = cm.Data 70 } 71 72 ic.Domain = data[Domain] 73 ic.Email = data[Email] 74 ic.Exposer = data[Exposer] 75 ic.UrlTemplate = data[UrlTemplate] 76 ic.Issuer = data[Issuer] 77 clusterIssuer, exists := data[ClusterIssuer] 78 79 if exists { 80 ic.ClusterIssuer, err = strconv.ParseBool(clusterIssuer) 81 if err != nil { 82 return ic, fmt.Errorf("failed to parse ClusterIssuer string %s to bool from %s: %v", clusterIssuer, IngressConfigConfigmap, err) 83 } 84 } else { 85 ic.ClusterIssuer = false 86 } 87 88 tls, exists := data[TLS] 89 90 if exists && tls != "" { 91 ic.TLS, err = strconv.ParseBool(tls) 92 if err != nil { 93 return ic, fmt.Errorf("failed to parse TLS string %s to bool from %s: %v", tls, IngressConfigConfigmap, err) 94 } 95 } else { 96 ic.TLS = false 97 } 98 return ic, nil 99 } 100 101 // DeleteIngress removes an ingress by name 102 func DeleteIngress(client kubernetes.Interface, ns, name string) error { 103 return client.ExtensionsV1beta1().Ingresses(ns).Delete(name, &meta_v1.DeleteOptions{}) 104 }