diff --git a/pkg/cloudprovider/providers/gce/gce_instances.go b/pkg/cloudprovider/providers/gce/gce_instances.go index c6e31dee61e..0d551a29dd0 100644 --- a/pkg/cloudprovider/providers/gce/gce_instances.go +++ b/pkg/cloudprovider/providers/gce/gce_instances.go @@ -294,6 +294,24 @@ func (gce *GCECloud) GetAllZones() (sets.String, error) { return zones, nil } +// ListInstanceNames returns a string of instance names seperated by spaces. +func (gce *GCECloud) ListInstanceNames(project, zone string) (string, error) { + res, err := gce.service.Instances.List(project, zone).Fields("items(name)").Do() + if err != nil { + return "", err + } + var output string + for _, item := range res.Items { + output += item.Name + " " + } + return output, nil +} + +// DeleteInstance deletes an instance specified by project, zone, and name +func (gce *GCECloud) DeleteInstance(project, zone, name string) (*compute.Operation, error) { + return gce.service.Instances.Delete(project, zone, name).Do() +} + // Implementation of Instances.CurrentNodeName func (gce *GCECloud) CurrentNodeName(hostname string) (types.NodeName, error) { return types.NodeName(hostname), nil diff --git a/test/e2e/storage/pd.go b/test/e2e/storage/pd.go index 68ae3afdc00..5885f7c4d2c 100644 --- a/test/e2e/storage/pd.go +++ b/test/e2e/storage/pd.go @@ -19,7 +19,6 @@ package storage import ( "fmt" mathrand "math/rand" - "os/exec" "strings" "time" @@ -450,16 +449,18 @@ var _ = SIGDescribe("Pod Disks", func() { // Verify that disk shows up in node 0's volumeInUse list framework.ExpectNoError(waitForPDInVolumesInUse(nodeClient, diskName, host0Name, nodeStatusTimeout, true /* should exist*/)) - output, err := exec.Command("gcloud", "compute", "instances", "list", "--project="+framework.TestContext.CloudConfig.ProjectID).CombinedOutput() + gceCloud, err := framework.GetGCECloud() + framework.ExpectNoError(err, fmt.Sprintf("Unable to create gcloud client err=%v", err)) + + output, err := gceCloud.ListInstanceNames(framework.TestContext.CloudConfig.ProjectID, framework.TestContext.CloudConfig.Zone) framework.ExpectNoError(err, fmt.Sprintf("Unable to get list of node instances err=%v output=%s", err, output)) Expect(true, strings.Contains(string(output), string(host0Name))) By("deleting host0") + resp, err := gceCloud.DeleteInstance(framework.TestContext.CloudConfig.ProjectID, framework.TestContext.CloudConfig.Zone, string(host0Name)) + framework.ExpectNoError(err, fmt.Sprintf("Failed to delete host0pod: err=%v response=%#v", err, resp)) - output, err = exec.Command("gcloud", "compute", "instances", "delete", string(host0Name), "--project="+framework.TestContext.CloudConfig.ProjectID, "--zone="+framework.TestContext.CloudConfig.Zone).CombinedOutput() - framework.ExpectNoError(err, fmt.Sprintf("Failed to delete host0pod: err=%v output=%s", err, output)) - - output, err = exec.Command("gcloud", "compute", "instances", "list", "--project="+framework.TestContext.CloudConfig.ProjectID).CombinedOutput() + output, err = gceCloud.ListInstanceNames(framework.TestContext.CloudConfig.ProjectID, framework.TestContext.CloudConfig.Zone) framework.ExpectNoError(err, fmt.Sprintf("Unable to get list of node instances err=%v output=%s", err, output)) Expect(false, strings.Contains(string(output), string(host0Name)))