func()

in cli_tools/common/image/importer/metadata_processor.go [77:114]


func (p *metadataProcessor) stageRequestForNewDisk(pd persistentDisk) (newDisk *compute.Disk, cloneRequired bool, err error) {

	diskName := daisyutils.GetResourceID(pd.uri)
	currentDisk, err := p.computeDiskClient.GetDisk(p.project, p.zone, diskName)
	if err != nil {
		return nil, false, daisy.Errf("Failed to get disk: %v", err)
	}

	newDiskName := daisyutils.GenerateValidDisksImagesName(fmt.Sprintf("%v-1", diskName))

	newDisk = &compute.Disk{
		Name:       newDiskName,
		SourceDisk: pd.uri,
	}
	if len(currentDisk.GuestOsFeatures) > 0 {
		newDisk.GuestOsFeatures = make([]*compute.GuestOsFeature, len(currentDisk.GuestOsFeatures))
		copy(newDisk.GuestOsFeatures, currentDisk.GuestOsFeatures)
	}
	if len(currentDisk.Licenses) > 0 {
		newDisk.Licenses = make([]string, len(currentDisk.Licenses))
		copy(newDisk.Licenses, currentDisk.Licenses)
	}

	cloneRequired = false
	for _, feature := range p.requiredFeatures {
		if !hasGuestOSFeature(currentDisk, feature) {
			newDisk.GuestOsFeatures = append(newDisk.GuestOsFeatures, feature)
			cloneRequired = true
		}
	}
	for _, license := range p.requiredLicenses {
		if !hasLicense(currentDisk, license) {
			newDisk.Licenses = append(newDisk.Licenses, license)
			cloneRequired = true
		}
	}
	return newDisk, cloneRequired, nil
}