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"
"github.com/aymerick/raymond"
appv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
appV1 "k8s.io/api/apps/v1"
coreV1 "k8s.io/api/core/v1"
v1BetaV1 "k8s.io/api/extensions/v1beta1"
"k8s.io/client-go/kubernetes/scheme"
)
@@ -91,7 +92,7 @@ func (p Plugin) Exec() error {
}
switch o := kubernetesObject.(type) {
case *appv1.Deployment:
case *appV1.Deployment:
log.Print("📦 Resource type: Deployment")
if p.KubeConfig.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)
log.Printf("%s", state)
return watchErr
case *corev1.ConfigMap:
case *coreV1.ConfigMap:
if p.KubeConfig.Namespace == "" {
p.KubeConfig.Namespace = o.Namespace
}
log.Print("📦 Resource type: ConfigMap")
err = ApplyConfigMapFromFile(clientset, p.KubeConfig.Namespace, o, p.ConfigMapFile)
case *corev1.Service:
case *coreV1.Service:
if p.KubeConfig.Namespace == "" {
p.KubeConfig.Namespace = o.Namespace
}
log.Print("Resource type: Service")
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:
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"
coreV1 "k8s.io/api/core/v1"
v1BetaV1 "k8s.io/api/extensions/v1beta1"
kubeErrors "k8s.io/apimachinery/pkg/api/errors"
metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
@@ -161,3 +162,31 @@ func configMapExists(clientset *kubernetes.Clientset, namespace string, name str
}
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
}