func newDaisyInflater()

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
}