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
}