On Thu, Apr 25, 2024 at 02:12:54PM +0200, Martin Kletzander wrote: > When using vSPC (Virtual Serial Port Concentrator) in vSphere the actual > address for it is saved in serialX.vspc in which case the > serialX.fileName is most probably something we can't get any useful > information from and we also fail during the parsing rendering any > dumpxml and similar tries unsuccessful. > > Instead of parsing the vspc URL with something along the lines of > `virURIParse(vspc ? vspc : fileName)`, which could lead to us reporting > information that is very prune to misuse (the vSPC seemingly has a > protocol on top of the telnet connection; redefining the domain would > change the behaviour; the URL might have a fragment we are not saving; > etc.) or adding more XML knobs to indicate vSPC usage (which we would > not be able to configure; we'd have to properly error out everywhere; > etc.) let's just report dummy serial port that leads to nowhere. > > Resolves: https://issues.redhat.com/browse/RHEL-32182 > Signed-off-by: Martin Kletzander <mkletzan@xxxxxxxxxx> > --- > src/vmx/vmx.c | 12 +++ > tests/vmx2xmldata/esx-in-the-wild-13.vmx | 97 ++++++++++++++++++++++++ > tests/vmx2xmldata/esx-in-the-wild-13.xml | 55 ++++++++++++++ > tests/vmx2xmltest.c | 1 + > 4 files changed, 165 insertions(+) > create mode 100644 tests/vmx2xmldata/esx-in-the-wild-13.vmx > create mode 100644 tests/vmx2xmldata/esx-in-the-wild-13.xml > > diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c > index 5da67aae60d9..32074f62e14c 100644 > --- a/src/vmx/vmx.c > +++ b/src/vmx/vmx.c > @@ -2975,6 +2975,9 @@ virVMXParseSerial(virVMXContext *ctx, virConf *conf, int port, > char fileName_name[48] = ""; > g_autofree char *fileName = NULL; > > + char vspc_name[48] = ""; > + g_autofree char *vspc = NULL; > + > char network_endPoint_name[48] = ""; > g_autofree char *network_endPoint = NULL; > > @@ -2997,6 +3000,7 @@ virVMXParseSerial(virVMXContext *ctx, virConf *conf, int port, > VMX_BUILD_NAME(startConnected); > VMX_BUILD_NAME(fileType); > VMX_BUILD_NAME(fileName); > + VMX_BUILD_NAME(vspc); > VMX_BUILD_NAME_EXTRA(network_endPoint, "network.endPoint"); > > /* vmx:present */ > @@ -3026,6 +3030,10 @@ virVMXParseSerial(virVMXContext *ctx, virConf *conf, int port, > if (virVMXGetConfigString(conf, fileName_name, &fileName, true) < 0) > goto cleanup; > > + /* vmx:fileName -> def:data.file.path */ > + if (virVMXGetConfigString(conf, vspc_name, &vspc, true) < 0) > + goto cleanup; > + > /* vmx:network.endPoint -> def:data.tcp.listen */ > if (virVMXGetConfigString(conf, network_endPoint_name, &network_endPoint, > true) < 0) { > @@ -3057,6 +3065,10 @@ virVMXParseSerial(virVMXContext *ctx, virConf *conf, int port, > (*def)->target.port = port; > (*def)->source->type = VIR_DOMAIN_CHR_TYPE_PIPE; > (*def)->source->data.file.path = g_steal_pointer(&fileName); > + } else if (STRCASEEQ(fileType, "network") && vspc) { > + (*def)->target.port = port; > + (*def)->source->type = VIR_DOMAIN_CHR_TYPE_FILE; > + (*def)->source->data.file.path = g_strdup("/dev/null"); > } else if (STRCASEEQ(fileType, "network")) { > (*def)->target.port = port; > (*def)->source->type = VIR_DOMAIN_CHR_TYPE_TCP; > diff --git a/tests/vmx2xmldata/esx-in-the-wild-13.vmx b/tests/vmx2xmldata/esx-in-the-wild-13.vmx > new file mode 100644 > index 000000000000..1016acab28d8 > --- /dev/null > +++ b/tests/vmx2xmldata/esx-in-the-wild-13.vmx > @@ -0,0 +1,97 @@ > +.encoding = "UTF-8" > +config.version = "8" > +virtualHW.version = "19" > +vmci0.present = "TRUE" > +floppy0.present = "FALSE" > +memSize = "1024" > +tools.upgrade.policy = "manual" > +sched.cpu.units = "mhz" > +vm.createDate = "1704946351823519" > +scsi0.virtualDev = "lsilogic" > +scsi0.present = "TRUE" > +scsi0:0.deviceType = "scsi-hardDisk" > +scsi0:0.fileName = "Test-Mig-VM-1 (01ce57d0-4e20-41a5-8b6c-bcbf49a032ec)_2.vmdk" > +sched.scsi0:0.shares = "normal" > +sched.scsi0:0.throughputCap = "off" > +scsi0:0.present = "TRUE" > +ethernet0.virtualDev = "vmxnet3" > +ethernet0.opaqueNetwork.id = "25c9a00e-dc60-4918-89b7-41c951988366" > +ethernet0.opaqueNetwork.type = "nsx.LogicalSwitch" > +ethernet0.shares = "normal" > +ethernet0.addressType = "static" > +ethernet0.address = "fa:16:3e:bb:2c:4a" > +ethernet0.externalId = "4b57523e-35af-4f8d-b050-1a7410e1a307" > +ethernet0.uptCompatibility = "TRUE" > +ethernet0.present = "TRUE" > +ethernet0.networkName = "Test" > +serial0.fileType = "network" > +serial0.fileName = "ZmVybmV0IGdBQUFBQUJrdFotaW8yclpkRXR6N3dBcDdyYkFMaWFUMVd4RENJSHgtUXpkTlMyTzRRejI3V192QVlOVUY3ZU1SOTNHZXJrN1dGb2stS0EybmpwWFQ4NjJNNlgwc2ZDdmNlOE50eFNhcU1XdlNBTmdhazQ1T1J3LUI5OEZsSDdwMDBZa2R6bWt4Y1Ax" > +serial0.vspc = "telnets://10.28.100.26:18979#thumbprint=18:F5:79:E5:73:A5:22:83:C0:57:B9:B4:FA:CE:60:19:F1:12:F5:7B" > +serial0.yieldOnMsrRead = "TRUE" > +serial0.present = "TRUE" > +displayName = "Test-Mig-VM-1 (01ce57d0-4e20-41a5-8b6c-bcbf49a032ec)" > +annotation = "name:Test-Mig-VM-1|0Auserid:962314ba515c48388a0e95c0961709ff|0Ausername:admin|0Aprojectid:b06b5f77b6bb442f85b1c67cff980ef9|0Aprojectname:MIS|0Aflavor:name:mig-test-flavor|0Aflavor:memory_mb:1024|0Aflavor:vcpus:1|0Aflavor:ephemeral_gb:0|0Aflavor:root_gb:10|0Aflavor:swap:0|0Aimageid:8b90d6fa-20ab-4adf-8015-aad3dddb246c|0Apackage:20.6.2|0A" > +guestOS = "other-64" > +toolScripts.afterPowerOn = "TRUE" > +toolScripts.afterResume = "TRUE" > +toolScripts.beforeSuspend = "TRUE" > +toolScripts.beforePowerOff = "TRUE" > +tools.syncTime = "FALSE" > +uuid.bios = "42 1e b4 58 54 48 fc 12-20 74 83 d5 e4 19 e1 38" > +vc.uuid = "01 ce 57 d0 4e 20 41 a5-8b 6c bc bf 49 a0 32 ec" > +sched.cpu.latencySensitivity = "normal" > +tools.guest.desktop.autolock = "FALSE" > +nvram = "Test-Mig-VM-1 (01ce57d0-4e20-41a5-8b6c-bcbf49a032ec).nvram" > +svga.present = "TRUE" > +pciBridge0.present = "TRUE" > +pciBridge4.present = "TRUE" > +pciBridge4.virtualDev = "pcieRootPort" > +pciBridge4.functions = "8" > +pciBridge5.present = "TRUE" > +pciBridge5.virtualDev = "pcieRootPort" > +pciBridge5.functions = "8" > +pciBridge6.present = "TRUE" > +pciBridge6.virtualDev = "pcieRootPort" > +pciBridge6.functions = "8" > +pciBridge7.present = "TRUE" > +pciBridge7.virtualDev = "pcieRootPort" > +pciBridge7.functions = "8" > +hpet0.present = "TRUE" > +vio.imageId = "8b90d6fa-20ab-4adf-8015-aad3dddb246c" > +nvp.vm-uuid = "01ce57d0-4e20-41a5-8b6c-bcbf49a032ec" > +nvp.iface-id.0 = "4b57523e-35af-4f8d-b050-1a7410e1a307" > +smbios.assetTag = "OpenTelekomCloud" > +root-disk-uuid = "6000C294-db10-e2c6-963f-e4371d3605e8" > +numa.autosize.cookie = "10012" > +numa.autosize.vcpu.maxPerVirtualNode = "1" > +pciBridge0.pciSlotNumber = "17" > +pciBridge4.pciSlotNumber = "21" > +pciBridge5.pciSlotNumber = "22" > +pciBridge6.pciSlotNumber = "23" > +pciBridge7.pciSlotNumber = "24" > +scsi0.pciSlotNumber = "16" > +ethernet0.pciSlotNumber = "160" > +vmotion.checkpointFBSize = "4194304" > +vmotion.checkpointSVGAPrimarySize = "4194304" > +vmotion.svga.mobMaxSize = "4194304" > +vmotion.svga.graphicsMemoryKB = "4096" > +monitor.phys_bits_used = "45" > +softPowerOff = "FALSE" > +ctkEnabled = "TRUE" > +scsi0:0.ctkEnabled = "TRUE" > +svga.guestBackedPrimaryAware = "TRUE" > +viv.moid = "bd916f5e-a90b-46db-98e8-ce974fef34f4:vm-29145:1NineJhqocLZEZ6JOxn/hLdjlihTelLVQGc8mmAj3nA=" > +migrate.hostLog = "Test-Mig-VM-1 (01ce57d0-4e20-41a5-8b6c-bcbf49a032ec)-7cedc035.hlog" > +sched.cpu.min = "0" > +sched.cpu.shares = "normal" > +sched.mem.min = "0" > +sched.mem.minSize = "0" > +sched.mem.shares = "normal" > +migrate.encryptionMode = "opportunistic" > +ftcpt.ftEncryptionMode = "ftEncryptionOpportunistic" > +sched.swap.derivedName = "/vmfs/volumes/642eff9a-0df93507-cca5-5c6f69c57c70/Test-Mig-VM-1 (01ce57d0-4e20-41a5-8b6c-bcbf49a032ec)/Test-Mig-VM-1 (01ce57d0-4e20-41a5-8b6c-bcbf49a032ec)-69fcc9f7.vswp" > +uuid.location = "56 4d c2 6b 03 eb b2 44-eb 36 8a 83 de 3f bd b6" > +scsi0:0.redo = "" > +vmci0.id = "-468065992" > +cleanShutdown = "TRUE" > +vmxstats.filename = "Test-Mig-VM-1 (01ce57d0-4e20-41a5-8b6c-bcbf49a032ec).scoreboard" > diff --git a/tests/vmx2xmldata/esx-in-the-wild-13.xml b/tests/vmx2xmldata/esx-in-the-wild-13.xml > new file mode 100644 > index 000000000000..689282747779 > --- /dev/null > +++ b/tests/vmx2xmldata/esx-in-the-wild-13.xml > @@ -0,0 +1,55 @@ > +<domain type='vmware'> > + <name>Test-Mig-VM-1 (01ce57d0-4e20-41a5-8b6c-bcbf49a032ec)</name> > + <uuid>421eb458-5448-fc12-2074-83d5e419e138</uuid> > + <description>name:Test-Mig-VM-1 > +userid:962314ba515c48388a0e95c0961709ff > +username:admin > +projectid:b06b5f77b6bb442f85b1c67cff980ef9 > +projectname:MIS > +flavor:name:mig-test-flavor > +flavor:memory_mb:1024 > +flavor:vcpus:1 > +flavor:ephemeral_gb:0 > +flavor:root_gb:10 > +flavor:swap:0 > +imageid:8b90d6fa-20ab-4adf-8015-aad3dddb246c > +package:20.6.2 > +</description> > + <memory unit='KiB'>1048576</memory> > + <currentMemory unit='KiB'>1048576</currentMemory> > + <vcpu placement='static'>1</vcpu> > + <cputune> > + <shares>1000</shares> > + </cputune> > + <os> > + <type arch='x86_64'>hvm</type> > + </os> > + <clock offset='utc'/> > + <on_poweroff>destroy</on_poweroff> > + <on_reboot>restart</on_reboot> > + <on_crash>destroy</on_crash> > + <devices> > + <disk type='file' device='disk'> > + <source file='[datastore] directory/Test-Mig-VM-1 (01ce57d0-4e20-41a5-8b6c-bcbf49a032ec)_2.vmdk'/> > + <target dev='sda' bus='scsi'/> > + <address type='drive' controller='0' bus='0' target='0' unit='0'/> > + </disk> > + <controller type='scsi' index='0' model='lsilogic'/> > + <interface type='bridge'> > + <mac address='fa:16:3e:bb:2c:4a' type='static'/> > + <source bridge='Test'/> > + <model type='vmxnet3'/> > + </interface> > + <serial type='file'> > + <source path='/dev/null'/> > + <target port='0'/> > + </serial> > + <console type='file'> > + <source path='/dev/null'/> > + <target type='serial' port='0'/> > + </console> > + <video> > + <model type='vmvga' vram='4096' primary='yes'/> > + </video> > + </devices> > +</domain> > diff --git a/tests/vmx2xmltest.c b/tests/vmx2xmltest.c > index 785eee6d3002..0fb5f13f72ce 100644 > --- a/tests/vmx2xmltest.c > +++ b/tests/vmx2xmltest.c > @@ -263,6 +263,7 @@ mymain(void) > DO_TEST("esx-in-the-wild-10"); > DO_TEST("esx-in-the-wild-11"); > DO_TEST("esx-in-the-wild-12"); > + DO_TEST("esx-in-the-wild-13"); > > DO_TEST("gsx-in-the-wild-1"); > DO_TEST("gsx-in-the-wild-2"); > -- >From the point of view of virt-v2v: ACK I don't care if the path is /dev/null or nothing, as virt-v2v will ignore the serial port. Most important thing is not to fail. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com libguestfs lets you edit virtual machines. Supports shell scripting, bindings from many languages. http://libguestfs.org _______________________________________________ Devel mailing list -- devel@xxxxxxxxxxxxxxxxx To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxx