in cli_tools/common/image/importer/daisy_inflater.go [87:139]
func newDaisyInflater(request ImageImportRequest, fileMetadata imagefile.Metadata, logger logging.Logger) (*daisyInflater, error) {
diskName := getDiskName(request.ExecutionID)
var wfPath string
var vars map[string]string
var inflationDiskIndex int
if isImage(request.Source) {
wfPath = inflateImagePath
vars = map[string]string{
"source_image": request.Source.Path(),
"disk_name": diskName,
"import_license": fmt.Sprintf("projects/%s/global/licenses/virtual-disk-import", param.ReleaseProject),
}
inflationDiskIndex = 0 // Workflow only uses one disk.
} else {
wfPath = inflateFilePath
vars = createDaisyVarsForFile(request, fileMetadata, diskName)
inflationDiskIndex = 1 // First disk is for the worker
}
workflowProvider := func() (*daisy.Workflow, error) {
wf, err := daisyutils.ParseWorkflow(path.Join(request.WorkflowDir, wfPath), vars,
request.Project, request.Zone, request.ScratchBucketGcsPath, request.Oauth, request.Timeout.String(),
request.GcsLogsDisabled, request.CloudLogsDisabled, request.StdoutLogsDisabled)
if err != nil {
return nil, err
}
// If there's a failure during inflation, remove the PD that would otherwise
// be left for translation.
wf.ForceCleanupOnError = true
if request.UefiCompatible {
addFeatureToDisk(wf, "UEFI_COMPATIBLE", inflationDiskIndex)
}
if strings.Contains(request.OS, "windows") {
addFeatureToDisk(wf, "WINDOWS", inflationDiskIndex)
}
return wf, err
}
env := request.EnvironmentSettings()
if env.DaisyLogLinePrefix != "" {
env.DaisyLogLinePrefix += "-"
}
env.DaisyLogLinePrefix += "inflate"
return &daisyInflater{
worker: daisyutils.NewDaisyWorker(workflowProvider, env, logger),
inflatedDiskURI: fmt.Sprintf("zones/%s/disks/%s", request.Zone, diskName),
logger: logger,
source: request.Source,
vars: vars,
}, nil
}