mirror of
https://github.com/danielgormly/drone-plugin-kube.git
synced 2026-06-04 18:23:48 +08:00
add ingresses support
This commit is contained in:
@@ -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")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user