func()

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
}