diff --git a/cmd/kops/validate_cluster.go b/cmd/kops/validate_cluster.go index 8c38bd0125..7a54d449ff 100644 --- a/cmd/kops/validate_cluster.go +++ b/cmd/kops/validate_cluster.go @@ -187,7 +187,6 @@ func validateClusterOutputTable(result *validation.ValidationCluster, cluster *a fmt.Fprintln(out, "INSTANCE GROUPS") err := t.Render(instanceGroups, out, "NAME", "ROLE", "MACHINETYPE", "MIN", "MAX", "SUBNETS") - if err != nil { return fmt.Errorf("cannot render nodes for %q: %v", cluster.Name, err) } diff --git a/pkg/validation/validate_cluster.go b/pkg/validation/validate_cluster.go index 8c28d7fd5d..4dc0c5c083 100644 --- a/pkg/validation/validate_cluster.go +++ b/pkg/validation/validate_cluster.go @@ -20,6 +20,7 @@ import ( "fmt" "net" "net/url" + "strings" "github.com/golang/glog" "k8s.io/api/core/v1" @@ -185,15 +186,28 @@ func (v *ValidationCluster) collectPodFailures(client kubernetes.Interface) erro if pod.Status.Phase == v1.PodSucceeded { continue } - for _, status := range pod.Status.ContainerStatuses { - if !status.Ready { - v.addError(&ValidationError{ - Kind: "Pod", - Name: "kube-system/" + pod.Name, - Message: fmt.Sprintf("kube-system pod %q is not healthy", pod.Name), - }) + if pod.Status.Phase == v1.PodPending { + v.addError(&ValidationError{ + Kind: "Pod", + Name: "kube-system/" + pod.Name, + Message: fmt.Sprintf("kube-system pod %q is pending", pod.Name), + }) + continue + } + var notready []string + for _, container := range pod.Status.ContainerStatuses { + if !container.Ready { + notready = append(notready, container.Name) } } + if len(notready) != 0 { + v.addError(&ValidationError{ + Kind: "Pod", + Name: "kube-system/" + pod.Name, + Message: fmt.Sprintf("kube-system pod %q is not ready (%s)", pod.Name, strings.Join(notready, ",")), + }) + + } } return nil }