func()

in cli_tools/gce_ovf_export/exporter/instance_disks_exporter.go [110:165]


func (ide *instanceDisksExporterImpl) addExportDisksSteps(w *daisy.Workflow, instance *compute.Instance, params *ovfexportdomain.OVFExportArgs) ([]*ovfexportdomain.ExportedDisk, error) {
	if instance == nil || len(instance.Disks) == 0 {
		return nil, daisy.Errf("No attachedDisks found in the Instance to export")
	}
	attachedDisks := instance.Disks
	var exportedDisks []*ovfexportdomain.ExportedDisk

	for i, attachedDisk := range attachedDisks {
		indexOfProjects := strings.Index(attachedDisk.Source, "projects/")
		if indexOfProjects < 0 {
			return nil, daisy.Errf("Disk source `%v` is invalid.", attachedDisk.Source)
		}
		diskPath := attachedDisk.Source[indexOfProjects:]
		var exportedDiskFileName string
		if strings.HasPrefix(attachedDisk.DeviceName, params.OvfName) {
			exportedDiskFileName = fmt.Sprintf("%v.%v", attachedDisk.DeviceName, params.DiskExportFormat)
		} else {
			exportedDiskFileName = fmt.Sprintf("%v-%v.%v", params.OvfName, attachedDisk.DeviceName, params.DiskExportFormat)
		}
		exportedDiskGCSPath := fmt.Sprintf("%v%v", params.DestinationDirectory, exportedDiskFileName)
		exportedDisks = append(exportedDisks, &ovfexportdomain.ExportedDisk{AttachedDisk: attachedDisk, GcsPath: exportedDiskGCSPath})

		exportDiskStepName := fmt.Sprintf(
			"export-disk-%v-%v",
			i,
			stringutils.Substring(attachedDisk.DeviceName,
				0,
				63-len("detach-disk-")-len("disk--buffer-12345")-len(strconv.Itoa(i))-2),
		)
		exportDiskStepName = strings.Trim(exportDiskStepName, "-")
		exportDiskStep := daisy.NewStepDefaultTimeout(exportDiskStepName, w)

		varMap := map[string]string{
			"source_disk":                diskPath,
			"destination":                exportedDiskGCSPath,
			"format":                     params.DiskExportFormat,
			"export_instance_disk_image": "projects/compute-image-import/global/images/family/debian-11-worker",
			"export_instance_disk_size":  "200",
			"export_instance_disk_type":  "pd-ssd",
			"export_network":             params.Network,
			"export_subnet":              params.Subnet,
			"export_disk_ext.sh":         "../export/export_disk_ext.sh",
			"disk_resizing_mon.sh":       "../export/disk_resizing_mon.sh",
		}
		if params.ComputeServiceAccount != "" {
			varMap["compute_service_account"] = params.ComputeServiceAccount
		}
		var err daisy.DError
		exportDiskStep.IncludeWorkflow, err = instantiateIncludedWorkflow(w, path.Join(params.WorkflowDir, "/export/disk_export_ext.wf.json"), varMap)
		if err != nil {
			return nil, err
		}
		w.Steps[exportDiskStepName] = exportDiskStep
	}
	return exportedDisks, nil
}