in cli_tools/gce_ovf_export/exporter/ovf_descriptor_generator.go [90:135]
func (g *ovfDescriptorGeneratorImpl) generate(instance *compute.Instance, exportedDisks []*ovfexportdomain.ExportedDisk, diskInspectionResult *pb.InspectionResults) (*ovf.Envelope, error) {
descriptor := &ovf.Envelope{}
descriptor.References = make([]ovf.File, len(exportedDisks))
descriptor.Disk = &ovf.DiskSection{Disks: make([]ovf.VirtualDiskDesc, len(exportedDisks)), Section: ovf.Section{Info: "Virtual disk information"}}
descriptor.VirtualSystem = &ovf.VirtualSystem{Content: ovf.Content{Info: "A GCE virtual machine", ID: instance.Name, Name: &instance.Name}}
descriptor.VirtualSystem.VirtualHardware = make([]ovf.VirtualHardwareSection, 1)
descriptor.VirtualSystem.VirtualHardware[0] = ovf.VirtualHardwareSection{Section: ovf.Section{Info: "Virtual hardware requirements"}}
descriptor.VirtualSystem.VirtualHardware[0].System = &ovf.VirtualSystemSettingData{CIMVirtualSystemSettingData: ovf.CIMVirtualSystemSettingData{ElementName: "Virtual Hardware Family", InstanceID: "0", VirtualSystemIdentifier: &instance.Name}}
// disk controller
discControllerName := "SCSI Controller"
diskController := ovf.ResourceAllocationSettingData{
CIMResourceAllocationSettingData: ovf.CIMResourceAllocationSettingData{
ElementName: discControllerName,
Description: strPtr(discControllerName),
InstanceID: generateVirtualHardwareItemID(descriptor),
ResourceType: func() *uint16 { v := iSCSIController; return &v }(),
},
}
descriptor.VirtualSystem.VirtualHardware[0].Item = append(
descriptor.VirtualSystem.VirtualHardware[0].Item, diskController)
// machine type (CPU, memory)
if err := g.populateMachineType(instance, descriptor); err != nil {
return descriptor, err
}
// disks
// first add boot disk...
for diskIndex, exportedDisk := range exportedDisks {
if exportedDisk.AttachedDisk.Boot {
g.addDisk(exportedDisk, descriptor, diskIndex, diskController.InstanceID)
}
}
//...then data disks
for diskIndex, exportedDisk := range exportedDisks {
if !exportedDisk.AttachedDisk.Boot {
g.addDisk(exportedDisk, descriptor, diskIndex, diskController.InstanceID)
}
}
g.populateOS(descriptor, diskInspectionResult)
return descriptor, nil
}