From d4cbea5902b6ddfb1091ee69e9ae46e350bb6cd6 Mon Sep 17 00:00:00 2001 From: xiangpengzhao Date: Wed, 19 Apr 2017 16:03:08 +0800 Subject: [PATCH 1/2] Fix panic when using `kubeadm init` with vsphere cloud-provider --- pkg/cloudprovider/providers/vsphere/vsphere.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkg/cloudprovider/providers/vsphere/vsphere.go b/pkg/cloudprovider/providers/vsphere/vsphere.go index a3c3d156d6..70119e6e37 100644 --- a/pkg/cloudprovider/providers/vsphere/vsphere.go +++ b/pkg/cloudprovider/providers/vsphere/vsphere.go @@ -262,6 +262,10 @@ func getVMName(client *govmomi.Client, cfg *VSphereConfig) (string, error) { return "", err } + if svm == nil { + return "", fmt.Errorf("unable to find machine reference by UUID") + } + var vm mo.VirtualMachine err = s.Properties(ctx, svm.Reference(), []string{"name"}, &vm) if err != nil { From be3fd5bb90e870828e797582d57a813d740bf30a Mon Sep 17 00:00:00 2001 From: xiangpengzhao Date: Wed, 19 Apr 2017 17:16:39 +0800 Subject: [PATCH 2/2] Add test case for getVMName --- .../providers/vsphere/vsphere_test.go | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/pkg/cloudprovider/providers/vsphere/vsphere_test.go b/pkg/cloudprovider/providers/vsphere/vsphere_test.go index b68f8c2c89..ffb91a6e6f 100644 --- a/pkg/cloudprovider/providers/vsphere/vsphere_test.go +++ b/pkg/cloudprovider/providers/vsphere/vsphere_test.go @@ -248,3 +248,36 @@ func TestVolumes(t *testing.T) { // t.Fatalf("Cannot delete VMDK volume %s: %v", volPath, err) // } } + +func TestGetVMName(t *testing.T) { + cfg, ok := configFromEnv() + if !ok { + t.Skipf("No config found in environment") + } + + // Create vSphere configuration object + vs, err := newVSphere(cfg) + if err != nil { + t.Fatalf("Failed to construct/authenticate vSphere: %s", err) + } + + // Create context + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + // Create vSphere client + err = vSphereLogin(ctx, vs) + if err != nil { + t.Errorf("Failed to create vSpere client: %s", err) + } + defer vs.client.Logout(ctx) + + // Get VM name + vmName, err := getVMName(vs.client, &cfg) + if err != nil { + t.Fatalf("Failed to get VM name: %s", err) + } + if vmName != "vmname" { + t.Errorf("Expect VM name 'vmname', got: %s", vmName) + } +}