From 9f93b0be3037a7fa5476a9f860e52fc7039e4890 Mon Sep 17 00:00:00 2001 From: Matt Morrison Date: Thu, 10 May 2018 08:50:01 +1200 Subject: [PATCH] Fix Ingress update error: Failed to update ingress: jsonpatch replace operation does not apply: doc is missing key: /spec/rules --- kubernetes/resource_kubernetes_ingress.go | 28 +++++++++++------------ 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/kubernetes/resource_kubernetes_ingress.go b/kubernetes/resource_kubernetes_ingress.go index 2da78b0eb3..023b44b753 100644 --- a/kubernetes/resource_kubernetes_ingress.go +++ b/kubernetes/resource_kubernetes_ingress.go @@ -1,14 +1,14 @@ package kubernetes import ( - "fmt" "log" + "fmt" + "github.com/hashicorp/terraform/helper/schema" "k8s.io/api/extensions/v1beta1" "k8s.io/apimachinery/pkg/api/errors" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - pkgApi "k8s.io/apimachinery/pkg/types" ) func resourceKubernetesIngress() *schema.Resource { @@ -171,30 +171,28 @@ func resourceKubernetesIngressRead(d *schema.ResourceData, meta interface{}) err func resourceKubernetesIngressUpdate(d *schema.ResourceData, meta interface{}) error { conn := meta.(*kubernetesProvider).conn - namespace, name, err := idParts(d.Id()) + namespace, _, err := idParts(d.Id()) if err != nil { return err } - // Metadata - ops := patchMetadata("metadata.0.", "/metadata/", d) - // Spec - if d.HasChange("spec") { - diffOps := patchIngressSpec("spec.0.", "/spec/", d) - ops = append(ops, diffOps...) + metadata := expandMetadata(d.Get("metadata").([]interface{})) + spec := expandIngressSpec(d.Get("spec").([]interface{})) + + if metadata.Namespace == "" { + metadata.Namespace = "default" } - data, err := ops.MarshalJSON() - if err != nil { - return fmt.Errorf("Failed to marshal update operations: %s", err) + ingress := &v1beta1.Ingress{ + ObjectMeta: metadata, + Spec: spec, } - log.Printf("[INFO] Updating ingress %q: %v", name, string(data)) - out, err := conn.ExtensionsV1beta1().Ingresses(namespace).Patch(name, pkgApi.JSONPatchType, data) + + out, err := conn.ExtensionsV1beta1().Ingresses(namespace).Update(ingress) if err != nil { return fmt.Errorf("Failed to update ingress: %s", err) } log.Printf("[INFO] Submitted updated ingress: %#v", out) - d.SetId(buildId(out.ObjectMeta)) return resourceKubernetesIngressRead(d, meta) }