mirror of
https://github.com/opentofu/opentofu.git
synced 2025-01-02 12:17:39 -06:00
6fe2703665
* Remove `make updatedeps` from Travis build. We'll follow up with more specific plans around dependency updating in subsequent PRs. * Update all `make` targets to set `GO15VENDOREXPERIMENT=1` and to filter out `/vendor/` from `./...` where appropriate. * Temporarily remove `vet` from the `make test` target until we can figure out how to get it to not vet `vendor/`. (Initial experimentation failed to yield the proper incantation.) Everything is pinned to current master, with the exception of: * Azure/azure-sdk-for-go which is pinned before the breaking change today * aws/aws-sdk-go which is pinned to the most recent tag The documentation still needs to be updated, which we can do in a follow up PR. The goal here is to unblock release.
78 lines
1.6 KiB
Go
78 lines
1.6 KiB
Go
/*
|
|
* Copyright 2014 VMware, Inc. All rights reserved. Licensed under the Apache v2 License.
|
|
*/
|
|
|
|
package govcd
|
|
|
|
import (
|
|
"fmt"
|
|
"net/url"
|
|
"time"
|
|
|
|
types "github.com/hmrc/vmware-govcd/types/v56"
|
|
)
|
|
|
|
type Task struct {
|
|
Task *types.Task
|
|
c *Client
|
|
}
|
|
|
|
func NewTask(c *Client) *Task {
|
|
return &Task{
|
|
Task: new(types.Task),
|
|
c: c,
|
|
}
|
|
}
|
|
|
|
func (t *Task) Refresh() error {
|
|
|
|
if t.Task == nil {
|
|
return fmt.Errorf("cannot refresh, Object is empty")
|
|
}
|
|
|
|
u, _ := url.ParseRequestURI(t.Task.HREF)
|
|
|
|
req := t.c.NewRequest(map[string]string{}, "GET", *u, nil)
|
|
|
|
resp, err := checkResp(t.c.Http.Do(req))
|
|
if err != nil {
|
|
return fmt.Errorf("error retrieving task: %s", err)
|
|
}
|
|
|
|
// Empty struct before a new unmarshal, otherwise we end up with duplicate
|
|
// elements in slices.
|
|
t.Task = &types.Task{}
|
|
|
|
if err = decodeBody(resp, t.Task); err != nil {
|
|
return fmt.Errorf("error decoding task response: %s", err)
|
|
}
|
|
|
|
// The request was successful
|
|
return nil
|
|
}
|
|
|
|
func (t *Task) WaitTaskCompletion() error {
|
|
|
|
if t.Task == nil {
|
|
return fmt.Errorf("cannot refresh, Object is empty")
|
|
}
|
|
|
|
for {
|
|
err := t.Refresh()
|
|
if err != nil {
|
|
return fmt.Errorf("error retreiving task: %s", err)
|
|
}
|
|
|
|
// If task is not in a waiting status we're done, check if there's an error and return it.
|
|
if t.Task.Status != "queued" && t.Task.Status != "preRunning" && t.Task.Status != "running" {
|
|
if t.Task.Status == "error" {
|
|
return fmt.Errorf("task did not complete succesfully: %s", t.Task.Description)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Sleep for 3 seconds and try again.
|
|
time.Sleep(3 * time.Second)
|
|
}
|
|
}
|