in gke-windows-builder/builder/builder/gce.go [564:587]
func (s *Server) waitForComputeOperation(op *compute.Operation) error {
log.Printf("Waiting for %+v to complete", op.Name)
timeout := time.Now().Add(300 * time.Second)
for time.Now().Before(timeout) {
newop, err := s.service.ZoneOperations.Get(s.projectID, s.zone, op.Name).Do()
if err != nil {
log.Printf("Failed to update operation status: %v", err)
return err
}
if newop.Status == "DONE" {
if newop.Error == nil || len(newop.Error.Errors) == 0 {
return nil
}
//Operation Error
for _, opError := range newop.Error.Errors {
fmt.Printf("Operation Error. Code: %s, Location: %s, Message: %s :", opError.Code, opError.Location, opError.Message)
}
return fmt.Errorf("Compute operation %s completed with errors", op.Name)
}
time.Sleep(1 * time.Second)
}
err := fmt.Errorf("Compute operation %s timed out", op.Name)
return err
}