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
}