Skip to content

Commit 70e7578

Browse files
committed
Get vlan from bridge name while importing kvm instances
1 parent 25f93b1 commit 70e7578

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParser.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,12 @@ public boolean parseDomainXML(String domXML) {
240240
} else if (type.equalsIgnoreCase("bridge")) {
241241
String bridge = getAttrValue("source", "bridge", nic);
242242
def.defBridgeNet(bridge, dev, mac, NicModel.valueOf(model.toUpperCase()), networkRateKBps);
243+
if (StringUtils.isNotBlank(bridge)) {
244+
Integer vlanId = extractVlanFromBridgeName(bridge);
245+
if (vlanId != null) {
246+
def.setVlanTag(vlanId);
247+
}
248+
}
243249
} else if (type.equalsIgnoreCase("ethernet")) {
244250
String scriptPath = getAttrValue("script", "path", nic);
245251
def.defEthernet(dev, mac, NicModel.valueOf(model.toUpperCase()), scriptPath, networkRateKBps);
@@ -567,4 +573,22 @@ private void extractCpuModeDef(final Element rootElement){
567573
}
568574
}
569575
}
576+
577+
private Integer extractVlanFromBridgeName(String bridge) {
578+
if (!bridge.startsWith("br")) {
579+
return null;
580+
}
581+
String[] splitByDash = bridge.split("-");
582+
if (splitByDash.length < 2) {
583+
return null;
584+
}
585+
try {
586+
Integer vlanId = Integer.parseInt(splitByDash[splitByDash.length - 1]);
587+
if (vlanId >=1 && vlanId <= 4094) {
588+
return vlanId;
589+
}
590+
} catch (NumberFormatException e) {
591+
}
592+
return null;
593+
}
570594
}

ui/src/views/compute/wizard/MultiNetworkSelection.vue

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
<a-select
4848
style="width: 100%"
4949
v-if="validNetworks[record.id] && validNetworks[record.id].length > 0"
50-
:defaultValue="validNetworks[record.id][0].id"
50+
:defaultValue="getDefaultNetwork(record)"
5151
@change="val => handleNetworkChange(record, val)"
5252
showSearch
5353
optionFilterProp="label"
@@ -280,6 +280,18 @@ export default {
280280
}
281281
this.sendValuesTimed()
282282
},
283+
getDefaultNetwork (record) {
284+
console.log('getDefaultNetwork', record, this.values, this.validNetworks)
285+
if (record.vlanid) {
286+
const matched = this.validNetworks[record.id].filter(x => Number(x.vlan) === record.vlanid)
287+
console.log('matched', matched)
288+
if (matched.length > 0) {
289+
this.handleNetworkChange(record, matched[0].id)
290+
return matched[0].id
291+
}
292+
}
293+
return this.validNetworks[record.id][0].id
294+
},
283295
sendValuesTimed () {
284296
clearTimeout(this.sendValuesTimer)
285297
this.sendValuesTimer = setTimeout(() => {

0 commit comments

Comments
 (0)