mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
kvm: add ssvm storage nic null uri check during plug (#11557)
* kvm: add ssvm storage nic null uri check during plug Fixes #11552 Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com> * refactor Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com> --------- Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com>
This commit is contained in:
parent
db5b6a54a1
commit
adec5f439d
@ -184,6 +184,21 @@ public class BridgeVifDriver extends VifDriverBase {
|
|||||||
return vNetId != null && protocol != null && !vNetId.equalsIgnoreCase("untagged");
|
return vNetId != null && protocol != null && !vNetId.equalsIgnoreCase("untagged");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected String createStorageVnetBridgeIfNeeded(NicTO nic, String trafficLabel,
|
||||||
|
String storageBrName) throws InternalErrorException {
|
||||||
|
if (!Networks.BroadcastDomainType.Storage.equals(nic.getBroadcastType()) || nic.getBroadcastUri() == null) {
|
||||||
|
return storageBrName;
|
||||||
|
}
|
||||||
|
String vNetId = Networks.BroadcastDomainType.getValue(nic.getBroadcastUri());
|
||||||
|
String protocol = Networks.BroadcastDomainType.Vlan.scheme();
|
||||||
|
if (!isValidProtocolAndVnetId(vNetId, protocol)) {
|
||||||
|
return storageBrName;
|
||||||
|
}
|
||||||
|
logger.debug(String.format("creating a vNet dev and bridge for %s traffic per traffic label %s",
|
||||||
|
Networks.TrafficType.Storage.name(), trafficLabel));
|
||||||
|
return createVnetBr(vNetId, storageBrName, protocol);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LibvirtVMDef.InterfaceDef plug(NicTO nic, String guestOsType, String nicAdapter, Map<String, String> extraConfig) throws InternalErrorException, LibvirtException {
|
public LibvirtVMDef.InterfaceDef plug(NicTO nic, String guestOsType, String nicAdapter, Map<String, String> extraConfig) throws InternalErrorException, LibvirtException {
|
||||||
|
|
||||||
@ -250,15 +265,7 @@ public class BridgeVifDriver extends VifDriverBase {
|
|||||||
intf.defBridgeNet(_bridges.get("private"), null, nic.getMac(), getGuestNicModel(guestOsType, nicAdapter));
|
intf.defBridgeNet(_bridges.get("private"), null, nic.getMac(), getGuestNicModel(guestOsType, nicAdapter));
|
||||||
} else if (nic.getType() == Networks.TrafficType.Storage) {
|
} else if (nic.getType() == Networks.TrafficType.Storage) {
|
||||||
String storageBrName = nic.getName() == null ? _bridges.get("private") : nic.getName();
|
String storageBrName = nic.getName() == null ? _bridges.get("private") : nic.getName();
|
||||||
if (nic.getBroadcastType() == Networks.BroadcastDomainType.Storage) {
|
storageBrName = createStorageVnetBridgeIfNeeded(nic, trafficLabel, storageBrName);
|
||||||
vNetId = Networks.BroadcastDomainType.getValue(nic.getBroadcastUri());
|
|
||||||
protocol = Networks.BroadcastDomainType.Vlan.scheme();
|
|
||||||
}
|
|
||||||
if (isValidProtocolAndVnetId(vNetId, protocol)) {
|
|
||||||
logger.debug(String.format("creating a vNet dev and bridge for %s traffic per traffic label %s",
|
|
||||||
Networks.TrafficType.Storage.name(), trafficLabel));
|
|
||||||
storageBrName = createVnetBr(vNetId, storageBrName, protocol);
|
|
||||||
}
|
|
||||||
intf.defBridgeNet(storageBrName, null, nic.getMac(), getGuestNicModel(guestOsType, nicAdapter));
|
intf.defBridgeNet(storageBrName, null, nic.getMac(), getGuestNicModel(guestOsType, nicAdapter));
|
||||||
}
|
}
|
||||||
if (nic.getPxeDisable()) {
|
if (nic.getPxeDisable()) {
|
||||||
@ -291,7 +298,7 @@ public class BridgeVifDriver extends VifDriverBase {
|
|||||||
return "brvx-" + vnetId;
|
return "brvx-" + vnetId;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String createVnetBr(String vNetId, String pifKey, String protocol) throws InternalErrorException {
|
protected String createVnetBr(String vNetId, String pifKey, String protocol) throws InternalErrorException {
|
||||||
String nic = _pifs.get(pifKey);
|
String nic = _pifs.get(pifKey);
|
||||||
if (nic == null || protocol.equals(Networks.BroadcastDomainType.Vxlan.scheme())) {
|
if (nic == null || protocol.equals(Networks.BroadcastDomainType.Vxlan.scheme())) {
|
||||||
// if not found in bridge map, maybe traffic label refers to pif already?
|
// if not found in bridge map, maybe traffic label refers to pif already?
|
||||||
|
|||||||
@ -16,24 +16,29 @@
|
|||||||
// under the License.
|
// under the License.
|
||||||
package com.cloud.hypervisor.kvm.resource;
|
package com.cloud.hypervisor.kvm.resource;
|
||||||
|
|
||||||
|
import java.net.URI;
|
||||||
|
import java.net.URISyntaxException;
|
||||||
|
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.mockito.InjectMocks;
|
||||||
|
import org.mockito.Mockito;
|
||||||
|
import org.mockito.Spy;
|
||||||
|
import org.mockito.junit.MockitoJUnitRunner;
|
||||||
|
|
||||||
import com.cloud.agent.api.to.NicTO;
|
import com.cloud.agent.api.to.NicTO;
|
||||||
|
import com.cloud.exception.InternalErrorException;
|
||||||
import com.cloud.network.Networks;
|
import com.cloud.network.Networks;
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
import org.mockito.junit.MockitoJUnitRunner;
|
|
||||||
|
|
||||||
@RunWith(MockitoJUnitRunner.class)
|
@RunWith(MockitoJUnitRunner.class)
|
||||||
public class BridgeVifDriverTest {
|
public class BridgeVifDriverTest {
|
||||||
|
|
||||||
private BridgeVifDriver driver;
|
private static final String BRIDGE_NAME = "cloudbr1";
|
||||||
|
|
||||||
@Before
|
@Spy
|
||||||
public void setUp() throws Exception {
|
@InjectMocks
|
||||||
driver = new BridgeVifDriver();
|
private BridgeVifDriver driver = new BridgeVifDriver();
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void isBroadcastTypeVlanOrVxlan() {
|
public void isBroadcastTypeVlanOrVxlan() {
|
||||||
@ -58,4 +63,41 @@ public class BridgeVifDriverTest {
|
|||||||
Assert.assertTrue(driver.isValidProtocolAndVnetId("123", "vlan"));
|
Assert.assertTrue(driver.isValidProtocolAndVnetId("123", "vlan"));
|
||||||
Assert.assertTrue(driver.isValidProtocolAndVnetId("456", "vxlan"));
|
Assert.assertTrue(driver.isValidProtocolAndVnetId("456", "vxlan"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void createStorageVnetBridgeIfNeededReturnsStorageBrNameWhenBroadcastTypeIsNotStorageButValidValues() throws InternalErrorException {
|
||||||
|
NicTO nic = new NicTO();
|
||||||
|
nic.setBroadcastType(Networks.BroadcastDomainType.Storage);
|
||||||
|
int vlan = 123;
|
||||||
|
String newBridge = "br-" + vlan;
|
||||||
|
nic.setBroadcastUri(Networks.BroadcastDomainType.Storage.toUri(vlan));
|
||||||
|
Mockito.doReturn(newBridge).when(driver).createVnetBr(Mockito.anyString(), Mockito.anyString(), Mockito.anyString());
|
||||||
|
String result = driver.createStorageVnetBridgeIfNeeded(nic, "trafficLabel", BRIDGE_NAME);
|
||||||
|
Assert.assertEquals(newBridge, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void createStorageVnetBridgeIfNeededReturnsStorageBrNameWhenBroadcastTypeIsNotStorage() throws InternalErrorException {
|
||||||
|
NicTO nic = new NicTO();
|
||||||
|
nic.setBroadcastType(Networks.BroadcastDomainType.Vlan);
|
||||||
|
String result = driver.createStorageVnetBridgeIfNeeded(nic, "trafficLabel", BRIDGE_NAME);
|
||||||
|
Assert.assertEquals(BRIDGE_NAME, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void createStorageVnetBridgeIfNeededReturnsStorageBrNameWhenBroadcastUriIsNull() throws InternalErrorException {
|
||||||
|
NicTO nic = new NicTO();
|
||||||
|
nic.setBroadcastType(Networks.BroadcastDomainType.Storage);
|
||||||
|
String result = driver.createStorageVnetBridgeIfNeeded(nic, "trafficLabel", BRIDGE_NAME);
|
||||||
|
Assert.assertEquals(BRIDGE_NAME, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void createStorageVnetBridgeIfNeededCreatesVnetBridgeWhenUntaggedVlan() throws InternalErrorException, URISyntaxException {
|
||||||
|
NicTO nic = new NicTO();
|
||||||
|
nic.setBroadcastType(Networks.BroadcastDomainType.Storage);
|
||||||
|
nic.setBroadcastUri(new URI(Networks.BroadcastDomainType.Storage.scheme() + "://untagged"));
|
||||||
|
String result = driver.createStorageVnetBridgeIfNeeded(nic, "trafficLabel", BRIDGE_NAME);
|
||||||
|
Assert.assertEquals(BRIDGE_NAME, result);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user