为了账号安全,请及时绑定邮箱和手机立即绑定

无法使用 golang 停止 GCP 实例

无法使用 golang 停止 GCP 实例

Go
不负相思意 2023-06-26 15:43:23
我正在尝试学习 golang,并决定构建一个简单的应用程序来停止我的 gcloud 项目中的实例。下面是相关片段。func stopTaggedMachines(svc *compute.Service, project, zone, tag string) ([]string, error) {    //result := computeService.Instances.List("my-project", "us-west1-b")    var instances []string    f := func(page *compute.InstanceList) error {        for _, v := range page.Items {            if v.Labels["gcp-idler-managed"] == "true" {                result := svc.Instances.Stop(project, zone, v.Name)                fmt.Printf("[INFO] gcp-machine-idler: Instance in state %v, Stopping %v... Result - %v\n", v.Status, v.Name, result)                instances.append(result)            }        }        return nil    }    call := svc.Instances.List("my-project", "us-west1-b")    if err := call.Pages(oauth2.NoContext, f); err != nil {        return instances, nil    }    return instances, nil}func main() {    // Use oauth2.NoContext if there isn't a good context to pass in.    ctx := context.Background()    computeService, err := compute.NewService(ctx)    if err != nil {        log.Fatal(err)    }    stopTaggedMachines(computeService, "my-project", "us-west1-b", "gcp-idler-managed")    return}当我运行时,go run main.go我得到的输出表明机器处于运行状态(所以我知道我已经到达停止线)。然而,机器从未停止。我有点困惑这里可能出了什么问题,或者(更重要的是)如何找到可以帮助我的资源。我的代码是否存在逻辑缺陷?更有经验的 Go 开发人员如何找到有关此方法及其用法的更多信息?从我能找到的来看,文档似乎相当稀疏。回答:更新了代码片段...stopTaggedMachines像这样打电话stopTaggedMachines(ctx, computeService, "my-project", "us-west1-b", "gcp-idler-managed")Stop像这样打电话result, err := svc.Instances.Stop(project, zone, v.Name).Context(ctx).Do()
查看完整描述

1 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

更改这行代码:

result := svc.Instances.Stop(project, zone, v.Name)

到:

result, err := svc.Instances.Stop(project, zone, v.Name).Context(ctx).Do()


查看完整回答
反对 回复 2023-06-26
  • 1 回答
  • 0 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信