使用virt-install创建虚拟机时如何添加多个带标签VLAN
使用virt-install配置多VLAN Trunk的正确XPath语法
问题场景
在使用virt-install部署虚拟机时,需要配置一个带有多个VLAN标签的Trunk模式网络接口。当前执行的命令尝试通过--xml参数添加VLAN配置,但新增的--xml参数会直接覆盖之前的配置,无法生成包含多个<tag>节点的目标DOMXML结构。
当前执行的命令:
srv01:~$ sudo virt-install \ --name=ds-controller01.iwc.ig24 \ --disk source.dev=/dev/vg_ig24.iwc.srv01_ssd/lv_ig24.iwc.ds-controller01_root \ --graphics spice \ --vcpu=2 \ --ram=2048 \ --os-type=debian10 \ --accelerate \ --cdrom=/srv/iso/debian-11.iso \ --network bridge=br0,model=virtio,virtualport_type=openvswitch,mac=$(newmac) \ --xml './devices/interface/vlan[@trunk=yes]/tag/@id=100' \ --xml './devices/interface/target/@dev=ds-controller01'
目标DOMXML结构(网络接口部分):
<interface type='bridge'> <mac address='52:54:00:57:df:60'/> <source bridge='br0'/> <vlan trunk='yes'> <tag id='100'/> <tag id='200'/> <tag id='300'/> </vlan> <virtualport type='openvswitch'> <parameters interfaceid='23f46a9d-4abf-443e-bdea-6915b95c0042'/> </virtualport> <target dev='ds-controller01'/> <model type='virtio'/> <alias name='net0'/> <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> </interface>
解决方案
问题出在--xml参数的XPath语法上:直接使用/tag/@id=xxx会修改已存在的<tag>节点属性,而非新增节点。要添加多个<tag>,需使用+符号指定新增子节点。
正确的命令格式
在添加第二个及后续VLAN标签时,使用+tag来创建新的<tag>节点,而非修改已有节点:
srv01:~$ sudo virt-install \ --name=ds-controller01.iwc.ig24 \ --disk source.dev=/dev/vg_ig24.iwc.srv01_ssd/lv_ig24.iwc.ds-controller01_root \ --graphics spice \ --vcpu=2 \ --ram=2048 \ --os-type=debian10 \ --accelerate \ --cdrom=/srv/iso/debian-11.iso \ --network bridge=br0,model=virtio,virtualport_type=openvswitch,mac=$(newmac) \ --xml './devices/interface/vlan[@trunk="yes"]/tag/@id=100' \ --xml './devices/interface/vlan[@trunk="yes"]/+tag/@id=200' \ --xml './devices/interface/vlan[@trunk="yes"]/+tag/@id=300' \ --xml './devices/interface/target/@dev=ds-controller01'
语法说明
./devices/interface/vlan[@trunk="yes"]/tag/@id=100:创建<vlan trunk="yes">节点,并添加第一个<tag id="100">子节点./devices/interface/vlan[@trunk="yes"]/+tag/@id=200:在已存在的<vlan>节点下新增一个<tag id="200">子节点(+符号表示新增)- 同理,
+tag/@id=300用于添加第三个VLAN标签
执行该命令后,生成的DOMXML将包含多个<tag>节点,与目标结构一致。
内容的提问来源于stack exchange,提问作者FrozenCryptid
相关产品推荐
相关产品推荐

