Невозможно остановить экземпляр GCP с помощью golang - PullRequest
1 голос
/ 15 июня 2019

Я пытаюсь изучить 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, я получаю вывод, что машина была найдена в работающем состоянии (так что я знаю, что достиг линии остановки). Однако машина никогда не останавливается. Я немного озадачен тем, что здесь может пойти не так, или (что более важно), как найти ресурсы, которые могут мне помочь.

Есть ли логический недостаток в моем коде? Как более опытный разработчик может найти больше информации об этом методе и его использовании? Документы кажутся довольно редкими из того, что я могу найти.


Отвечено : Обновлен фрагмент кода ...

Позвоните 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 Ответ

1 голос
/ 16 июня 2019

Изменить эту строку кода:

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

Кому:

result, err := svc.Instances.Stop(project, zone, v.Name).Context(ctx).Do()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...