func()

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
}