mirror of https://github.com/apache/cloudstack.git
CS-14605: OVS cleanup
Fix syntax errors in ConfigurationManager and Resource Manager test
This commit is contained in:
parent
6e0a86862a
commit
2bf0c7f7ff
|
|
@ -103,16 +103,9 @@ import com.cloud.network.firewall.FirewallManagerImpl;
|
|||
import com.cloud.network.lb.ElasticLoadBalancerManagerImpl;
|
||||
import com.cloud.network.lb.LoadBalancingRulesManagerImpl;
|
||||
import com.cloud.network.lb.dao.ElasticLbVmMapDaoImpl;
|
||||
import com.cloud.network.ovs.OvsNetworkManagerImpl;
|
||||
import com.cloud.network.ovs.OvsTunnelManagerImpl;
|
||||
import com.cloud.network.ovs.dao.GreTunnelDaoImpl;
|
||||
import com.cloud.network.ovs.dao.OvsTunnelInterfaceDaoImpl;
|
||||
import com.cloud.network.ovs.dao.OvsTunnelNetworkDaoImpl;
|
||||
import com.cloud.network.ovs.dao.OvsTunnelDaoImpl;
|
||||
import com.cloud.network.ovs.dao.OvsWorkDaoImpl;
|
||||
import com.cloud.network.ovs.dao.VlanMappingDaoImpl;
|
||||
import com.cloud.network.ovs.dao.VlanMappingDirtyDaoImpl;
|
||||
import com.cloud.network.ovs.dao.VmFlowLogDaoImpl;
|
||||
import com.cloud.network.router.VirtualNetworkApplianceManagerImpl;
|
||||
import com.cloud.network.rules.RulesManagerImpl;
|
||||
import com.cloud.network.rules.dao.PortForwardingRulesDaoImpl;
|
||||
|
|
@ -295,12 +288,6 @@ public class DefaultComponentLibrary extends ComponentLibraryBase implements Com
|
|||
addDao("UsageEventDao", UsageEventDaoImpl.class);
|
||||
addDao("ClusterDetailsDao", ClusterDetailsDaoImpl.class);
|
||||
addDao("UserVmDetailsDao", UserVmDetailsDaoImpl.class);
|
||||
addDao("VlanMappingDao", VlanMappingDaoImpl.class);
|
||||
addDao("VlanMappingDirtyDao", VlanMappingDirtyDaoImpl.class);
|
||||
addDao("OvsWorkDao", OvsWorkDaoImpl.class);
|
||||
addDao("VmFlowLogDao", VmFlowLogDaoImpl.class);
|
||||
addDao("GreTunnelDao", GreTunnelDaoImpl.class);
|
||||
addDao("OvsTunnelDao", OvsTunnelDaoImpl.class);
|
||||
addDao("OvsTunnelInterfaceDao", OvsTunnelInterfaceDaoImpl.class);
|
||||
addDao("OvsTunnelAccountDao", OvsTunnelNetworkDaoImpl.class);
|
||||
addDao("StoragePoolWorkDao", StoragePoolWorkDaoImpl.class);
|
||||
|
|
@ -372,7 +359,6 @@ public class DefaultComponentLibrary extends ComponentLibraryBase implements Com
|
|||
addManager("LoadBalancingRulesManager", LoadBalancingRulesManagerImpl.class);
|
||||
addManager("RulesManager", RulesManagerImpl.class);
|
||||
addManager("RemoteAccessVpnManager", RemoteAccessVpnManagerImpl.class);
|
||||
addManager("OvsNetworkManager", OvsNetworkManagerImpl.class);
|
||||
addManager("OvsTunnelManager", OvsTunnelManagerImpl.class);
|
||||
addManager("Capacity Manager", CapacityManagerImpl.class);
|
||||
addManager("VirtualMachineManager", ClusteredVirtualMachineManagerImpl.class);
|
||||
|
|
|
|||
|
|
@ -26,9 +26,7 @@ import com.cloud.network.Network.Capability;
|
|||
import com.cloud.network.Network.Provider;
|
||||
import com.cloud.network.Network.Service;
|
||||
import com.cloud.network.Networks;
|
||||
import com.cloud.network.Networks.BroadcastDomainType;
|
||||
import com.cloud.network.PhysicalNetworkServiceProvider;
|
||||
import com.cloud.network.ovs.OvsNetworkManager;
|
||||
import com.cloud.network.ovs.OvsTunnelManager;
|
||||
import com.cloud.offering.NetworkOffering;
|
||||
import com.cloud.utils.component.AdapterBase;
|
||||
|
|
@ -40,8 +38,6 @@ import com.cloud.vm.VirtualMachineProfile;
|
|||
|
||||
@Local(value = NetworkElement.class)
|
||||
public class OvsElement extends AdapterBase implements NetworkElement {
|
||||
@Inject
|
||||
OvsNetworkManager _ovsVlanMgr;
|
||||
@Inject
|
||||
OvsTunnelManager _ovsTunnelMgr;
|
||||
|
||||
|
|
@ -84,14 +80,6 @@ public class OvsElement extends AdapterBase implements NetworkElement {
|
|||
return true;
|
||||
}
|
||||
|
||||
//NOTE (Salvatore Orlando):
|
||||
//The code for ovs Vlan Manager has not been touched. Only the OVS tunnel
|
||||
//manager has been restored. Ideally, the code for OVS Vlan Manager should go.
|
||||
_ovsVlanMgr.VmCheckAndCreateTunnel(vm, dest);
|
||||
String command = _ovsVlanMgr.applyDefaultFlow(vm.getVirtualMachine(), dest);
|
||||
if (command != null) {
|
||||
nic.setBroadcastUri(BroadcastDomainType.Vswitch.toUri(command));
|
||||
}
|
||||
_ovsTunnelMgr.VmCheckAndCreateTunnel(vm, network, dest);
|
||||
//_ovsTunnelMgr.applyDefaultFlow(vm.getVirtualMachine(), dest);
|
||||
|
||||
|
|
|
|||
|
|
@ -35,7 +35,6 @@ import com.cloud.network.Networks.BroadcastDomainType;
|
|||
import com.cloud.network.PhysicalNetworkVO;
|
||||
import com.cloud.network.dao.NetworkDao;
|
||||
import com.cloud.network.dao.PhysicalNetworkDao;
|
||||
import com.cloud.network.ovs.OvsNetworkManager;
|
||||
import com.cloud.network.ovs.OvsTunnelManager;
|
||||
import com.cloud.network.rules.PortForwardingRuleVO;
|
||||
import com.cloud.network.rules.dao.PortForwardingRulesDao;
|
||||
|
|
@ -66,13 +65,11 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru {
|
|||
@Inject
|
||||
PortForwardingRulesDao _pfRulesDao;
|
||||
@Inject
|
||||
OvsNetworkManager _ovsNetworkMgr;
|
||||
@Inject
|
||||
OvsTunnelManager _tunnelMgr;
|
||||
|
||||
@Override
|
||||
public Network design(NetworkOffering offering, DeploymentPlan plan, Network userSpecified, Account owner) {
|
||||
if (_ovsNetworkMgr.isOvsNetworkEnabled() || _tunnelMgr.isOvsTunnelEnabled()) {
|
||||
if (_tunnelMgr.isOvsTunnelEnabled()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
@ -91,7 +88,7 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru {
|
|||
public Network implement(Network config, NetworkOffering offering, DeployDestination dest, ReservationContext context) throws InsufficientVirtualNetworkCapcityException {
|
||||
assert (config.getState() == State.Implementing) : "Why are we implementing " + config;
|
||||
|
||||
if (_ovsNetworkMgr.isOvsNetworkEnabled() || _tunnelMgr.isOvsTunnelEnabled()) {
|
||||
if (_tunnelMgr.isOvsTunnelEnabled()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
@ -174,7 +171,7 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru {
|
|||
|
||||
NicProfile profile = super.allocate(config, nic, vm);
|
||||
|
||||
if (_ovsNetworkMgr.isOvsNetworkEnabled() || _tunnelMgr.isOvsTunnelEnabled()) {
|
||||
if (_tunnelMgr.isOvsTunnelEnabled()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
@ -193,7 +190,7 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru {
|
|||
public void deallocate(Network config, NicProfile nic, VirtualMachineProfile<? extends VirtualMachine> vm) {
|
||||
super.deallocate(config, nic, vm);
|
||||
|
||||
if (_ovsNetworkMgr.isOvsNetworkEnabled() || _tunnelMgr.isOvsTunnelEnabled()) {
|
||||
if (_tunnelMgr.isOvsTunnelEnabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -210,7 +207,7 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru {
|
|||
public void reserve(NicProfile nic, Network config, VirtualMachineProfile<? extends VirtualMachine> vm, DeployDestination dest, ReservationContext context)
|
||||
throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException {
|
||||
assert (nic.getReservationStrategy() == ReservationStrategy.Start) : "What can I do for nics that are not allocated at start? ";
|
||||
if (_ovsNetworkMgr.isOvsNetworkEnabled()) {
|
||||
if (_tunnelMgr.isOvsTunnelEnabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -244,7 +241,7 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru {
|
|||
|
||||
@Override
|
||||
public boolean release(NicProfile nic, VirtualMachineProfile<? extends VirtualMachine> vm, String reservationId) {
|
||||
if (_ovsNetworkMgr.isOvsNetworkEnabled() || _tunnelMgr.isOvsTunnelEnabled()) {
|
||||
if (_tunnelMgr.isOvsTunnelEnabled()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -27,7 +27,6 @@ import com.cloud.exception.InsufficientVirtualNetworkCapcityException;
|
|||
import com.cloud.network.Network;
|
||||
import com.cloud.network.NetworkManager;
|
||||
import com.cloud.network.NetworkVO;
|
||||
import com.cloud.network.ovs.OvsNetworkManager;
|
||||
import com.cloud.network.ovs.OvsTunnelManager;
|
||||
import com.cloud.offering.NetworkOffering;
|
||||
import com.cloud.user.Account;
|
||||
|
|
@ -45,14 +44,13 @@ import com.cloud.network.Network.State;
|
|||
public class OvsGuestNetworkGuru extends GuestNetworkGuru {
|
||||
private static final Logger s_logger = Logger.getLogger(OvsGuestNetworkGuru.class);
|
||||
|
||||
@Inject OvsNetworkManager _ovsNetworkMgr;
|
||||
@Inject NetworkManager _externalNetworkManager;
|
||||
@Inject OvsTunnelManager _ovsTunnelMgr;
|
||||
|
||||
@Override
|
||||
public Network design(NetworkOffering offering, DeploymentPlan plan, Network userSpecified, Account owner) {
|
||||
|
||||
if (!_ovsNetworkMgr.isOvsNetworkEnabled() && !_ovsTunnelMgr.isOvsTunnelEnabled()) {
|
||||
if (!_ovsTunnelMgr.isOvsTunnelEnabled()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
@ -73,13 +71,7 @@ public class OvsGuestNetworkGuru extends GuestNetworkGuru {
|
|||
if (vnet == null) {
|
||||
throw new InsufficientVirtualNetworkCapcityException("Unable to allocate vnet as a part of network " + network + " implement ", DataCenter.class, dcId);
|
||||
}
|
||||
String vnetUri = null;
|
||||
if (_ovsNetworkMgr.isOvsNetworkEnabled()) {
|
||||
vnetUri = "vlan" + vnet;
|
||||
} else if (_ovsTunnelMgr.isOvsTunnelEnabled()) {
|
||||
vnetUri = vnet;
|
||||
}
|
||||
implemented.setBroadcastUri(BroadcastDomainType.Vswitch.toUri(vnetUri));
|
||||
implemented.setBroadcastUri(BroadcastDomainType.Vswitch.toUri(vnet));
|
||||
EventUtils.saveEvent(UserContext.current().getCallerUserId(), network.getAccountId(), EventVO.LEVEL_INFO, EventTypes.EVENT_ZONE_VLAN_ASSIGN, "Assigned Zone Vlan: "+vnet+ " Network Id: "+network.getId(), 0);
|
||||
} else {
|
||||
implemented.setBroadcastUri(network.getBroadcastUri());
|
||||
|
|
@ -89,7 +81,7 @@ public class OvsGuestNetworkGuru extends GuestNetworkGuru {
|
|||
@Override
|
||||
public Network implement(Network config, NetworkOffering offering, DeployDestination dest, ReservationContext context) throws InsufficientVirtualNetworkCapcityException {
|
||||
assert (config.getState() == State.Implementing) : "Why are we implementing " + config;
|
||||
if (!_ovsNetworkMgr.isOvsNetworkEnabled()&& !_ovsTunnelMgr.isOvsTunnelEnabled()) {
|
||||
if (!_ovsTunnelMgr.isOvsTunnelEnabled()) {
|
||||
return null;
|
||||
}
|
||||
NetworkVO implemented = (NetworkVO)super.implement(config, offering, dest, context);
|
||||
|
|
|
|||
|
|
@ -22,7 +22,8 @@ public interface OvsTunnelManager extends Manager {
|
|||
|
||||
boolean isOvsTunnelEnabled();
|
||||
|
||||
public void VmCheckAndCreateTunnel(VirtualMachineProfile<? extends VirtualMachine> vm, Network nw, DeployDestination dest);
|
||||
public void VmCheckAndCreateTunnel(VirtualMachineProfile<? extends VirtualMachine> vm,
|
||||
Network nw, DeployDestination dest);
|
||||
|
||||
public void CheckAndDestroyTunnel(VirtualMachine vm, Network nw);
|
||||
|
||||
|
|
|
|||
|
|
@ -39,9 +39,7 @@ import com.cloud.host.dao.HostDao;
|
|||
import com.cloud.hypervisor.Hypervisor.HypervisorType;
|
||||
import com.cloud.network.Network;
|
||||
import com.cloud.network.Networks.TrafficType;
|
||||
import com.cloud.network.PhysicalNetwork;
|
||||
import com.cloud.network.PhysicalNetworkTrafficType;
|
||||
import com.cloud.network.dao.PhysicalNetworkDao;
|
||||
import com.cloud.network.dao.PhysicalNetworkTrafficTypeDao;
|
||||
import com.cloud.network.ovs.dao.OvsTunnelInterfaceDao;
|
||||
import com.cloud.network.ovs.dao.OvsTunnelInterfaceVO;
|
||||
|
|
@ -63,7 +61,8 @@ import com.cloud.vm.dao.UserVmDao;
|
|||
|
||||
@Local(value={OvsTunnelManager.class})
|
||||
public class OvsTunnelManagerImpl implements OvsTunnelManager {
|
||||
public static final Logger s_logger = Logger.getLogger(OvsTunnelManagerImpl.class.getName());
|
||||
public static final Logger s_logger =
|
||||
Logger.getLogger(OvsTunnelManagerImpl.class.getName());
|
||||
|
||||
String _name;
|
||||
boolean _isEnabled;
|
||||
|
|
@ -95,12 +94,13 @@ public class OvsTunnelManagerImpl implements OvsTunnelManager {
|
|||
}
|
||||
|
||||
@DB
|
||||
protected OvsTunnelNetworkVO createTunnelRecord(long from, long to, long networkId, int key) {
|
||||
protected OvsTunnelNetworkVO createTunnelRecord(long from, long to,
|
||||
long networkId, int key) {
|
||||
OvsTunnelNetworkVO ta = null;
|
||||
|
||||
try {
|
||||
ta = new OvsTunnelNetworkVO(from, to, key, networkId);
|
||||
OvsTunnelNetworkVO lock = _tunnelNetworkDao.acquireInLockTable(Long.valueOf(1));
|
||||
OvsTunnelNetworkVO lock =
|
||||
_tunnelNetworkDao.acquireInLockTable(Long.valueOf(1));
|
||||
if (lock == null) {
|
||||
s_logger.warn("Cannot lock table ovs_tunnel_account");
|
||||
return null;
|
||||
|
|
@ -108,20 +108,21 @@ public class OvsTunnelManagerImpl implements OvsTunnelManager {
|
|||
_tunnelNetworkDao.persist(ta);
|
||||
_tunnelNetworkDao.releaseFromLockTable(lock.getId());
|
||||
} catch (EntityExistsException e) {
|
||||
s_logger.debug("A record for the tunnel from " + from + " to " + to + " already exists");
|
||||
s_logger.debug("A record for the tunnel from " + from +
|
||||
" to " + to + " already exists");
|
||||
}
|
||||
|
||||
return ta;
|
||||
}
|
||||
|
||||
@DB
|
||||
protected OvsTunnelInterfaceVO createInterfaceRecord(String ip, String netmask, String mac,
|
||||
long hostId, String label) {
|
||||
protected OvsTunnelInterfaceVO createInterfaceRecord(String ip,
|
||||
String netmask,String mac,long hostId, String label) {
|
||||
OvsTunnelInterfaceVO ti = null;
|
||||
try {
|
||||
ti = new OvsTunnelInterfaceVO(ip, netmask, mac, hostId, label);
|
||||
//TODO: Is locking really necessary here?
|
||||
OvsTunnelInterfaceVO lock = _tunnelInterfaceDao.acquireInLockTable(Long.valueOf(1));
|
||||
OvsTunnelInterfaceVO lock =
|
||||
_tunnelInterfaceDao.acquireInLockTable(Long.valueOf(1));
|
||||
if (lock == null) {
|
||||
s_logger.warn("Cannot lock table ovs_tunnel_account");
|
||||
return null;
|
||||
|
|
@ -135,49 +136,54 @@ public class OvsTunnelManagerImpl implements OvsTunnelManager {
|
|||
return ti;
|
||||
}
|
||||
|
||||
|
||||
private String handleFetchInterfaceAnswer(Answer[] answers, Long hostId){
|
||||
OvsFetchInterfaceAnswer ans = (OvsFetchInterfaceAnswer) answers[0];
|
||||
OvsTunnelInterfaceVO ti = createInterfaceRecord(ans.getIp(), ans.getNetmask(), ans.getMac(),
|
||||
hostId, ans.getLabel());
|
||||
s_logger.debug("### Interface added to DB - id:" + ti.getId());
|
||||
OvsTunnelInterfaceVO ti =
|
||||
createInterfaceRecord(ans.getIp(), ans.getNetmask(),
|
||||
ans.getMac(), hostId, ans.getLabel());
|
||||
return ti.getIp();
|
||||
}
|
||||
|
||||
private void handleCreateTunnelAnswer(Answer[] answers){
|
||||
OvsCreateTunnelAnswer r = (OvsCreateTunnelAnswer) answers[0];
|
||||
String s = String.format(
|
||||
"(hostIP:%1$s, remoteIP:%2$s, bridge:%3$s, greKey:%4$s, portName:%5$s)",
|
||||
r.getFromIp(), r.getToIp(), r.getBridge(), r.getKey(), r.getInPortName());
|
||||
"(hostIP:%1$s, remoteIP:%2$s, bridge:%3$s," +
|
||||
"greKey:%4$s, portName:%5$s)",
|
||||
r.getFromIp(), r.getToIp(), r.getBridge(),
|
||||
r.getKey(), r.getInPortName());
|
||||
Long from = r.getFrom();
|
||||
Long to = r.getTo();
|
||||
long networkId = r.getNetworkId();
|
||||
OvsTunnelNetworkVO tunnel = _tunnelNetworkDao.getByFromToNetwork(from, to, networkId);
|
||||
if (tunnel == null) {
|
||||
throw new CloudRuntimeException(String.format("Unable find tunnelNetwork record(from=%1$s, to=%2$s, account=%3$s", from, to, networkId));
|
||||
throw new CloudRuntimeException(
|
||||
String.format("Unable find tunnelNetwork record" +
|
||||
"(from=%1$s,to=%2$s, account=%3$s",
|
||||
from, to, networkId));
|
||||
}
|
||||
s_logger.debug("Result:" + r.getResult());
|
||||
if (!r.getResult()) {
|
||||
tunnel.setState("FAILED");
|
||||
s_logger.warn("Create GRE tunnel failed due to " + r.getDetails() + s);
|
||||
s_logger.warn("Create GRE tunnel failed due to " +
|
||||
r.getDetails() + s);
|
||||
} else {
|
||||
tunnel.setState("SUCCESS");
|
||||
tunnel.setPortName(r.getInPortName());
|
||||
s_logger.warn("Create GRE tunnel " + r.getDetails() + s);
|
||||
s_logger.warn("Create GRE tunnel " +
|
||||
r.getDetails() + s);
|
||||
}
|
||||
_tunnelNetworkDao.update(tunnel.getId(), tunnel);
|
||||
}
|
||||
|
||||
|
||||
private String getGreEndpointIP(Host host, Network nw) throws AgentUnavailableException, OperationTimedoutException {
|
||||
private String getGreEndpointIP(Host host, Network nw) throws
|
||||
AgentUnavailableException, OperationTimedoutException {
|
||||
String endpointIp = null;
|
||||
// Fetch physical network and associated tags
|
||||
// If no tag specified, look for this network
|
||||
// TODO: Should we Make this a configuration option?
|
||||
// Default name for network label
|
||||
String physNetLabel = "cloud-public";
|
||||
Long physNetId = nw.getPhysicalNetworkId();
|
||||
PhysicalNetworkTrafficType physNetTT = _physNetTTDao.findBy(physNetId, TrafficType.Guest);
|
||||
s_logger.debug("### Physical network:" + physNetId + " - traffic type:" + physNetTT.getUuid());
|
||||
PhysicalNetworkTrafficType physNetTT =
|
||||
_physNetTTDao.findBy(physNetId, TrafficType.Guest);
|
||||
HypervisorType hvType = host.getHypervisorType();
|
||||
|
||||
switch (hvType) {
|
||||
|
|
@ -188,27 +194,34 @@ public class OvsTunnelManagerImpl implements OvsTunnelManager {
|
|||
}
|
||||
break;
|
||||
default:
|
||||
throw new CloudRuntimeException("Hypervisor " + hvType.toString() + " unsupported by OVS Tunnel Manager");
|
||||
throw new CloudRuntimeException("Hypervisor " +
|
||||
hvType.toString() +
|
||||
" unsupported by OVS Tunnel Manager");
|
||||
}
|
||||
|
||||
// Try to fetch GRE endpoint IP address for cloud db
|
||||
// If not found, then find it on the hypervisor
|
||||
OvsTunnelInterfaceVO tunnelIface = _tunnelInterfaceDao.getByHostAndLabel(host.getId(), physNetLabel);
|
||||
OvsTunnelInterfaceVO tunnelIface =
|
||||
_tunnelInterfaceDao.getByHostAndLabel(host.getId(),
|
||||
physNetLabel);
|
||||
if (tunnelIface == null) {
|
||||
//Now find and fetch configuration for physical interface for network with label on target host
|
||||
Commands fetchIfaceCmds = new Commands(new OvsFetchInterfaceCommand(physNetLabel));
|
||||
s_logger.debug("Ask host " + host.getId() + " to retrieve interface for phy net with label:" + physNetLabel);
|
||||
Answer[] fetchIfaceAnswers = _agentMgr.send(host.getId(), fetchIfaceCmds);
|
||||
|
||||
//Now find and fetch configuration for physical interface
|
||||
//for network with label on target host
|
||||
Commands fetchIfaceCmds =
|
||||
new Commands(new OvsFetchInterfaceCommand(physNetLabel));
|
||||
s_logger.debug("Ask host " + host.getId() +
|
||||
" to retrieve interface for phy net with label:" +
|
||||
physNetLabel);
|
||||
Answer[] fetchIfaceAnswers = _agentMgr.send(host.getId(),
|
||||
fetchIfaceCmds);
|
||||
//And finally save it for future use
|
||||
endpointIp = handleFetchInterfaceAnswer(fetchIfaceAnswers, host.getId());
|
||||
endpointIp = handleFetchInterfaceAnswer(fetchIfaceAnswers,
|
||||
host.getId());
|
||||
} else {
|
||||
endpointIp = tunnelIface.getIp();
|
||||
}
|
||||
s_logger.debug("### Ladies and gents, the endpoint for host " + host.getId() + " is " + endpointIp);
|
||||
return endpointIp;
|
||||
}
|
||||
|
||||
|
||||
private int getGreKey(Network network) {
|
||||
int key = 0;
|
||||
|
|
@ -223,13 +236,15 @@ public class OvsTunnelManagerImpl implements OvsTunnelManager {
|
|||
s_logger.debug("Well well, how did '" + key +
|
||||
"' end up in the broadcast URI for the network?");
|
||||
throw new CloudRuntimeException(
|
||||
String.format("Invalid GRE key parsed from network broadcast URI (%s)",
|
||||
String.format("Invalid GRE key parsed from" +
|
||||
"network broadcast URI (%s)",
|
||||
network.getBroadcastUri().toString()));
|
||||
}
|
||||
}
|
||||
|
||||
@DB
|
||||
protected void CheckAndCreateTunnel(VirtualMachine instance, Network nw, DeployDestination dest) {
|
||||
protected void CheckAndCreateTunnel(VirtualMachine instance,
|
||||
Network nw, DeployDestination dest) {
|
||||
if (!_isEnabled) {
|
||||
return;
|
||||
}
|
||||
|
|
@ -237,15 +252,17 @@ public class OvsTunnelManagerImpl implements OvsTunnelManager {
|
|||
s_logger.debug("Creating tunnels with OVS tunnel manager");
|
||||
if (instance.getType() != VirtualMachine.Type.User
|
||||
&& instance.getType() != VirtualMachine.Type.DomainRouter) {
|
||||
s_logger.debug("Will not work if you're not an instance or a virtual router");
|
||||
s_logger.debug("Will not work if you're not" +
|
||||
"an instance or a virtual router");
|
||||
return;
|
||||
}
|
||||
|
||||
long hostId = dest.getHost().getId();
|
||||
int key = getGreKey(nw);
|
||||
// Find active (i.e.: not shut off) VMs with a NIC on the target network
|
||||
List<UserVmVO> vms = _userVmDao.listByNetworkIdAndStates(nw.getId(), State.Running, State.Starting,
|
||||
State.Stopping, State.Unknown, State.Migrating);
|
||||
// Find active VMs with a NIC on the target network
|
||||
List<UserVmVO> vms = _userVmDao.listByNetworkIdAndStates(nw.getId(),
|
||||
State.Running, State.Starting,
|
||||
State.Stopping, State.Unknown, State.Migrating);
|
||||
// Find routers for the network
|
||||
List<DomainRouterVO> routers = _routerDao.findByNetwork(nw.getId());
|
||||
List<VMInstanceVO>ins = new ArrayList<VMInstanceVO>();
|
||||
|
|
@ -262,24 +279,31 @@ public class OvsTunnelManagerImpl implements OvsTunnelManager {
|
|||
if (rh == null || rh.longValue() == hostId) {
|
||||
continue;
|
||||
}
|
||||
OvsTunnelNetworkVO ta = _tunnelNetworkDao.getByFromToNetwork(hostId, rh.longValue(), nw.getId());
|
||||
OvsTunnelNetworkVO ta =
|
||||
_tunnelNetworkDao.getByFromToNetwork(hostId,
|
||||
rh.longValue(), nw.getId());
|
||||
// Try and create the tunnel even if a previous attempt failed
|
||||
if (ta == null || ta.getState().equals("FAILED")) {
|
||||
s_logger.debug("Attempting to create tunnel from:" + hostId + " to:" + rh.longValue());
|
||||
s_logger.debug("Attempting to create tunnel from:" +
|
||||
hostId + " to:" + rh.longValue());
|
||||
if (ta == null) {
|
||||
this.createTunnelRecord(hostId, rh.longValue(), nw.getId(), key);
|
||||
this.createTunnelRecord(hostId, rh.longValue(),
|
||||
nw.getId(), key);
|
||||
}
|
||||
if (!toHostIds.contains(rh)) {
|
||||
toHostIds.add(rh);
|
||||
}
|
||||
}
|
||||
|
||||
ta = _tunnelNetworkDao.getByFromToNetwork(rh.longValue(), hostId, nw.getId());
|
||||
ta = _tunnelNetworkDao.getByFromToNetwork(rh.longValue(),
|
||||
hostId, nw.getId());
|
||||
// Try and create the tunnel even if a previous attempt failed
|
||||
if (ta == null || ta.getState().equals("FAILED")) {
|
||||
s_logger.debug("Attempting to create tunnel from:" + rh.longValue() + " to:" + hostId);
|
||||
s_logger.debug("Attempting to create tunnel from:" +
|
||||
rh.longValue() + " to:" + hostId);
|
||||
if (ta == null) {
|
||||
this.createTunnelRecord(rh.longValue(), hostId, nw.getId(), key);
|
||||
this.createTunnelRecord(rh.longValue(), hostId,
|
||||
nw.getId(), key);
|
||||
}
|
||||
if (!fromHostIds.contains(rh)) {
|
||||
fromHostIds.add(rh);
|
||||
|
|
@ -295,8 +319,9 @@ public class OvsTunnelManagerImpl implements OvsTunnelManager {
|
|||
String otherIp = getGreEndpointIP(rHost, nw);
|
||||
Commands cmds = new Commands(
|
||||
new OvsCreateTunnelCommand(otherIp, key,
|
||||
Long.valueOf(hostId), i, nw.getId(), myIp));
|
||||
s_logger.debug("Ask host " + hostId + " to create gre tunnel to " + i);
|
||||
Long.valueOf(hostId), i, nw.getId(), myIp));
|
||||
s_logger.debug("Ask host " + hostId +
|
||||
" to create gre tunnel to " + i);
|
||||
Answer[] answers = _agentMgr.send(hostId, cmds);
|
||||
handleCreateTunnelAnswer(answers);
|
||||
noHost = false;
|
||||
|
|
@ -306,9 +331,11 @@ public class OvsTunnelManagerImpl implements OvsTunnelManager {
|
|||
HostVO rHost = _hostDao.findById(i);
|
||||
String otherIp = getGreEndpointIP(rHost, nw);
|
||||
Commands cmds = new Commands(
|
||||
new OvsCreateTunnelCommand(myIp, key, i, Long.valueOf(hostId),
|
||||
new OvsCreateTunnelCommand(myIp, key, i,
|
||||
Long.valueOf(hostId),
|
||||
nw.getId(), otherIp));
|
||||
s_logger.debug("Ask host " + i + " to create gre tunnel to " + hostId);
|
||||
s_logger.debug("Ask host " + i +
|
||||
" to create gre tunnel to " + hostId);
|
||||
Answer[] answers = _agentMgr.send(i, cmds);
|
||||
handleCreateTunnelAnswer(answers);
|
||||
noHost = false;
|
||||
|
|
@ -318,7 +345,8 @@ public class OvsTunnelManagerImpl implements OvsTunnelManager {
|
|||
if (noHost) {
|
||||
Commands cmds = new Commands(
|
||||
new OvsSetupBridgeCommand(key, hostId, nw.getId()));
|
||||
s_logger.debug("Ask host " + hostId + " to configure bridge for network:" + nw.getId());
|
||||
s_logger.debug("Ask host " + hostId +
|
||||
" to configure bridge for network:" + nw.getId());
|
||||
Answer[] answers = _agentMgr.send(hostId, cmds);
|
||||
handleSetupBridgeAnswer(answers);
|
||||
}
|
||||
|
|
@ -348,49 +376,59 @@ public class OvsTunnelManagerImpl implements OvsTunnelManager {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void VmCheckAndCreateTunnel(VirtualMachineProfile<? extends VirtualMachine> vm, Network nw, DeployDestination dest) {
|
||||
public void VmCheckAndCreateTunnel(
|
||||
VirtualMachineProfile<? extends VirtualMachine> vm,
|
||||
Network nw, DeployDestination dest) {
|
||||
CheckAndCreateTunnel(vm.getVirtualMachine(), nw, dest);
|
||||
}
|
||||
|
||||
@DB
|
||||
private void handleDestroyTunnelAnswer(Answer ans, long from, long to, long network_id) {
|
||||
|
||||
private void handleDestroyTunnelAnswer(Answer ans, long from,
|
||||
long to, long network_id) {
|
||||
if (ans.getResult()) {
|
||||
OvsTunnelNetworkVO lock = _tunnelNetworkDao.acquireInLockTable(Long.valueOf(1));
|
||||
if (lock == null) {
|
||||
s_logger.warn(String.format("failed to lock ovs_tunnel_account, remove record of " +
|
||||
"tunnel(from=%1$s, to=%2$s account=%3$s) failed",
|
||||
from, to, network_id));
|
||||
s_logger.warn(String.format("failed to lock" +
|
||||
"ovs_tunnel_account, remove record of " +
|
||||
"tunnel(from=%1$s, to=%2$s account=%3$s) failed",
|
||||
from, to, network_id));
|
||||
return;
|
||||
}
|
||||
|
||||
_tunnelNetworkDao.removeByFromToNetwork(from, to, network_id);
|
||||
_tunnelNetworkDao.releaseFromLockTable(lock.getId());
|
||||
|
||||
s_logger.debug(String.format("Destroy tunnel(account:%1$s, from:%2$s, to:%3$s) successful",
|
||||
network_id, from, to));
|
||||
s_logger.debug(String.format("Destroy tunnel(account:%1$s," +
|
||||
"from:%2$s, to:%3$s) successful",
|
||||
network_id, from, to));
|
||||
} else {
|
||||
s_logger.debug(String.format("Destroy tunnel(account:%1$s, from:%2$s, to:%3$s) failed",
|
||||
network_id, from, to));
|
||||
s_logger.debug(String.format("Destroy tunnel(account:%1$s," +
|
||||
"from:%2$s, to:%3$s) failed",
|
||||
network_id, from, to));
|
||||
}
|
||||
}
|
||||
|
||||
@DB
|
||||
private void handleDestroyBridgeAnswer(Answer ans, long host_id, long network_id) {
|
||||
private void handleDestroyBridgeAnswer(Answer ans,
|
||||
long host_id, long network_id) {
|
||||
|
||||
if (ans.getResult()) {
|
||||
OvsTunnelNetworkVO lock = _tunnelNetworkDao.acquireInLockTable(Long.valueOf(1));
|
||||
OvsTunnelNetworkVO lock =
|
||||
_tunnelNetworkDao.acquireInLockTable(Long.valueOf(1));
|
||||
if (lock == null) {
|
||||
s_logger.warn("failed to lock ovs_tunnel_network, remove record");
|
||||
s_logger.warn("failed to lock ovs_tunnel_network," +
|
||||
"remove record");
|
||||
return;
|
||||
}
|
||||
|
||||
_tunnelNetworkDao.removeByFromNetwork(host_id, network_id);
|
||||
_tunnelNetworkDao.releaseFromLockTable(lock.getId());
|
||||
|
||||
s_logger.debug(String.format("Destroy bridge for network %1$s successful", network_id));
|
||||
s_logger.debug(String.format("Destroy bridge for" +
|
||||
"network %1$s successful", network_id));
|
||||
} else {
|
||||
s_logger.debug(String.format("Destroy bridge for network %1$s failed", network_id));
|
||||
s_logger.debug(String.format("Destroy bridge for" +
|
||||
"network %1$s failed", network_id));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -405,19 +443,22 @@ public class OvsTunnelManagerImpl implements OvsTunnelManager {
|
|||
return;
|
||||
}
|
||||
|
||||
List<UserVmVO> userVms = _userVmDao.listByAccountIdAndHostId(vm.getAccountId(), vm.getHostId());
|
||||
List<UserVmVO> userVms = _userVmDao.listByAccountIdAndHostId(
|
||||
vm.getAccountId(), vm.getHostId());
|
||||
if (vm.getType() == VirtualMachine.Type.User) {
|
||||
if (userVms.size() > 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
List<DomainRouterVO> routers = _routerDao.findByNetwork(nw.getId());
|
||||
List<DomainRouterVO> routers =
|
||||
_routerDao.findByNetwork(nw.getId());
|
||||
for (DomainRouterVO router : routers) {
|
||||
if (router.getHostId() == vm.getHostId()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
} else if (vm.getType() == VirtualMachine.Type.DomainRouter && userVms.size() != 0) {
|
||||
} else if (vm.getType() == VirtualMachine.Type.DomainRouter &&
|
||||
userVms.size() != 0) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
|
|
@ -425,26 +466,31 @@ public class OvsTunnelManagerImpl implements OvsTunnelManager {
|
|||
* the tunnels for this network */
|
||||
int key = getGreKey(nw);
|
||||
Command cmd = new OvsDestroyBridgeCommand(nw.getId(), key);
|
||||
s_logger.debug("Destroying bridge for network " + nw.getId() + " on host:" + vm.getHostId());
|
||||
s_logger.debug("Destroying bridge for network " + nw.getId() +
|
||||
" on host:" + vm.getHostId());
|
||||
Answer ans = _agentMgr.send(vm.getHostId(), cmd);
|
||||
handleDestroyBridgeAnswer(ans, vm.getHostId(), nw.getId());
|
||||
|
||||
/* Then ask hosts have peer tunnel with me to destroy them */
|
||||
List<OvsTunnelNetworkVO> peers = _tunnelNetworkDao.listByToNetwork(vm.getHostId(), nw.getId());
|
||||
List<OvsTunnelNetworkVO> peers =
|
||||
_tunnelNetworkDao.listByToNetwork(vm.getHostId(),
|
||||
nw.getId());
|
||||
for (OvsTunnelNetworkVO p : peers) {
|
||||
// If the tunnel was not successfully created don't bother to remove it
|
||||
if (p.getState().equals("SUCCESS")) {
|
||||
cmd = new OvsDestroyTunnelCommand(p.getNetworkId(), key, p.getPortName());
|
||||
cmd = new OvsDestroyTunnelCommand(p.getNetworkId(), key,
|
||||
p.getPortName());
|
||||
s_logger.debug("Destroying tunnel to " + vm.getHostId() +
|
||||
" from " + p.getFrom());
|
||||
ans = _agentMgr.send(p.getFrom(), cmd);
|
||||
handleDestroyTunnelAnswer(ans, p.getFrom(), p.getTo(), p.getNetworkId());
|
||||
handleDestroyTunnelAnswer(ans, p.getFrom(),
|
||||
p.getTo(), p.getNetworkId());
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
s_logger.warn(String.format("Destroy tunnel(account:%1$s, hostId:%2$s) failed", vm.getAccountId(), vm.getHostId()), e);
|
||||
s_logger.warn(String.format("Destroy tunnel(account:%1$s," +
|
||||
"hostId:%2$s) failed", vm.getAccountId(), vm.getHostId()), e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -87,15 +87,7 @@ import com.cloud.network.firewall.FirewallManagerImpl;
|
|||
import com.cloud.network.lb.ElasticLoadBalancerManagerImpl;
|
||||
import com.cloud.network.lb.LoadBalancingRulesManagerImpl;
|
||||
import com.cloud.network.lb.dao.ElasticLbVmMapDaoImpl;
|
||||
import com.cloud.network.ovs.OvsNetworkManagerImpl;
|
||||
import com.cloud.network.ovs.OvsTunnelManagerImpl;
|
||||
import com.cloud.network.ovs.dao.GreTunnelDaoImpl;
|
||||
import com.cloud.network.ovs.dao.OvsTunnelAccountDaoImpl;
|
||||
import com.cloud.network.ovs.dao.OvsTunnelDaoImpl;
|
||||
import com.cloud.network.ovs.dao.OvsWorkDaoImpl;
|
||||
import com.cloud.network.ovs.dao.VlanMappingDaoImpl;
|
||||
import com.cloud.network.ovs.dao.VlanMappingDirtyDaoImpl;
|
||||
import com.cloud.network.ovs.dao.VmFlowLogDaoImpl;
|
||||
import com.cloud.network.router.VirtualNetworkApplianceManagerImpl;
|
||||
import com.cloud.network.rules.RulesManagerImpl;
|
||||
import com.cloud.network.rules.dao.PortForwardingRulesDaoImpl;
|
||||
|
|
@ -262,13 +254,6 @@ public class ResourceManagerTest extends TestCase {
|
|||
_locator.addDao("UsageEventDao", UsageEventDaoImpl.class);
|
||||
_locator.addDao("ClusterDetailsDao", ClusterDetailsDaoImpl.class);
|
||||
_locator.addDao("UserVmDetailsDao", UserVmDetailsDaoImpl.class);
|
||||
_locator.addDao("VlanMappingDao", VlanMappingDaoImpl.class);
|
||||
_locator.addDao("VlanMappingDirtyDao", VlanMappingDirtyDaoImpl.class);
|
||||
_locator.addDao("OvsWorkDao", OvsWorkDaoImpl.class);
|
||||
_locator.addDao("VmFlowLogDao", VmFlowLogDaoImpl.class);
|
||||
_locator.addDao("GreTunnelDao", GreTunnelDaoImpl.class);
|
||||
_locator.addDao("OvsTunnelDao", OvsTunnelDaoImpl.class);
|
||||
_locator.addDao("OvsTunnelAccountDao", OvsTunnelAccountDaoImpl.class);
|
||||
_locator.addDao("StoragePoolWorkDao", StoragePoolWorkDaoImpl.class);
|
||||
_locator.addDao("HostTagsDao", HostTagsDaoImpl.class);
|
||||
_locator.addDao("NetworkDomainDao", NetworkDomainDaoImpl.class);
|
||||
|
|
@ -311,7 +296,6 @@ public class ResourceManagerTest extends TestCase {
|
|||
_locator.addManager("LoadBalancingRulesManager", LoadBalancingRulesManagerImpl.class);
|
||||
_locator.addManager("RulesManager", RulesManagerImpl.class);
|
||||
_locator.addManager("RemoteAccessVpnManager", RemoteAccessVpnManagerImpl.class);
|
||||
_locator.addManager("OvsNetworkManager", OvsNetworkManagerImpl.class);
|
||||
_locator.addManager("OvsTunnelManager", OvsTunnelManagerImpl.class);
|
||||
_locator.addManager("Capacity Manager", CapacityManagerImpl.class);
|
||||
_locator.addManager("Cluster Manager", ClusterManagerImpl.class);
|
||||
|
|
|
|||
Loading…
Reference in New Issue