From b6abf1f2bbcb2ba6b834a70929abce90e56d1d64 Mon Sep 17 00:00:00 2001 From: Radek Simko Date: Fri, 2 Jun 2017 14:18:35 +0100 Subject: [PATCH] provider/kubernetes: Provide more details about why PVC failed to bind --- ...urce_kubernetes_persistent_volume_claim.go | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/builtin/providers/kubernetes/resource_kubernetes_persistent_volume_claim.go b/builtin/providers/kubernetes/resource_kubernetes_persistent_volume_claim.go index a801cd1f2..6c7168509 100644 --- a/builtin/providers/kubernetes/resource_kubernetes_persistent_volume_claim.go +++ b/builtin/providers/kubernetes/resource_kubernetes_persistent_volume_claim.go @@ -9,6 +9,7 @@ import ( "github.com/hashicorp/terraform/helper/schema" "k8s.io/apimachinery/pkg/api/errors" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/fields" pkgApi "k8s.io/apimachinery/pkg/types" api "k8s.io/kubernetes/pkg/api/v1" kubernetes "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" @@ -165,6 +166,7 @@ func resourceKubernetesPersistentVolumeClaimCreate(d *schema.ResourceData, meta name := out.ObjectMeta.Name if d.Get("wait_until_bound").(bool) { + var lastEvent api.Event stateConf := &resource.StateChangeConf{ Target: []string{"Bound"}, Pending: []string{"Pending"}, @@ -176,6 +178,20 @@ func resourceKubernetesPersistentVolumeClaimCreate(d *schema.ResourceData, meta return out, "", err } + events, err := conn.CoreV1().Events(metadata.Namespace).List(meta_v1.ListOptions{ + FieldSelector: fields.Set(map[string]string{ + "involvedObject.name": metadata.Name, + "involvedObject.namespace": metadata.Namespace, + "involvedObject.kind": "PersistentVolumeClaim", + }).String(), + }) + if err != nil { + return out, "", err + } + if len(events.Items) > 0 { + lastEvent = events.Items[0] + } + statusPhase := fmt.Sprintf("%v", out.Status.Phase) log.Printf("[DEBUG] Persistent volume claim %s status received: %#v", out.Name, statusPhase) return out, statusPhase, nil @@ -183,7 +199,11 @@ func resourceKubernetesPersistentVolumeClaimCreate(d *schema.ResourceData, meta } _, err = stateConf.WaitForState() if err != nil { - return err + reason := "" + if lastEvent.Reason != "" { + reason = fmt.Sprintf(". Reason: %s: %s", lastEvent.Reason, lastEvent.Message) + } + return fmt.Errorf("%s%s", err, reason) } } log.Printf("[INFO] Persistent volume claim %s created", out.Name)