add ingresses support

This commit is contained in:
jbonzo
2020-02-16 23:06:42 -05:00
parent 3b7fbfd838
commit 905e7fb4dd
2 changed files with 42 additions and 5 deletions
+13 -5
View File
@@ -9,8 +9,9 @@ import (
"strings" "strings"
"github.com/aymerick/raymond" "github.com/aymerick/raymond"
appv1 "k8s.io/api/apps/v1" appV1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1" coreV1 "k8s.io/api/core/v1"
v1BetaV1 "k8s.io/api/extensions/v1beta1"
"k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/kubernetes/scheme"
) )
@@ -91,7 +92,7 @@ func (p Plugin) Exec() error {
} }
switch o := kubernetesObject.(type) { switch o := kubernetesObject.(type) {
case *appv1.Deployment: case *appV1.Deployment:
log.Print("📦 Resource type: Deployment") log.Print("📦 Resource type: Deployment")
if p.KubeConfig.Namespace == "" { if p.KubeConfig.Namespace == "" {
p.KubeConfig.Namespace = o.Namespace p.KubeConfig.Namespace = o.Namespace
@@ -107,20 +108,27 @@ func (p Plugin) Exec() error {
state, watchErr := waitUntilDeploymentSettled(clientset, p.KubeConfig.Namespace, o.ObjectMeta.Name, 120) state, watchErr := waitUntilDeploymentSettled(clientset, p.KubeConfig.Namespace, o.ObjectMeta.Name, 120)
log.Printf("%s", state) log.Printf("%s", state)
return watchErr return watchErr
case *corev1.ConfigMap: case *coreV1.ConfigMap:
if p.KubeConfig.Namespace == "" { if p.KubeConfig.Namespace == "" {
p.KubeConfig.Namespace = o.Namespace p.KubeConfig.Namespace = o.Namespace
} }
log.Print("📦 Resource type: ConfigMap") log.Print("📦 Resource type: ConfigMap")
err = ApplyConfigMapFromFile(clientset, p.KubeConfig.Namespace, o, p.ConfigMapFile) err = ApplyConfigMapFromFile(clientset, p.KubeConfig.Namespace, o, p.ConfigMapFile)
case *corev1.Service: case *coreV1.Service:
if p.KubeConfig.Namespace == "" { if p.KubeConfig.Namespace == "" {
p.KubeConfig.Namespace = o.Namespace p.KubeConfig.Namespace = o.Namespace
} }
log.Print("Resource type: Service") log.Print("Resource type: Service")
err = ApplyService(clientset, p.KubeConfig.Namespace, o) err = ApplyService(clientset, p.KubeConfig.Namespace, o)
case *v1BetaV1.Ingress:
if p.KubeConfig.Namespace == "" {
p.KubeConfig.Namespace = o.Namespace
}
log.Print("Resource type: Ingress")
err = ApplyIngress(clientset, p.KubeConfig.Namespace, o)
default: default:
return errors.New("⛔️ This plugin doesn't support that resource type") return errors.New("⛔️ This plugin doesn't support that resource type")
} }
+29
View File
@@ -12,6 +12,7 @@ import (
appV1 "k8s.io/api/apps/v1" appV1 "k8s.io/api/apps/v1"
coreV1 "k8s.io/api/core/v1" coreV1 "k8s.io/api/core/v1"
v1BetaV1 "k8s.io/api/extensions/v1beta1"
kubeErrors "k8s.io/apimachinery/pkg/api/errors" kubeErrors "k8s.io/apimachinery/pkg/api/errors"
metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1" metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes"
@@ -161,3 +162,31 @@ func configMapExists(clientset *kubernetes.Clientset, namespace string, name str
} }
return true, nil return true, nil
} }
func ApplyIngress(clientset *kubernetes.Clientset, namespace string, ingress *v1BetaV1.Ingress) error {
_, exists, err := getIngress(clientset, namespace, ingress.Name)
if err != nil {
return err
}
if !exists {
_, err = clientset.ExtensionsV1beta1().Ingresses(namespace).Create(ingress)
return err
}
_, err = clientset.ExtensionsV1beta1().Ingresses(namespace).Update(ingress)
return err
}
func getIngress(clientset *kubernetes.Clientset, namespace string, name string) (*v1BetaV1.Ingress, bool, error) {
ingress, err := clientset.ExtensionsV1beta1().Ingresses(namespace).Get(name, metaV1.GetOptions{})
if err != nil {
statusError, ok := err.(*kubeErrors.StatusError)
if ok && statusError.Status().Code == http.StatusNotFound {
return nil, false, nil
}
return nil, false, err
}
return ingress, true, nil
}