func()

in cli_tools/gce_onestep_image_import/onestep_importer/aws_importer.go [347:388]


func (importer *awsImporter) monitorAWSExportImageTask(taskID string) error {
	if importer.monitorAWSExportImageTaskFn != nil {
		return importer.monitorAWSExportImageTaskFn()
	}

	describeExportInput := &ec2.DescribeExportImageTasksInput{
		ExportImageTaskIds: []*string{aws.String(taskID)},
	}
	var taskStatus, taskStatusMessage, taskProgress string

	for {
		output, err := importer.ec2Client.DescribeExportImageTasks(describeExportInput)
		if err != nil {
			return daisy.Errf("failed to get export task status: %v", err)
		}
		if len(output.ExportImageTasks) != 1 {
			return daisy.Errf("failed to get export task status: unexpected response")
		}
		taskStatus, taskStatusMessage, taskProgress = getExportImageTask(output.ExportImageTasks[0])

		if taskStatus != "active" {
			if taskStatus != "completed" {
				return daisy.Errf("AWS export task wasn't completed successfully")
			}
			log.Println("AWS export task is completed!")
			break
		}

		log.Printf("AWS export task status: %v, status message: %v, "+
			"progress: %v.\n", taskStatus, taskStatusMessage, taskProgress)

		select {
		case <-importer.timeoutChan:
			return daisy.Errf("timeout exceeded during image export")
		default:
			// Did not timeout, continue to check task status.
		}

		time.Sleep(time.Second * 10)
	}
	return nil
}