From c537c7271c9266d61bb9fbfe4b3a51a246208a30 Mon Sep 17 00:00:00 2001 From: Justin Santa Barbara Date: Sun, 23 Jul 2017 23:21:50 -0400 Subject: [PATCH 1/2] Avoid panic when cluster not found Based on the stack trace in #3011 Fix #3011 --- cmd/kops/get_instancegroups.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cmd/kops/get_instancegroups.go b/cmd/kops/get_instancegroups.go index f83837214b..6c42caba34 100644 --- a/cmd/kops/get_instancegroups.go +++ b/cmd/kops/get_instancegroups.go @@ -90,6 +90,10 @@ func RunGetInstanceGroups(options *GetInstanceGroupsOptions, args []string) erro return fmt.Errorf("error fetching cluster %q: %v", clusterName, err) } + if cluster == nil { + return fmt.Errorf("cluster %q was not found", clusterName) + } + list, err := clientset.InstanceGroupsFor(cluster).List(metav1.ListOptions{}) if err != nil { return err From 94fceff30a08999caa76db0b3e69890b5ad95167 Mon Sep 17 00:00:00 2001 From: Justin Santa Barbara Date: Sun, 23 Jul 2017 23:25:38 -0400 Subject: [PATCH 2/2] Fix more instances where cluster could be nil Generally check the return value where we can't tolerate it being nil, similar to the case seen in #3011. --- cmd/kops/create.go | 4 ++++ cmd/kops/replace.go | 3 +++ cmd/kops/toolbox_convert_imported.go | 4 ++++ federation/apply_federation.go | 9 +++++++++ 4 files changed, 20 insertions(+) diff --git a/cmd/kops/create.go b/cmd/kops/create.go index f09610fed4..73bf267bcc 100644 --- a/cmd/kops/create.go +++ b/cmd/kops/create.go @@ -176,6 +176,10 @@ func RunCreate(f *util.Factory, out io.Writer, c *CreateOptions) error { return fmt.Errorf("error querying cluster %q: %v", clusterName, err) } + if cluster == nil { + return fmt.Errorf("cluster %q not found", clusterName) + } + _, err = clientset.InstanceGroupsFor(cluster).Create(v) if err != nil { if apierrors.IsAlreadyExists(err) { diff --git a/cmd/kops/replace.go b/cmd/kops/replace.go index 90ceae823f..f6153c8ae0 100644 --- a/cmd/kops/replace.go +++ b/cmd/kops/replace.go @@ -120,6 +120,9 @@ func RunReplace(f *util.Factory, cmd *cobra.Command, out io.Writer, c *ReplaceOp if err != nil { return fmt.Errorf("error fetching cluster %q: %v", clusterName, err) } + if cluster == nil { + return fmt.Errorf("cluster %q not found", clusterName) + } _, err = clientset.InstanceGroupsFor(cluster).Update(v) if err != nil { return fmt.Errorf("error replacing instanceGroup: %v", err) diff --git a/cmd/kops/toolbox_convert_imported.go b/cmd/kops/toolbox_convert_imported.go index c027ce7cc6..4d36988458 100644 --- a/cmd/kops/toolbox_convert_imported.go +++ b/cmd/kops/toolbox_convert_imported.go @@ -104,6 +104,10 @@ func RunToolboxConvertImported(f *util.Factory, out io.Writer, options *ToolboxC return err } + if cluster == nil { + return fmt.Errorf("cluster %q not found", options.ClusterName) + } + list, err := clientset.InstanceGroupsFor(cluster).List(metav1.ListOptions{}) if err != nil { return err diff --git a/federation/apply_federation.go b/federation/apply_federation.go index d8a25d9ae1..9959b44c97 100644 --- a/federation/apply_federation.go +++ b/federation/apply_federation.go @@ -71,6 +71,9 @@ func (o *ApplyFederationOperation) FindKubecfg() (*kubeconfig.KubeconfigBuilder, if err != nil { return nil, fmt.Errorf("error reading cluster %q: %v", controller, err) } + if cluster == nil { + return nil, fmt.Errorf("cluster %q not found", controller) + } context, err := o.federationContextForCluster(cluster) if err != nil { @@ -120,6 +123,9 @@ func (o *ApplyFederationOperation) Run() error { if err != nil { return fmt.Errorf("error reading cluster %q: %v", controller, err) } + if cluster == nil { + return fmt.Errorf("cluster %q not found", controller) + } context, err := o.federationContextForCluster(cluster) if err != nil { @@ -154,6 +160,9 @@ func (o *ApplyFederationOperation) Run() error { if err != nil { return fmt.Errorf("error reading cluster %q: %v", member, err) } + if cluster == nil { + return fmt.Errorf("cluster %q not found", member) + } clusterName := strings.Replace(cluster.Name, ".", "-", -1)