Fixing CsDhcp.py

Fixing assign IPv4 on GuestNetworkGuru.java
Fixing getRouters() on VpcVirtualRouterElement.java
Fixing Fixing paths on keepalived.conf.templ

Refactor on the other files
This commit is contained in:
wilderrodrigues 2015-01-12 16:04:04 +01:00
parent ddbc565bc4
commit 460204fa9f
12 changed files with 396 additions and 302 deletions

View File

@ -214,7 +214,11 @@ public class NicDaoImpl extends GenericDaoBase<NicVO, Long> implements NicDao {
SearchCriteria<NicVO> sc = AllFieldsSearch.create();
sc.setParameters("network", networkId);
sc.setParameters("instance", instanceId);
return findOneBy(sc).getIp4Address();
NicVO nicVo = findOneBy(sc);
if (nicVo != null) {
return nicVo.getIp4Address();
}
return null;
}
@Override

View File

@ -112,8 +112,8 @@ import com.google.gson.Gson;
@Local(value = { NetworkElement.class, FirewallServiceProvider.class, DhcpServiceProvider.class, UserDataServiceProvider.class, StaticNatServiceProvider.class,
LoadBalancingServiceProvider.class, PortForwardingServiceProvider.class, IpDeployer.class, RemoteAccessVPNServiceProvider.class, NetworkMigrationResponder.class })
public class VirtualRouterElement extends AdapterBase implements VirtualRouterElementService, DhcpServiceProvider, UserDataServiceProvider, SourceNatServiceProvider,
StaticNatServiceProvider, FirewallServiceProvider, LoadBalancingServiceProvider, PortForwardingServiceProvider, RemoteAccessVPNServiceProvider, IpDeployer,
NetworkMigrationResponder, AggregatedCommandExecutor {
StaticNatServiceProvider, FirewallServiceProvider, LoadBalancingServiceProvider, PortForwardingServiceProvider, RemoteAccessVPNServiceProvider, IpDeployer,
NetworkMigrationResponder, AggregatedCommandExecutor {
private static final Logger s_logger = Logger.getLogger(VirtualRouterElement.class);
public static final AutoScaleCounterType AutoScaleCounterCpu = new AutoScaleCounterType("cpu");
public static final AutoScaleCounterType AutoScaleCounterMemory = new AutoScaleCounterType("memory");
@ -165,7 +165,7 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
protected RouterDeploymentDefinitionBuilder routerDeploymentDefinitionBuilder;
protected boolean canHandle(final Network network, final Service service) {
Long physicalNetworkId = _networkMdl.getPhysicalNetworkId(network);
final Long physicalNetworkId = _networkMdl.getPhysicalNetworkId(network);
if (physicalNetworkId == null) {
return false;
}
@ -201,10 +201,10 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
return false;
}
Map<VirtualMachineProfile.Param, Object> params = new HashMap<VirtualMachineProfile.Param, Object>(1);
final Map<VirtualMachineProfile.Param, Object> params = new HashMap<VirtualMachineProfile.Param, Object>(1);
params.put(VirtualMachineProfile.Param.ReProgramGuestNetworks, true);
RouterDeploymentDefinition routerDeploymentDefinition =
final RouterDeploymentDefinition routerDeploymentDefinition =
routerDeploymentDefinitionBuilder.create()
.setGuestNetwork(network)
.setDeployDestination(dest)
@ -212,7 +212,7 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
.setParams(params)
.build();
List<DomainRouterVO> routers = routerDeploymentDefinition.deployVirtualRouter();
final List<DomainRouterVO> routers = routerDeploymentDefinition.deployVirtualRouter();
int routerCounts = 1;
if (offering.getRedundantRouter()) {
@ -236,7 +236,7 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
return false;
}
NetworkOfferingVO offering = _networkOfferingDao.findById(network.getNetworkOfferingId());
final NetworkOfferingVO offering = _networkOfferingDao.findById(network.getNetworkOfferingId());
if (offering.isSystemOnly()) {
return false;
}
@ -244,7 +244,7 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
return false;
}
RouterDeploymentDefinition routerDeploymentDefinition =
final RouterDeploymentDefinition routerDeploymentDefinition =
routerDeploymentDefinitionBuilder.create()
.setGuestNetwork(network)
.setDeployDestination(dest)
@ -252,7 +252,7 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
.setParams(vm.getParameters())
.build();
List<DomainRouterVO> routers = routerDeploymentDefinition.deployVirtualRouter();
final List<DomainRouterVO> routers = routerDeploymentDefinition.deployVirtualRouter();
if (routers == null || routers.size() == 0) {
throw new ResourceUnavailableException("Can't find at least one running router!", DataCenter.class, network.getDataCenterId());
@ -263,7 +263,7 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
@Override
public boolean applyFWRules(final Network network, final List<? extends FirewallRule> rules) throws ResourceUnavailableException {
if (canHandle(network, Service.Firewall)) {
List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
final List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
if (routers == null || routers.isEmpty()) {
s_logger.debug("Virtual router elemnt doesn't need to apply firewall rules on the backend; virtual " + "router doesn't exist in the network " + network.getId());
return true;
@ -278,8 +278,8 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
}
}
DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
final DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
final NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
if (!networkTopology.applyFirewallRules(network, rules, routers)) {
throw new CloudRuntimeException("Failed to apply firewall rules in network " + network.getId());
@ -308,8 +308,8 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
return false; // at least one numeric and one char. example:
}
// 3h
char strEnd = str.toCharArray()[str.length() - 1];
for (char c : endChar.toCharArray()) {
final char strEnd = str.toCharArray()[str.length() - 1];
for (final char c : endChar.toCharArray()) {
if (strEnd == c) {
number = str.substring(0, str.length() - 1);
matchedEndChar = true;
@ -322,22 +322,22 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
}
try {
Integer.parseInt(number);
} catch (NumberFormatException e) {
} catch (final NumberFormatException e) {
return false;
}
return true;
}
public static boolean validateHAProxyLBRule(final LoadBalancingRule rule) {
String timeEndChar = "dhms";
final String timeEndChar = "dhms";
if (rule.getSourcePortStart() == NetUtils.HAPROXY_STATS_PORT) {
s_logger.debug("Can't create LB on port 8081, haproxy is listening for LB stats on this port");
return false;
}
for (LbStickinessPolicy stickinessPolicy : rule.getStickinessPolicies()) {
List<Pair<String, String>> paramsList = stickinessPolicy.getParams();
for (final LbStickinessPolicy stickinessPolicy : rule.getStickinessPolicies()) {
final List<Pair<String, String>> paramsList = stickinessPolicy.getParams();
if (StickinessMethodType.LBCookieBased.getName().equalsIgnoreCase(stickinessPolicy.getMethodName())) {
@ -346,9 +346,9 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
String expire = "30m"; // optional
/* overwrite default values with the stick parameters */
for (Pair<String, String> paramKV : paramsList) {
String key = paramKV.first();
String value = paramKV.second();
for (final Pair<String, String> paramKV : paramsList) {
final String key = paramKV.first();
final String value = paramKV.second();
if ("tablesize".equalsIgnoreCase(key)) {
tablesize = value;
}
@ -367,9 +367,9 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
String length = null; // optional
String holdTime = null; // optional
for (Pair<String, String> paramKV : paramsList) {
String key = paramKV.first();
String value = paramKV.second();
for (final Pair<String, String> paramKV : paramsList) {
final String key = paramKV.first();
final String value = paramKV.second();
if ("length".equalsIgnoreCase(key)) {
length = value;
}
@ -391,10 +391,10 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
@Override
public boolean validateLBRule(final Network network, final LoadBalancingRule rule) {
List<LoadBalancingRule> rules = new ArrayList<LoadBalancingRule>();
final List<LoadBalancingRule> rules = new ArrayList<LoadBalancingRule>();
rules.add(rule);
if (canHandle(network, Service.Lb) && canHandleLbRules(rules)) {
List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
final List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
if (routers == null || routers.isEmpty()) {
return true;
}
@ -410,14 +410,14 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
return false;
}
List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
final List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
if (routers == null || routers.isEmpty()) {
s_logger.debug("Virtual router elemnt doesn't need to apply lb rules on the backend; virtual " + "router doesn't exist in the network " + network.getId());
return true;
}
DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
final DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
final NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
if (!networkTopology.applyLoadBalancingRules(network, rules, routers)) {
throw new CloudRuntimeException("Failed to apply load balancing rules in network " + network.getId());
@ -435,16 +435,16 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
return null;
}
Network network = _networksDao.findById(vpn.getNetworkId());
final Network network = _networksDao.findById(vpn.getNetworkId());
if (canHandle(network, Service.Vpn)) {
List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
final List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
if (routers == null || routers.isEmpty()) {
s_logger.debug("Virtual router elemnt doesn't need to apply vpn users on the backend; virtual router" + " doesn't exist in the network " + network.getId());
return null;
}
DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
final DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
final NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
return networkTopology.applyVpnUsers(network, users, routers);
} else {
@ -459,9 +459,9 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
return false;
}
Network network = _networksDao.findById(vpn.getNetworkId());
final Network network = _networksDao.findById(vpn.getNetworkId());
if (canHandle(network, Service.Vpn)) {
List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
final List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
if (routers == null || routers.isEmpty()) {
s_logger.debug("Virtual router elemnt doesn't need stop vpn on the backend; virtual router doesn't" + " exist in the network " + network.getId());
return true;
@ -479,9 +479,9 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
return false;
}
Network network = _networksDao.findById(vpn.getNetworkId());
final Network network = _networksDao.findById(vpn.getNetworkId());
if (canHandle(network, Service.Vpn)) {
List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
final List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
if (routers == null || routers.isEmpty()) {
s_logger.debug("Virtual router elemnt doesn't need stop vpn on the backend; virtual router doesn't " + "exist in the network " + network.getId());
return true;
@ -496,21 +496,21 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
@Override
public boolean applyIps(final Network network, final List<? extends PublicIpAddress> ipAddress, final Set<Service> services) throws ResourceUnavailableException {
boolean canHandle = true;
for (Service service : services) {
for (final Service service : services) {
if (!canHandle(network, service)) {
canHandle = false;
break;
}
}
if (canHandle) {
List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
final List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
if (routers == null || routers.isEmpty()) {
s_logger.debug("Virtual router elemnt doesn't need to associate ip addresses on the backend; virtual " + "router doesn't exist in the network " + network.getId());
return true;
}
DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
final DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
final NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
return networkTopology.associatePublicIP(network, ipAddress, routers);
} else {
@ -530,7 +530,7 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
public static String getHAProxyStickinessCapability() {
LbStickinessMethod method;
List<LbStickinessMethod> methodList = new ArrayList<LbStickinessMethod>(1);
final List<LbStickinessMethod> methodList = new ArrayList<LbStickinessMethod>(1);
method = new LbStickinessMethod(StickinessMethodType.LBCookieBased, "This is loadbalancer cookie based stickiness method.");
method.addParam("cookie-name", false, "Cookie name passed in http header by the LB to the client.", false);
@ -577,7 +577,7 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
false,
"When this option is specified, haproxy will match on the cookie prefix (or URL parameter prefix). "
+ "The appsession value is the data following this prefix. Example : appsession ASPSESSIONID len 64 timeout 3h prefix This will match the cookie ASPSESSIONIDXXXX=XXXXX, the appsession value will be XXXX=XXXXX.",
true);
true);
method.addParam("mode", false, "This option allows to change the URL parser mode. 2 modes are currently supported : - path-parameters "
+ ": The parser looks for the appsession in the path parameters part (each parameter is separated by a semi-colon), "
+ "which is convenient for JSESSIONID for example.This is the default mode if the option is not set. - query-string :"
@ -590,16 +590,16 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
+ " example: expire=30m 20s 50h 4d. Default value:3h", false);
methodList.add(method);
Gson gson = new Gson();
String capability = gson.toJson(methodList);
final Gson gson = new Gson();
final String capability = gson.toJson(methodList);
return capability;
}
private static Map<Service, Map<Capability, String>> setCapabilities() {
Map<Service, Map<Capability, String>> capabilities = new HashMap<Service, Map<Capability, String>>();
final Map<Service, Map<Capability, String>> capabilities = new HashMap<Service, Map<Capability, String>>();
// Set capabilities for LB service
Map<Capability, String> lbCapabilities = new HashMap<Capability, String>();
final Map<Capability, String> lbCapabilities = new HashMap<Capability, String>();
lbCapabilities.put(Capability.SupportedLBAlgorithms, "roundrobin,leastconn,source");
lbCapabilities.put(Capability.SupportedLBIsolation, "dedicated");
lbCapabilities.put(Capability.SupportedProtocols, "tcp, udp");
@ -609,18 +609,18 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
// specifies that LB rules can support autoscaling and the list of
// counters it supports
AutoScaleCounter counter;
List<AutoScaleCounter> counterList = new ArrayList<AutoScaleCounter>();
final List<AutoScaleCounter> counterList = new ArrayList<AutoScaleCounter>();
counter = new AutoScaleCounter(AutoScaleCounterCpu);
counterList.add(counter);
counter = new AutoScaleCounter(AutoScaleCounterMemory);
counterList.add(counter);
Gson gson = new Gson();
String autoScaleCounterList = gson.toJson(counterList);
final Gson gson = new Gson();
final String autoScaleCounterList = gson.toJson(counterList);
lbCapabilities.put(Capability.AutoScaleCounters, autoScaleCounterList);
capabilities.put(Service.Lb, lbCapabilities);
// Set capabilities for Firewall service
Map<Capability, String> firewallCapabilities = new HashMap<Capability, String>();
final Map<Capability, String> firewallCapabilities = new HashMap<Capability, String>();
firewallCapabilities.put(Capability.TrafficStatistics, "per public ip");
firewallCapabilities.put(Capability.SupportedProtocols, "tcp,udp,icmp");
firewallCapabilities.put(Capability.SupportedEgressProtocols, "tcp,udp,icmp, all");
@ -629,24 +629,24 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
capabilities.put(Service.Firewall, firewallCapabilities);
// Set capabilities for vpn
Map<Capability, String> vpnCapabilities = new HashMap<Capability, String>();
final Map<Capability, String> vpnCapabilities = new HashMap<Capability, String>();
vpnCapabilities.put(Capability.SupportedVpnProtocols, "pptp,l2tp,ipsec");
vpnCapabilities.put(Capability.VpnTypes, "removeaccessvpn");
capabilities.put(Service.Vpn, vpnCapabilities);
Map<Capability, String> dnsCapabilities = new HashMap<Capability, String>();
final Map<Capability, String> dnsCapabilities = new HashMap<Capability, String>();
dnsCapabilities.put(Capability.AllowDnsSuffixModification, "true");
capabilities.put(Service.Dns, dnsCapabilities);
capabilities.put(Service.UserData, null);
Map<Capability, String> dhcpCapabilities = new HashMap<Capability, String>();
final Map<Capability, String> dhcpCapabilities = new HashMap<Capability, String>();
dhcpCapabilities.put(Capability.DhcpAccrossMultipleSubnets, "true");
capabilities.put(Service.Dhcp, dhcpCapabilities);
capabilities.put(Service.Gateway, null);
Map<Capability, String> sourceNatCapabilities = new HashMap<Capability, String>();
final Map<Capability, String> sourceNatCapabilities = new HashMap<Capability, String>();
sourceNatCapabilities.put(Capability.SupportedSourceNatTypes, "peraccount");
sourceNatCapabilities.put(Capability.RedundantRouter, "true");
capabilities.put(Service.SourceNat, sourceNatCapabilities);
@ -660,14 +660,14 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
@Override
public boolean applyStaticNats(final Network network, final List<? extends StaticNat> rules) throws ResourceUnavailableException {
if (canHandle(network, Service.StaticNat)) {
List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
final List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
if (routers == null || routers.isEmpty()) {
s_logger.debug("Virtual router elemnt doesn't need to apply static nat on the backend; virtual " + "router doesn't exist in the network " + network.getId());
return true;
}
DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
final DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
final NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
return networkTopology.applyStaticNats(network, rules, routers);
} else {
@ -677,12 +677,12 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
@Override
public boolean shutdown(final Network network, final ReservationContext context, final boolean cleanup) throws ConcurrentOperationException, ResourceUnavailableException {
List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
final List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
if (routers == null || routers.isEmpty()) {
return true;
}
boolean result = true;
for (DomainRouterVO router : routers) {
for (final DomainRouterVO router : routers) {
result = result && _routerMgr.stop(router, false, context.getCaller(), context.getAccount()) != null;
if (cleanup) {
if (!result) {
@ -699,7 +699,7 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
@Override
public boolean destroy(final Network config, final ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException {
List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(config.getId(), Role.VIRTUAL_ROUTER);
final List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(config.getId(), Role.VIRTUAL_ROUTER);
if (routers == null || routers.isEmpty()) {
return true;
}
@ -708,8 +708,8 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
// it will fail permission check there. Context passed in from
// deleteNetwork is the network account,
// not caller account
Account callerAccount = _accountMgr.getAccount(context.getCaller().getAccountId());
for (DomainRouterVO router : routers) {
final Account callerAccount = _accountMgr.getAccount(context.getCaller().getAccountId());
for (final DomainRouterVO router : routers) {
result = result && _routerMgr.destroyRouter(router.getId(), callerAccount, context.getCaller().getId()) != null;
}
return result;
@ -720,27 +720,27 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
if (!canHandle(network, null)) {
return false;
}
List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
final List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
if (routers == null || routers.isEmpty()) {
s_logger.debug("Can't find virtual router element in network " + network.getId());
return true;
}
VirtualMachineProfile uservm = vm;
final VirtualMachineProfile uservm = vm;
DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
final DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
final NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
// If any router is running then send save password command otherwise
// save the password in DB
for (VirtualRouter router : routers) {
for (final VirtualRouter router : routers) {
if (router.getState() == State.Running) {
return networkTopology.savePasswordToRouter(network, nic, uservm, routers);
}
}
String password = (String) uservm.getParameter(VirtualMachineProfile.Param.VmPassword);
String password_encrypted = DBEncryptionUtil.encrypt(password);
UserVmVO userVmVO = _userVmDao.findById(vm.getId());
final String password = (String) uservm.getParameter(VirtualMachineProfile.Param.VmPassword);
final String password_encrypted = DBEncryptionUtil.encrypt(password);
final UserVmVO userVmVO = _userVmDao.findById(vm.getId());
_userVmDao.loadDetails(userVmVO);
userVmVO.setDetail("password", password_encrypted);
@ -757,16 +757,16 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
if (!canHandle(network, null)) {
return false;
}
List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
final List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
if (routers == null || routers.isEmpty()) {
s_logger.debug("Can't find virtual router element in network " + network.getId());
return true;
}
VirtualMachineProfile uservm = vm;
final VirtualMachineProfile uservm = vm;
DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
final DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
final NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
return networkTopology.saveSSHPublicKeyToRouter(network, nic, uservm, routers, sshPublicKey);
}
@ -776,23 +776,23 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
if (!canHandle(network, null)) {
return false;
}
List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
final List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
if (routers == null || routers.isEmpty()) {
s_logger.debug("Can't find virtual router element in network " + network.getId());
return true;
}
VirtualMachineProfile uservm = vm;
final VirtualMachineProfile uservm = vm;
DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
final DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
final NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
return networkTopology.saveUserDataToRouter(network, nic, uservm, routers);
}
@Override
public List<Class<?>> getCommands() {
List<Class<?>> cmdList = new ArrayList<Class<?>>();
final List<Class<?>> cmdList = new ArrayList<Class<?>>();
cmdList.add(CreateVirtualRouterElementCmd.class);
cmdList.add(ConfigureVirtualRouterElementCmd.class);
cmdList.add(ListVirtualRouterElementsCmd.class);
@ -801,7 +801,7 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
@Override
public VirtualRouterProvider configure(final ConfigureVirtualRouterElementCmd cmd) {
VirtualRouterProviderVO element = _vrProviderDao.findById(cmd.getId());
final VirtualRouterProviderVO element = _vrProviderDao.findById(cmd.getId());
if (element == null || !(element.getType() == Type.VirtualRouter || element.getType() == Type.VPCVirtualRouter)) {
s_logger.debug("Can't find Virtual Router element with network service provider id " + cmd.getId());
return null;
@ -815,7 +815,7 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
@Override
public OvsProvider configure(final ConfigureOvsElementCmd cmd) {
OvsProviderVO element = _ovsProviderDao.findById(cmd.getId());
final OvsProviderVO element = _ovsProviderDao.findById(cmd.getId());
if (element == null) {
s_logger.debug("Can't find Ovs element with network service provider id " + cmd.getId());
return null;
@ -845,14 +845,14 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
@Override
public boolean applyPFRules(final Network network, final List<PortForwardingRule> rules) throws ResourceUnavailableException {
if (canHandle(network, Service.PortForwarding)) {
List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
final List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
if (routers == null || routers.isEmpty()) {
s_logger.debug("Virtual router elemnt doesn't need to apply firewall rules on the backend; virtual " + "router doesn't exist in the network " + network.getId());
return true;
}
DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
final DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
final NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
if (!networkTopology.applyFirewallRules(network, rules, routers)) {
throw new CloudRuntimeException("Failed to apply firewall rules in network " + network.getId());
@ -866,7 +866,7 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
@Override
public boolean isReady(final PhysicalNetworkServiceProvider provider) {
VirtualRouterProviderVO element = _vrProviderDao.findByNspIdAndType(provider.getId(), getVirtualRouterProvider());
final VirtualRouterProviderVO element = _vrProviderDao.findByNspIdAndType(provider.getId(), getVirtualRouterProvider());
if (element == null) {
return false;
}
@ -875,16 +875,16 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
@Override
public boolean shutdownProviderInstances(final PhysicalNetworkServiceProvider provider, final ReservationContext context) throws ConcurrentOperationException,
ResourceUnavailableException {
VirtualRouterProviderVO element = _vrProviderDao.findByNspIdAndType(provider.getId(), getVirtualRouterProvider());
ResourceUnavailableException {
final VirtualRouterProviderVO element = _vrProviderDao.findByNspIdAndType(provider.getId(), getVirtualRouterProvider());
if (element == null) {
return true;
}
// Find domain routers
long elementId = element.getId();
List<DomainRouterVO> routers = _routerDao.listByElementId(elementId);
final long elementId = element.getId();
final List<DomainRouterVO> routers = _routerDao.listByElementId(elementId);
boolean result = true;
for (DomainRouterVO router : routers) {
for (final DomainRouterVO router : routers) {
result = result && _routerMgr.destroyRouter(router.getId(), context.getAccount(), context.getCaller().getId()) != null;
}
_vrProviderDao.remove(elementId);
@ -898,13 +898,13 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
}
public Long getIdByNspId(final Long nspId) {
VirtualRouterProviderVO vr = _vrProviderDao.findByNspIdAndType(nspId, Type.VirtualRouter);
final VirtualRouterProviderVO vr = _vrProviderDao.findByNspIdAndType(nspId, Type.VirtualRouter);
return vr.getId();
}
@Override
public VirtualRouterProvider getCreatedElement(final long id) {
VirtualRouterProvider provider = _vrProviderDao.findById(id);
final VirtualRouterProvider provider = _vrProviderDao.findById(id);
if (!(provider.getType() == Type.VirtualRouter || provider.getType() == Type.VPCVirtualRouter)) {
throw new InvalidParameterValueException("Unable to find provider by id");
}
@ -913,7 +913,7 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
@Override
public boolean release(final Network network, final NicProfile nic, final VirtualMachineProfile vm, final ReservationContext context) throws ConcurrentOperationException,
ResourceUnavailableException {
ResourceUnavailableException {
return true;
}
@ -925,16 +925,16 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
return false;
}
VirtualMachineProfile uservm = vm;
final VirtualMachineProfile uservm = vm;
List<DomainRouterVO> routers = getRouters(network, dest);
final List<DomainRouterVO> routers = getRouters(network, dest);
if (routers == null || routers.size() == 0) {
throw new ResourceUnavailableException("Can't find at least one router!", DataCenter.class, network.getDataCenterId());
}
DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
final DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
final NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
return networkTopology.configDhcpForSubnet(network, nic, uservm, dest, routers);
}
@ -944,13 +944,13 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
@Override
public boolean removeDhcpSupportForSubnet(final Network network) throws ResourceUnavailableException {
if (canHandle(network, Service.Dhcp)) {
List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
final List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
if (routers == null || routers.size() == 0) {
throw new ResourceUnavailableException("Can't find at least one router!", DataCenter.class, network.getDataCenterId());
}
try {
return _routerMgr.removeDhcpSupportForSubnet(network, routers);
} catch (ResourceUnavailableException e) {
} catch (final ResourceUnavailableException e) {
s_logger.debug("Router resource unavailable ");
}
}
@ -965,16 +965,16 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
return false;
}
VirtualMachineProfile uservm = vm;
final VirtualMachineProfile uservm = vm;
List<DomainRouterVO> routers = getRouters(network, dest);
final List<DomainRouterVO> routers = getRouters(network, dest);
if (routers == null || routers.size() == 0) {
throw new ResourceUnavailableException("Can't find at least one router!", DataCenter.class, network.getDataCenterId());
}
DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
final DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
final NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
return networkTopology.applyDhcpEntry(network, nic, uservm, dest, routers);
}
@ -994,16 +994,16 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
return true;
}
VirtualMachineProfile uservm = vm;
final VirtualMachineProfile uservm = vm;
List<DomainRouterVO> routers = getRouters(network, dest);
final List<DomainRouterVO> routers = getRouters(network, dest);
if (routers == null || routers.size() == 0) {
throw new ResourceUnavailableException("Can't find at least one router!", DataCenter.class, network.getDataCenterId());
}
DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
final DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
final NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
return networkTopology.applyUserData(network, nic, uservm, dest, routers);
}
@ -1015,7 +1015,7 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
if (_networkMdl.isProviderSupportServiceInNetwork(network.getId(), Service.SourceNat, getProvider())) {
publicNetwork = true;
}
boolean isPodBased = (dest.getDataCenter().getNetworkType() == NetworkType.Basic || _networkMdl.isSecurityGroupSupportedInNetwork(network))
final boolean isPodBased = (dest.getDataCenter().getNetworkType() == NetworkType.Basic || _networkMdl.isSecurityGroupSupportedInNetwork(network))
&& network.getTrafficType() == TrafficType.Guest;
List<DomainRouterVO> routers;
@ -1024,7 +1024,7 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
} else {
if (isPodBased && dest.getPod() != null) {
Long podId = dest.getPod().getId();
final Long podId = dest.getPod().getId();
routers = _routerDao.listByNetworkAndPodAndRole(network.getId(), podId, Role.VIRTUAL_ROUTER);
} else {
// With pod == null, it's network restart case, we would add all
@ -1040,8 +1040,8 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
// With pod == null, it's network restart case, we already add all
// routers to it
if (isPodBased && dest.getPod() != null && _routerMgr.getDnsBasicZoneUpdate().equalsIgnoreCase("all")) {
Long podId = dest.getPod().getId();
List<DomainRouterVO> allRunningRoutersOutsideThePod = _routerDao.findByNetworkOutsideThePod(network.getId(), podId, State.Running, Role.VIRTUAL_ROUTER);
final Long podId = dest.getPod().getId();
final List<DomainRouterVO> allRunningRoutersOutsideThePod = _routerDao.findByNetworkOutsideThePod(network.getId(), podId, State.Running, Role.VIRTUAL_ROUTER);
routers.addAll(allRunningRoutersOutsideThePod);
}
return routers;
@ -1049,11 +1049,11 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
@Override
public List<? extends VirtualRouterProvider> searchForVirtualRouterElement(final ListVirtualRouterElementsCmd cmd) {
Long id = cmd.getId();
Long nspId = cmd.getNspId();
Boolean enabled = cmd.getEnabled();
final Long id = cmd.getId();
final Long nspId = cmd.getNspId();
final Boolean enabled = cmd.getEnabled();
QueryBuilder<VirtualRouterProviderVO> sc = QueryBuilder.create(VirtualRouterProviderVO.class);
final QueryBuilder<VirtualRouterProviderVO> sc = QueryBuilder.create(VirtualRouterProviderVO.class);
if (id != null) {
sc.and(sc.entity().getId(), Op.EQ, id);
}
@ -1072,10 +1072,10 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
@Override
public List<? extends OvsProvider> searchForOvsElement(final ListOvsElementsCmd cmd) {
Long id = cmd.getId();
Long nspId = cmd.getNspId();
Boolean enabled = cmd.getEnabled();
QueryBuilder<OvsProviderVO> sc = QueryBuilder.create(OvsProviderVO.class);
final Long id = cmd.getId();
final Long nspId = cmd.getNspId();
final Boolean enabled = cmd.getEnabled();
final QueryBuilder<OvsProviderVO> sc = QueryBuilder.create(OvsProviderVO.class);
if (id != null) {
sc.and(sc.entity().getId(), Op.EQ, id);
@ -1111,11 +1111,11 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
}
private boolean canHandleLbRules(final List<LoadBalancingRule> rules) {
Map<Capability, String> lbCaps = getCapabilities().get(Service.Lb);
final Map<Capability, String> lbCaps = getCapabilities().get(Service.Lb);
if (!lbCaps.isEmpty()) {
String schemeCaps = lbCaps.get(Capability.LbSchemes);
final String schemeCaps = lbCaps.get(Capability.LbSchemes);
if (schemeCaps != null) {
for (LoadBalancingRule rule : rules) {
for (final LoadBalancingRule rule : rules) {
if (!schemeCaps.contains(rule.getScheme().toString())) {
s_logger.debug("Scheme " + rules.get(0).getScheme() + " is not supported by the provider " + getName());
return false;
@ -1133,19 +1133,19 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
}
if (vm.getType() == VirtualMachine.Type.DomainRouter) {
assert vm instanceof DomainRouterVO;
DomainRouterVO router = (DomainRouterVO) vm.getVirtualMachine();
final DomainRouterVO router = (DomainRouterVO) vm.getVirtualMachine();
DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
final DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
final NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
try {
networkTopology.setupDhcpForPvlan(false, router, router.getHostId(), nic);
} catch (ResourceUnavailableException e) {
} catch (final ResourceUnavailableException e) {
s_logger.warn("Timed Out", e);
}
} else if (vm.getType() == VirtualMachine.Type.User) {
assert vm instanceof UserVmVO;
UserVmVO userVm = (UserVmVO) vm.getVirtualMachine();
final UserVmVO userVm = (UserVmVO) vm.getVirtualMachine();
_userVmMgr.setupVmForPvlan(false, userVm.getHostId(), nic);
}
return true;
@ -1158,19 +1158,19 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
}
if (vm.getType() == VirtualMachine.Type.DomainRouter) {
assert vm instanceof DomainRouterVO;
DomainRouterVO router = (DomainRouterVO) vm.getVirtualMachine();
final DomainRouterVO router = (DomainRouterVO) vm.getVirtualMachine();
DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
final DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
final NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
try {
networkTopology.setupDhcpForPvlan(true, router, router.getHostId(), nic);
} catch (ResourceUnavailableException e) {
} catch (final ResourceUnavailableException e) {
s_logger.warn("Timed Out", e);
}
} else if (vm.getType() == VirtualMachine.Type.User) {
assert vm instanceof UserVmVO;
UserVmVO userVm = (UserVmVO) vm.getVirtualMachine();
final UserVmVO userVm = (UserVmVO) vm.getVirtualMachine();
_userVmMgr.setupVmForPvlan(true, userVm.getHostId(), nic);
}
}
@ -1182,26 +1182,26 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
}
if (vm.getType() == VirtualMachine.Type.DomainRouter) {
assert vm instanceof DomainRouterVO;
DomainRouterVO router = (DomainRouterVO) vm.getVirtualMachine();
final DomainRouterVO router = (DomainRouterVO) vm.getVirtualMachine();
DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
final DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
final NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
try {
networkTopology.setupDhcpForPvlan(true, router, router.getHostId(), nic);
} catch (ResourceUnavailableException e) {
} catch (final ResourceUnavailableException e) {
s_logger.warn("Timed Out", e);
}
} else if (vm.getType() == VirtualMachine.Type.User) {
assert vm instanceof UserVmVO;
UserVmVO userVm = (UserVmVO) vm.getVirtualMachine();
final UserVmVO userVm = (UserVmVO) vm.getVirtualMachine();
_userVmMgr.setupVmForPvlan(true, userVm.getHostId(), nic);
}
}
@Override
public boolean prepareAggregatedExecution(final Network network, final DeployDestination dest) throws ResourceUnavailableException {
List<DomainRouterVO> routers = getRouters(network, dest);
final List<DomainRouterVO> routers = getRouters(network, dest);
if (routers == null || routers.size() == 0) {
throw new ResourceUnavailableException("Can't find at least one router!", DataCenter.class, network.getDataCenterId());
@ -1212,7 +1212,7 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
@Override
public boolean completeAggregatedExecution(final Network network, final DeployDestination dest) throws ResourceUnavailableException {
List<DomainRouterVO> routers = getRouters(network, dest);
final List<DomainRouterVO> routers = getRouters(network, dest);
if (routers == null || routers.size() == 0) {
throw new ResourceUnavailableException("Can't find at least one router!", DataCenter.class, network.getDataCenterId());

View File

@ -16,6 +16,7 @@
// under the License.
package com.cloud.network.element;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -28,6 +29,8 @@ import org.apache.cloudstack.network.topology.NetworkTopology;
import org.apache.log4j.Logger;
import org.cloud.network.router.deployment.RouterDeploymentDefinition;
import org.cloud.network.router.deployment.RouterDeploymentDefinitionBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import com.cloud.dc.DataCenter;
import com.cloud.dc.DataCenterVO;
@ -36,6 +39,7 @@ import com.cloud.exception.ConcurrentOperationException;
import com.cloud.exception.InsufficientCapacityException;
import com.cloud.exception.ResourceUnavailableException;
import com.cloud.network.IpAddress;
import com.cloud.network.IpAddressManager;
import com.cloud.network.Network;
import com.cloud.network.Network.Capability;
import com.cloud.network.Network.Provider;
@ -53,6 +57,7 @@ import com.cloud.network.dao.NetworkDao;
import com.cloud.network.dao.Site2SiteVpnGatewayDao;
import com.cloud.network.router.VirtualRouter;
import com.cloud.network.router.VirtualRouter.Role;
import com.cloud.network.router.VpcNetworkHelperImpl;
import com.cloud.network.router.VpcVirtualNetworkApplianceManager;
import com.cloud.network.vpc.NetworkACLItem;
import com.cloud.network.vpc.NetworkACLItemDao;
@ -62,6 +67,7 @@ import com.cloud.network.vpc.StaticRouteProfile;
import com.cloud.network.vpc.Vpc;
import com.cloud.network.vpc.VpcGateway;
import com.cloud.network.vpc.VpcManager;
import com.cloud.network.vpc.dao.VpcDao;
import com.cloud.network.vpc.dao.VpcGatewayDao;
import com.cloud.offering.NetworkOffering;
import com.cloud.utils.db.EntityManager;
@ -70,13 +76,18 @@ import com.cloud.vm.DomainRouterVO;
import com.cloud.vm.NicProfile;
import com.cloud.vm.ReservationContext;
import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachineManager;
import com.cloud.vm.VirtualMachineProfile;
@Local(value = { NetworkElement.class, FirewallServiceProvider.class, DhcpServiceProvider.class, UserDataServiceProvider.class, StaticNatServiceProvider.class,
LoadBalancingServiceProvider.class, PortForwardingServiceProvider.class, IpDeployer.class, VpcProvider.class, Site2SiteVpnServiceProvider.class,
NetworkACLServiceProvider.class })
public class VpcVirtualRouterElement extends VirtualRouterElement implements VpcProvider, Site2SiteVpnServiceProvider, NetworkACLServiceProvider {
private static final Logger s_logger = Logger.getLogger(VpcVirtualRouterElement.class);
private static final Map<Service, Map<Capability, String>> capabilities = setCapabilities();
@Inject
VpcManager _vpcMgr;
@Inject
@ -95,12 +106,20 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc
NetworkACLItemDao _networkACLItemDao;
@Inject
EntityManager _entityMgr;
@Inject
VirtualMachineManager _itMgr;
@Inject
IpAddressManager _ipAddrMgr;
@Inject
VpcDao _vpcDao;
@Autowired
@Qualifier("vpcNetworkHelper")
private VpcNetworkHelperImpl _vpcNetWprkHelper;
@Inject
private RouterDeploymentDefinitionBuilder routerDeploymentDefinitionBuilder;
private static final Map<Service, Map<Capability, String>> capabilities = setCapabilities();
@Override
protected boolean canHandle(final Network network, final Service service) {
final Long physicalNetworkId = _networkMdl.getPhysicalNetworkId(network);
@ -179,8 +198,13 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc
final Map<VirtualMachineProfile.Param, Object> params = new HashMap<VirtualMachineProfile.Param, Object>(1);
params.put(VirtualMachineProfile.Param.ReProgramGuestNetworks, true);
final RouterDeploymentDefinition routerDeploymentDefinition = routerDeploymentDefinitionBuilder.create().setVpc(vpc).setDeployDestination(dest)
.setAccountOwner(_accountMgr.getAccount(vpc.getAccountId())).setParams(params).build();
final RouterDeploymentDefinition routerDeploymentDefinition = routerDeploymentDefinitionBuilder.create()
.setGuestNetwork(network)
.setVpc(vpc)
.setDeployDestination(dest)
.setAccountOwner(_accountMgr.getAccount(vpc.getAccountId()))
.setParams(params)
.build();
final List<DomainRouterVO> routers = routerDeploymentDefinition.deployVirtualRouter();
@ -188,23 +212,29 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc
throw new ResourceUnavailableException("Can't find at least one running router!", DataCenter.class, network.getDataCenterId());
}
configureGuestNetwork(network, routers);
return true;
}
protected void configureGuestNetwork(final Network network, final List<DomainRouterVO> routers )
throws ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException {
s_logger.info("Adding VPC routers to Guest Network: " + routers.size() + " to be added!");
for (final DomainRouterVO domainRouterVO : routers) {
if (!_networkMdl.isVmPartOfNetwork(domainRouterVO.getId(), network.getId())) {
for (final DomainRouterVO router : routers) {
if (!_networkMdl.isVmPartOfNetwork(router.getId(), network.getId())) {
final Map<VirtualMachineProfile.Param, Object> paramsForRouter = new HashMap<VirtualMachineProfile.Param, Object>(1);
if (network.getState() == State.Setup) {
paramsForRouter.put(VirtualMachineProfile.Param.ReProgramGuestNetworks, true);
}
if (!_vpcRouterMgr.addVpcRouterToGuestNetwork(domainRouterVO, network, paramsForRouter)) {
s_logger.error("Failed to add VPC router " + domainRouterVO + " to guest network " + network);
if (!_vpcRouterMgr.addVpcRouterToGuestNetwork(router, network, paramsForRouter)) {
s_logger.error("Failed to add VPC router " + router + " to guest network " + network);
} else {
s_logger.debug("Successfully added VPC router " + domainRouterVO + " to guest network " + network);
s_logger.debug("Successfully added VPC router " + router + " to guest network " + network);
}
}
}
return true;
}
@Override
@ -227,31 +257,21 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc
final Map<VirtualMachineProfile.Param, Object> params = new HashMap<VirtualMachineProfile.Param, Object>(1);
params.put(VirtualMachineProfile.Param.ReProgramGuestNetworks, true);
final RouterDeploymentDefinition routerDeploymentDefinition = routerDeploymentDefinitionBuilder.create().setVpc(vpc).setDeployDestination(dest)
.setAccountOwner(_accountMgr.getAccount(vpc.getAccountId())).setParams(params).build();
final RouterDeploymentDefinition routerDeploymentDefinition = routerDeploymentDefinitionBuilder.create()
.setGuestNetwork(network)
.setVpc(vpc)
.setDeployDestination(dest)
.setAccountOwner(_accountMgr.getAccount(vpc.getAccountId()))
.setParams(params)
.build();
final List<DomainRouterVO> routers = routerDeploymentDefinition.deployVirtualRouter();
if (routers == null || routers.size() == 0) {
throw new ResourceUnavailableException("Can't find at least one running router!", DataCenter.class, network.getDataCenterId());
}
s_logger.info("Adding VPC routers to Guest Network: " + routers.size() + " to be added!");
for (final DomainRouterVO domainRouterVO : routers) {
// Add router to guest network if needed
if (!_networkMdl.isVmPartOfNetwork(domainRouterVO.getId(), network.getId())) {
final Map<VirtualMachineProfile.Param, Object> paramsForRouter = new HashMap<VirtualMachineProfile.Param, Object>(1);
// need to reprogram guest network if it comes in a setup state
if (network.getState() == State.Setup) {
paramsForRouter.put(VirtualMachineProfile.Param.ReProgramGuestNetworks, true);
}
if (!_vpcRouterMgr.addVpcRouterToGuestNetwork(domainRouterVO, network, paramsForRouter)) {
s_logger.error("Failed to add VPC router " + domainRouterVO + " to guest network " + network);
} else {
s_logger.debug("Successfully added VPC router " + domainRouterVO + " to guest network " + network);
}
}
}
configureGuestNetwork(network, routers);
}
return true;
@ -318,6 +338,42 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc
return Provider.VPCVirtualRouter;
}
@Override
protected List<DomainRouterVO> getRouters(final Network network, final DeployDestination dest) {
List<DomainRouterVO> routers = new ArrayList<DomainRouterVO>();
final Long vpcId = network.getVpcId();
if (vpcId == null) {
s_logger.error("Network " + network + " is not associated with any VPC");
return routers;
}
final Vpc vpc = _vpcMgr.getActiveVpc(vpcId);
if (vpc == null) {
s_logger.warn("Unable to find Enabled VPC by id " + vpcId);
return routers;
}
final RouterDeploymentDefinition routerDeploymentDefinition = routerDeploymentDefinitionBuilder.create()
.setGuestNetwork(network)
.setVpc(vpc)
.setDeployDestination(dest)
.setAccountOwner(_accountMgr.getAccount(vpc.getAccountId()))
.build();
try {
routers = routerDeploymentDefinition.deployVirtualRouter();
} catch (final ConcurrentOperationException e) {
s_logger.error("Error occurred when loading routers from routerDeploymentDefinition.deployVirtualRouter()!", e);
} catch (final InsufficientCapacityException e) {
s_logger.error("Error occurred when loading routers from routerDeploymentDefinition.deployVirtualRouter()!", e);
} catch (final ResourceUnavailableException e) {
s_logger.error("Error occurred when loading routers from routerDeploymentDefinition.deployVirtualRouter()!", e);
}
return routers;
}
private static Map<Service, Map<Capability, String>> setCapabilities() {
final Map<Service, Map<Capability, String>> capabilities = new HashMap<Service, Map<Capability, String>>();
capabilities.putAll(VirtualRouterElement.capabilities);

View File

@ -62,6 +62,8 @@ import com.cloud.network.dao.NetworkDao;
import com.cloud.network.dao.NetworkVO;
import com.cloud.network.dao.PhysicalNetworkDao;
import com.cloud.network.dao.PhysicalNetworkVO;
import com.cloud.network.vpc.Vpc;
import com.cloud.network.vpc.dao.VpcDao;
import com.cloud.offering.NetworkOffering;
import com.cloud.server.ConfigurationServer;
import com.cloud.user.Account;
@ -83,6 +85,9 @@ import com.cloud.vm.dao.NicDao;
@Local(value = NetworkGuru.class)
public abstract class GuestNetworkGuru extends AdapterBase implements NetworkGuru, Configurable {
private static final Logger s_logger = Logger.getLogger(GuestNetworkGuru.class);
@Inject
protected VpcDao _vpcDao;
@Inject
protected NetworkOrchestrationService _networkMgr;
@Inject
@ -130,8 +135,8 @@ public abstract class GuestNetworkGuru extends AdapterBase implements NetworkGur
}
@Override
public boolean isMyTrafficType(TrafficType type) {
for (TrafficType t : TrafficTypes) {
public boolean isMyTrafficType(final TrafficType type) {
for (final TrafficType t : TrafficTypes) {
if (t == type) {
return true;
}
@ -144,14 +149,14 @@ public abstract class GuestNetworkGuru extends AdapterBase implements NetworkGur
return TrafficTypes;
}
public boolean isMyIsolationMethod(PhysicalNetwork physicalNetwork) {
public boolean isMyIsolationMethod(final PhysicalNetwork physicalNetwork) {
if (physicalNetwork == null) {
// Can't tell if there is no physical network
return false;
}
List<String> methods = new ArrayList<String>();
for (String method : physicalNetwork.getIsolationMethods()) {
for (final String method : physicalNetwork.getIsolationMethods()) {
methods.add(method.toLowerCase());
}
if (methods.isEmpty()) {
@ -161,7 +166,7 @@ public abstract class GuestNetworkGuru extends AdapterBase implements NetworkGur
methods.add("VLAN".toLowerCase());
}
for (IsolationMethod m : _isolationMethods) {
for (final IsolationMethod m : _isolationMethods) {
if (methods.contains(m.toString().toLowerCase())) {
return true;
}
@ -177,19 +182,19 @@ public abstract class GuestNetworkGuru extends AdapterBase implements NetworkGur
protected abstract boolean canHandle(NetworkOffering offering, final NetworkType networkType, PhysicalNetwork physicalNetwork);
@Override
public Network design(NetworkOffering offering, DeploymentPlan plan, Network userSpecified, Account owner) {
DataCenter dc = _dcDao.findById(plan.getDataCenterId());
PhysicalNetworkVO physnet = _physicalNetworkDao.findById(plan.getPhysicalNetworkId());
public Network design(final NetworkOffering offering, final DeploymentPlan plan, final Network userSpecified, final Account owner) {
final DataCenter dc = _dcDao.findById(plan.getDataCenterId());
final PhysicalNetworkVO physnet = _physicalNetworkDao.findById(plan.getPhysicalNetworkId());
if (!canHandle(offering, dc.getNetworkType(), physnet)) {
return null;
}
NetworkVO network =
final NetworkVO network =
new NetworkVO(offering.getTrafficType(), Mode.Dhcp, BroadcastDomainType.Vlan, offering.getId(), State.Allocated, plan.getDataCenterId(),
plan.getPhysicalNetworkId(), offering.getRedundantRouter());
if (userSpecified != null) {
if ((userSpecified.getCidr() == null && userSpecified.getGateway() != null) || (userSpecified.getCidr() != null && userSpecified.getGateway() == null)) {
if (userSpecified.getCidr() == null && userSpecified.getGateway() != null || userSpecified.getCidr() != null && userSpecified.getGateway() == null) {
throw new InvalidParameterValueException("cidr and gateway must be specified together.");
}
@ -197,9 +202,9 @@ public abstract class GuestNetworkGuru extends AdapterBase implements NetworkGur
network.setCidr(userSpecified.getCidr());
network.setGateway(userSpecified.getGateway());
} else {
String guestNetworkCidr = dc.getGuestNetworkCidr();
final String guestNetworkCidr = dc.getGuestNetworkCidr();
if (guestNetworkCidr != null) {
String[] cidrTuple = guestNetworkCidr.split("\\/");
final String[] cidrTuple = guestNetworkCidr.split("\\/");
network.setGateway(NetUtils.getIpRangeStartIpFromCidr(cidrTuple[0], Long.parseLong(cidrTuple[1])));
network.setCidr(guestNetworkCidr);
} else if (dc.getNetworkType() == NetworkType.Advanced) {
@ -212,11 +217,11 @@ public abstract class GuestNetworkGuru extends AdapterBase implements NetworkGur
network.setState(State.Setup);
}
} else {
String guestNetworkCidr = dc.getGuestNetworkCidr();
final String guestNetworkCidr = dc.getGuestNetworkCidr();
if (guestNetworkCidr == null && dc.getNetworkType() == NetworkType.Advanced) {
throw new CloudRuntimeException("Can't design network " + network + "; guest CIDR is not configured per zone " + dc);
}
String[] cidrTuple = guestNetworkCidr.split("\\/");
final String[] cidrTuple = guestNetworkCidr.split("\\/");
network.setGateway(NetUtils.getIpRangeStartIpFromCidr(cidrTuple[0], Long.parseLong(cidrTuple[1])));
network.setCidr(guestNetworkCidr);
}
@ -226,7 +231,7 @@ public abstract class GuestNetworkGuru extends AdapterBase implements NetworkGur
@Override
@DB
public void deallocate(Network network, NicProfile nic, VirtualMachineProfile vm) {
public void deallocate(final Network network, final NicProfile nic, final VirtualMachineProfile vm) {
if (network.getSpecifyIpRanges()) {
if (s_logger.isDebugEnabled()) {
s_logger.debug("Deallocate network: networkId: " + nic.getNetworkId() + ", ip: " + nic.getIp4Address());
@ -236,7 +241,7 @@ public abstract class GuestNetworkGuru extends AdapterBase implements NetworkGur
if (ip != null) {
Transaction.execute(new TransactionCallbackNoReturn() {
@Override
public void doInTransactionWithoutResult(TransactionStatus status) {
public void doInTransactionWithoutResult(final TransactionStatus status) {
_ipAddrMgr.markIpAsUnavailable(ip.getId());
_ipAddressDao.unassignIpAddress(ip.getId());
}
@ -246,8 +251,8 @@ public abstract class GuestNetworkGuru extends AdapterBase implements NetworkGur
}
}
public int getVlanOffset(long physicalNetworkId, int vlanTag) {
PhysicalNetworkVO pNetwork = _physicalNetworkDao.findById(physicalNetworkId);
public int getVlanOffset(final long physicalNetworkId, final int vlanTag) {
final PhysicalNetworkVO pNetwork = _physicalNetworkDao.findById(physicalNetworkId);
if (pNetwork == null) {
throw new CloudRuntimeException("Could not find the physical Network " + physicalNetworkId + ".");
}
@ -256,9 +261,9 @@ public abstract class GuestNetworkGuru extends AdapterBase implements NetworkGur
throw new CloudRuntimeException("Could not find vlan range for physical Network " + physicalNetworkId + ".");
}
Integer lowestVlanTag = null;
List<Pair<Integer, Integer>> vnetList = pNetwork.getVnet();
final List<Pair<Integer, Integer>> vnetList = pNetwork.getVnet();
//finding the vlanrange in which the vlanTag lies.
for (Pair<Integer, Integer> vnet : vnetList) {
for (final Pair<Integer, Integer> vnet : vnetList) {
if (vlanTag >= vnet.first() && vlanTag <= vnet.second()) {
lowestVlanTag = vnet.first();
}
@ -271,17 +276,17 @@ public abstract class GuestNetworkGuru extends AdapterBase implements NetworkGur
public int getGloballyConfiguredCidrSize() {
try {
String globalVlanBits = _configDao.getValue(Config.GuestVlanBits.key());
final String globalVlanBits = _configDao.getValue(Config.GuestVlanBits.key());
return 8 + Integer.parseInt(globalVlanBits);
} catch (Exception e) {
} catch (final Exception e) {
throw new CloudRuntimeException("Failed to read the globally configured VLAN bits size.");
}
}
protected void allocateVnet(Network network, NetworkVO implemented, long dcId, long physicalNetworkId, String reservationId)
protected void allocateVnet(final Network network, final NetworkVO implemented, final long dcId, final long physicalNetworkId, final String reservationId)
throws InsufficientVirtualNetworkCapacityException {
if (network.getBroadcastUri() == null) {
String vnet = _dcDao.allocateVnet(dcId, physicalNetworkId, network.getAccountId(), reservationId, UseSystemGuestVlans.valueIn(network.getAccountId()));
final String vnet = _dcDao.allocateVnet(dcId, physicalNetworkId, network.getAccountId(), reservationId, UseSystemGuestVlans.valueIn(network.getAccountId()));
if (vnet == null) {
throw new InsufficientVirtualNetworkCapacityException("Unable to allocate vnet as a " + "part of network " + network + " implement ", DataCenter.class,
dcId);
@ -295,11 +300,11 @@ public abstract class GuestNetworkGuru extends AdapterBase implements NetworkGur
}
@Override
public Network implement(Network network, NetworkOffering offering, DeployDestination dest, ReservationContext context)
public Network implement(final Network network, final NetworkOffering offering, final DeployDestination dest, final ReservationContext context)
throws InsufficientVirtualNetworkCapacityException {
assert (network.getState() == State.Implementing) : "Why are we implementing " + network;
assert network.getState() == State.Implementing : "Why are we implementing " + network;
long dcId = dest.getDataCenter().getId();
final long dcId = dest.getDataCenter().getId();
//get physical network id
Long physicalNetworkId = network.getPhysicalNetworkId();
@ -309,7 +314,7 @@ public abstract class GuestNetworkGuru extends AdapterBase implements NetworkGur
physicalNetworkId = _networkModel.findPhysicalNetworkId(dcId, offering.getTags(), offering.getTrafficType());
}
NetworkVO implemented =
final NetworkVO implemented =
new NetworkVO(network.getTrafficType(), network.getMode(), network.getBroadcastDomainType(), network.getNetworkOfferingId(), State.Allocated,
network.getDataCenterId(), physicalNetworkId, offering.getRedundantRouter());
@ -326,16 +331,16 @@ public abstract class GuestNetworkGuru extends AdapterBase implements NetworkGur
}
@Override
public NicProfile allocate(Network network, NicProfile nic, VirtualMachineProfile vm) throws InsufficientVirtualNetworkCapacityException,
public NicProfile allocate(final Network network, NicProfile nic, final VirtualMachineProfile vm) throws InsufficientVirtualNetworkCapacityException,
InsufficientAddressCapacityException {
assert (network.getTrafficType() == TrafficType.Guest) : "Look at my name! Why are you calling" + " me when the traffic type is : " + network.getTrafficType();
assert network.getTrafficType() == TrafficType.Guest : "Look at my name! Why are you calling" + " me when the traffic type is : " + network.getTrafficType();
if (nic == null) {
nic = new NicProfile(ReservationStrategy.Start, null, null, null, null);
}
DataCenter dc = _dcDao.findById(network.getDataCenterId());
final DataCenter dc = _dcDao.findById(network.getDataCenterId());
if (nic.getIp4Address() == null) {
nic.setBroadcastUri(network.getBroadcastUri());
@ -350,7 +355,9 @@ public abstract class GuestNetworkGuru extends AdapterBase implements NetworkGur
boolean isGateway = false;
if (vm.getVirtualMachine().getType() == VirtualMachine.Type.DomainRouter) {
if (network.getVpcId() != null) {
if (_networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.SourceNat, Provider.VPCVirtualRouter)) {
final Vpc vpc = _vpcDao.findById(network.getVpcId());
// Redundant Networks need a guest IP that is not the same as the gateway IP.
if (_networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.SourceNat, Provider.VPCVirtualRouter) && !vpc.isRedundant()) {
isGateway = true;
}
} else {
@ -392,8 +399,8 @@ public abstract class GuestNetworkGuru extends AdapterBase implements NetworkGur
}
@Override
public void updateNicProfile(NicProfile profile, Network network) {
DataCenter dc = _dcDao.findById(network.getDataCenterId());
public void updateNicProfile(final NicProfile profile, final Network network) {
final DataCenter dc = _dcDao.findById(network.getDataCenterId());
if (profile != null) {
profile.setDns1(dc.getDns1());
profile.setDns2(dc.getDns2());
@ -401,23 +408,23 @@ public abstract class GuestNetworkGuru extends AdapterBase implements NetworkGur
}
@Override
public void reserve(NicProfile nic, Network network, VirtualMachineProfile vm, DeployDestination dest, ReservationContext context)
public void reserve(final NicProfile nic, final Network network, final VirtualMachineProfile vm, final DeployDestination dest, final ReservationContext context)
throws InsufficientVirtualNetworkCapacityException, InsufficientAddressCapacityException {
assert (nic.getReservationStrategy() == ReservationStrategy.Start) : "What can I do for nics that are not allocated at start? ";
assert nic.getReservationStrategy() == ReservationStrategy.Start : "What can I do for nics that are not allocated at start? ";
nic.setBroadcastUri(network.getBroadcastUri());
nic.setIsolationUri(network.getBroadcastUri());
}
@Override
public boolean release(NicProfile nic, VirtualMachineProfile vm, String reservationId) {
public boolean release(final NicProfile nic, final VirtualMachineProfile vm, final String reservationId) {
nic.setBroadcastUri(null);
nic.setIsolationUri(null);
return true;
}
@Override
public void shutdown(NetworkProfile profile, NetworkOffering offering) {
public void shutdown(final NetworkProfile profile, final NetworkOffering offering) {
if (profile.getBroadcastUri() == null) {
return; // Nothing to do here if the uri is null already
}
@ -434,13 +441,13 @@ public abstract class GuestNetworkGuru extends AdapterBase implements NetworkGur
}
@Override
public boolean trash(Network network, NetworkOffering offering) {
public boolean trash(final Network network, final NetworkOffering offering) {
return true;
}
@Override
public void updateNetworkProfile(NetworkProfile networkProfile) {
DataCenter dc = _dcDao.findById(networkProfile.getDataCenterId());
public void updateNetworkProfile(final NetworkProfile networkProfile) {
final DataCenter dc = _dcDao.findById(networkProfile.getDataCenterId());
networkProfile.setDns1(dc.getDns1());
networkProfile.setDns2(dc.getDns2());
}

View File

@ -31,7 +31,9 @@ import com.cloud.exception.InsufficientCapacityException;
import com.cloud.exception.InsufficientServerCapacityException;
import com.cloud.exception.ResourceUnavailableException;
import com.cloud.exception.StorageUnavailableException;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.network.Network;
import com.cloud.storage.VMTemplateVO;
import com.cloud.user.Account;
import com.cloud.user.User;
import com.cloud.vm.DomainRouterVO;
@ -81,6 +83,12 @@ public interface NetworkHelper {
InsufficientServerCapacityException, InsufficientCapacityException,
StorageUnavailableException, ResourceUnavailableException;
public abstract LinkedHashMap<Network, List<? extends NicProfile>> createRouterNetworks(RouterDeploymentDefinition routerDeploymentDefinition)
public abstract void reallocateRouterNetworks(RouterDeploymentDefinition routerDeploymentDefinition, VirtualRouter router, VMTemplateVO template, HypervisorType hType)
throws ConcurrentOperationException, InsufficientAddressCapacityException, InsufficientCapacityException;
public abstract LinkedHashMap<Network, List<? extends NicProfile>> configureDefaultNics(RouterDeploymentDefinition routerDeploymentDefinition)
throws ConcurrentOperationException, InsufficientAddressCapacityException;
public abstract LinkedHashMap<Network, List<? extends NicProfile>> configureGuestNic(RouterDeploymentDefinition routerDeploymentDefinition)
throws ConcurrentOperationException, InsufficientAddressCapacityException;
}

View File

@ -28,7 +28,6 @@ import javax.annotation.PostConstruct;
import javax.ejb.Local;
import javax.inject.Inject;
import com.cloud.user.dao.UserDao;
import org.apache.cloudstack.context.CallContext;
import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
import org.apache.cloudstack.framework.config.ConfigKey;
@ -87,6 +86,7 @@ import com.cloud.storage.dao.VolumeDao;
import com.cloud.user.Account;
import com.cloud.user.AccountManager;
import com.cloud.user.User;
import com.cloud.user.dao.UserDao;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.net.NetUtils;
import com.cloud.vm.DomainRouterVO;
@ -121,8 +121,6 @@ public class NetworkHelperImpl implements NetworkHelper {
@Inject
protected NetworkModel _networkModel;
@Inject
private VirtualMachineManager _itMgr;
@Inject
private AccountManager _accountMgr;
@Inject
private Site2SiteVpnManager _s2sVpnMgr;
@ -131,8 +129,6 @@ public class NetworkHelperImpl implements NetworkHelper {
@Inject
private VolumeDao _volumeDao;
@Inject
private ServiceOfferingDao _serviceOfferingDao;
@Inject
private VMTemplateDao _templateDao;
@Inject
private ResourceManager _resourceMgr;
@ -141,8 +137,6 @@ public class NetworkHelperImpl implements NetworkHelper {
@Inject
protected IPAddressDao _ipAddressDao;
@Inject
private IpAddressManager _ipAddrMgr;
@Inject
private UserIpv6AddressDao _ipv6Dao;
@Inject
private RouterControlHelper _routerControlHelper;
@ -150,6 +144,11 @@ public class NetworkHelperImpl implements NetworkHelper {
protected NetworkOrchestrationService _networkMgr;
@Inject
private UserDao _userDao;
protected ServiceOfferingDao _serviceOfferingDao;
@Inject
protected VirtualMachineManager _itMgr;
@Inject
protected IpAddressManager _ipAddrMgr;
protected final Map<HypervisorType, ConfigKey<String>> hypervisorsMap = new HashMap<>();
@ -288,7 +287,7 @@ public class NetworkHelperImpl implements NetworkHelper {
if (router.getTemplateVersion() == null) {
return false;
}
long dcid = router.getDataCenterId();
final long dcid = router.getDataCenterId();
final String trimmedVersion = Version.trimRouterVersion(router.getTemplateVersion());
return Version.compare(trimmedVersion, NetworkOrchestrationService.MinVRVersion.valueIn(dcid)) >= 0;
}
@ -531,9 +530,7 @@ public class NetworkHelperImpl implements NetworkHelper {
router.setRole(Role.VIRTUAL_ROUTER);
router = _routerDao.persist(router);
final LinkedHashMap<Network, List<? extends NicProfile>> networks = createRouterNetworks(routerDeploymentDefinition);
_itMgr.allocate(router.getInstanceName(), template, routerOffering, networks, routerDeploymentDefinition.getPlan(), null);
reallocateRouterNetworks(routerDeploymentDefinition, router, template, null);
router = _routerDao.findById(router.getId());
} catch (final InsufficientCapacityException ex) {
if (allocateRetry < 2 && iter.hasNext()) {
@ -645,13 +642,66 @@ public class NetworkHelperImpl implements NetworkHelper {
}
@Override
public LinkedHashMap<Network, List<? extends NicProfile>> createRouterNetworks(final RouterDeploymentDefinition routerDeploymentDefinition)
public LinkedHashMap<Network, List<? extends NicProfile>> configureDefaultNics(final RouterDeploymentDefinition routerDeploymentDefinition) throws ConcurrentOperationException, InsufficientAddressCapacityException {
final LinkedHashMap<Network, List<? extends NicProfile>> networks = configureGuestNic(routerDeploymentDefinition);
// 2) Control network
s_logger.debug("Adding nic for Virtual Router in Control network ");
final List<? extends NetworkOffering> offerings = _networkModel.getSystemAccountNetworkOfferings(NetworkOffering.SystemControlNetwork);
final NetworkOffering controlOffering = offerings.get(0);
final Network controlConfig = _networkMgr.setupNetwork(s_systemAccount, controlOffering, routerDeploymentDefinition.getPlan(), null, null, false).get(0);
networks.put(controlConfig, new ArrayList<NicProfile>());
// 3) Public network
if (routerDeploymentDefinition.isPublicNetwork()) {
s_logger.debug("Adding nic for Virtual Router in Public network ");
// if source nat service is supported by the network, get the source
// nat ip address
final NicProfile defaultNic = new NicProfile();
defaultNic.setDefaultNic(true);
final PublicIp sourceNatIp = routerDeploymentDefinition.getSourceNatIP();
defaultNic.setIp4Address(sourceNatIp.getAddress().addr());
defaultNic.setGateway(sourceNatIp.getGateway());
defaultNic.setNetmask(sourceNatIp.getNetmask());
defaultNic.setMacAddress(sourceNatIp.getMacAddress());
// get broadcast from public network
final Network pubNet = _networkDao.findById(sourceNatIp.getNetworkId());
if (pubNet.getBroadcastDomainType() == BroadcastDomainType.Vxlan) {
defaultNic.setBroadcastType(BroadcastDomainType.Vxlan);
defaultNic.setBroadcastUri(BroadcastDomainType.Vxlan.toUri(sourceNatIp.getVlanTag()));
defaultNic.setIsolationUri(BroadcastDomainType.Vxlan.toUri(sourceNatIp.getVlanTag()));
} else {
defaultNic.setBroadcastType(BroadcastDomainType.Vlan);
defaultNic.setBroadcastUri(BroadcastDomainType.Vlan.toUri(sourceNatIp.getVlanTag()));
defaultNic.setIsolationUri(IsolationType.Vlan.toUri(sourceNatIp.getVlanTag()));
}
//If guest nic has already been addedd we will have 2 devices in the list.
if (networks.size() > 1) {
defaultNic.setDeviceId(2);
}
final NetworkOffering publicOffering = _networkModel.getSystemAccountNetworkOfferings(NetworkOffering.SystemPublicNetwork).get(0);
final List<? extends Network> publicNetworks = _networkMgr.setupNetwork(s_systemAccount, publicOffering, routerDeploymentDefinition.getPlan(), null, null, false);
final String publicIp = defaultNic.getIp4Address();
// We want to use the identical MAC address for RvR on public
// interface if possible
final NicVO peerNic = _nicDao.findByIp4AddressAndNetworkId(publicIp, publicNetworks.get(0).getId());
if (peerNic != null) {
s_logger.info("Use same MAC as previous RvR, the MAC is " + peerNic.getMacAddress());
defaultNic.setMacAddress(peerNic.getMacAddress());
}
networks.put(publicNetworks.get(0), new ArrayList<NicProfile>(Arrays.asList(defaultNic)));
}
return networks;
}
@Override
public LinkedHashMap<Network, List<? extends NicProfile>> configureGuestNic(final RouterDeploymentDefinition routerDeploymentDefinition)
throws ConcurrentOperationException, InsufficientAddressCapacityException {
// Form networks
final LinkedHashMap<Network, List<? extends NicProfile>> networks = new LinkedHashMap<Network, List<? extends NicProfile>>(3);
// 1) Guest network
boolean hasGuestNetwork = false;
final Network guestNetwork = routerDeploymentDefinition.getGuestNetwork();
if (guestNetwork != null) {
@ -711,57 +761,20 @@ public class NetworkHelperImpl implements NetworkHelper {
}
networks.put(guestNetwork, new ArrayList<NicProfile>(Arrays.asList(gatewayNic)));
hasGuestNetwork = true;
}
// 2) Control network
s_logger.debug("Adding nic for Virtual Router in Control network ");
final List<? extends NetworkOffering> offerings = _networkModel.getSystemAccountNetworkOfferings(NetworkOffering.SystemControlNetwork);
final NetworkOffering controlOffering = offerings.get(0);
final Network controlConfig = _networkMgr.setupNetwork(s_systemAccount, controlOffering, routerDeploymentDefinition.getPlan(), null, null, false).get(0);
networks.put(controlConfig, new ArrayList<NicProfile>());
// 3) Public network
if (routerDeploymentDefinition.isPublicNetwork()) {
s_logger.debug("Adding nic for Virtual Router in Public network ");
// if source nat service is supported by the network, get the source
// nat ip address
final NicProfile defaultNic = new NicProfile();
defaultNic.setDefaultNic(true);
final PublicIp sourceNatIp = routerDeploymentDefinition.getSourceNatIP();
defaultNic.setIp4Address(sourceNatIp.getAddress().addr());
defaultNic.setGateway(sourceNatIp.getGateway());
defaultNic.setNetmask(sourceNatIp.getNetmask());
defaultNic.setMacAddress(sourceNatIp.getMacAddress());
// get broadcast from public network
final Network pubNet = _networkDao.findById(sourceNatIp.getNetworkId());
if (pubNet.getBroadcastDomainType() == BroadcastDomainType.Vxlan) {
defaultNic.setBroadcastType(BroadcastDomainType.Vxlan);
defaultNic.setBroadcastUri(BroadcastDomainType.Vxlan.toUri(sourceNatIp.getVlanTag()));
defaultNic.setIsolationUri(BroadcastDomainType.Vxlan.toUri(sourceNatIp.getVlanTag()));
} else {
defaultNic.setBroadcastType(BroadcastDomainType.Vlan);
defaultNic.setBroadcastUri(BroadcastDomainType.Vlan.toUri(sourceNatIp.getVlanTag()));
defaultNic.setIsolationUri(IsolationType.Vlan.toUri(sourceNatIp.getVlanTag()));
}
if (hasGuestNetwork) {
defaultNic.setDeviceId(2);
}
final NetworkOffering publicOffering = _networkModel.getSystemAccountNetworkOfferings(NetworkOffering.SystemPublicNetwork).get(0);
final List<? extends Network> publicNetworks = _networkMgr.setupNetwork(s_systemAccount, publicOffering, routerDeploymentDefinition.getPlan(), null, null, false);
final String publicIp = defaultNic.getIp4Address();
// We want to use the identical MAC address for RvR on public
// interface if possible
final NicVO peerNic = _nicDao.findByIp4AddressAndNetworkId(publicIp, publicNetworks.get(0).getId());
if (peerNic != null) {
s_logger.info("Use same MAC as previous RvR, the MAC is " + peerNic.getMacAddress());
defaultNic.setMacAddress(peerNic.getMacAddress());
}
networks.put(publicNetworks.get(0), new ArrayList<NicProfile>(Arrays.asList(defaultNic)));
}
return networks;
}
@Override
public void reallocateRouterNetworks(final RouterDeploymentDefinition routerDeploymentDefinition, final VirtualRouter router, final VMTemplateVO template, final HypervisorType hType)
throws ConcurrentOperationException, InsufficientCapacityException {
final ServiceOfferingVO routerOffering = _serviceOfferingDao.findById(routerDeploymentDefinition.getServiceOfferingId());
final LinkedHashMap<Network, List<? extends NicProfile>> networks = configureDefaultNics(routerDeploymentDefinition);
_itMgr.allocate(router.getInstanceName(), template, routerOffering, networks, routerDeploymentDefinition.getPlan(), hType);
}
public static void setSystemAccount(final Account systemAccount) {
s_systemAccount = systemAccount;
}

View File

@ -2632,8 +2632,11 @@ Configurable, StateListener<State, VirtualMachine.Event, VirtualMachine> {
protected boolean aggregationExecution(final AggregationControlCommand.Action action, final Network network, final List<DomainRouterVO> routers)
throws AgentUnavailableException, ResourceUnavailableException {
for (final DomainRouterVO router : routers) {
final AggregationControlCommand cmd = new AggregationControlCommand(action, router.getInstanceName(), _routerControlHelper.getRouterControlIp(router.getId()), _routerControlHelper.getRouterIpInNetwork(
network.getId(), router.getId()));
final String routerControlIp = _routerControlHelper.getRouterControlIp(router.getId());
final String routerIpInNetwork = _routerControlHelper.getRouterIpInNetwork(network.getId(), router.getId());
final AggregationControlCommand cmd = new AggregationControlCommand(action, router.getInstanceName(), routerControlIp, routerIpInNetwork);
final Commands cmds = new Commands(cmd);
if (!_nwHelper.sendCommandsToRouter(router, cmds)) {
return false;

View File

@ -32,7 +32,7 @@ import org.cloud.network.router.deployment.RouterDeploymentDefinition;
import com.cloud.dc.dao.VlanDao;
import com.cloud.exception.ConcurrentOperationException;
import com.cloud.exception.InsufficientAddressCapacityException;
import com.cloud.exception.InsufficientCapacityException;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.network.IpAddress;
import com.cloud.network.Network;
@ -43,6 +43,8 @@ import com.cloud.network.dao.IPAddressVO;
import com.cloud.network.vpc.PrivateGateway;
import com.cloud.network.vpc.VpcManager;
import com.cloud.offering.NetworkOffering;
import com.cloud.service.ServiceOfferingVO;
import com.cloud.storage.VMTemplateVO;
import com.cloud.vm.NicProfile;
@ -76,37 +78,34 @@ public class VpcNetworkHelperImpl extends NetworkHelperImpl {
}
@Override
public LinkedHashMap<Network, List<? extends NicProfile>> createRouterNetworks(
final RouterDeploymentDefinition vpcRouterDeploymentDefinition)
throws ConcurrentOperationException, InsufficientAddressCapacityException {
public void reallocateRouterNetworks(final RouterDeploymentDefinition vpcRouterDeploymentDefinition, final VirtualRouter router, final VMTemplateVO template, final HypervisorType hType)
throws ConcurrentOperationException, InsufficientCapacityException {
final TreeSet<String> publicVlans = new TreeSet<String>();
publicVlans.add(vpcRouterDeploymentDefinition.getSourceNatIP().getVlanTag());
//1) allocate nic for control and source nat public ip
final LinkedHashMap<Network, List<? extends NicProfile>> networks =
super.createRouterNetworks(vpcRouterDeploymentDefinition);
final LinkedHashMap<Network, List<? extends NicProfile>> networks = configureDefaultNics(vpcRouterDeploymentDefinition);
final Long vpcId = vpcRouterDeploymentDefinition.getVpc().getId();
//2) allocate nic for private gateways if needed
final List<PrivateGateway> privateGateways = vpcMgr.getVpcPrivateGateways(vpcId);
if (privateGateways != null && !privateGateways.isEmpty()) {
for (PrivateGateway privateGateway : privateGateways) {
NicProfile privateNic = nicProfileHelper.createPrivateNicProfileForGateway(privateGateway);
Network privateNetwork = _networkModel.getNetwork(privateGateway.getNetworkId());
for (final PrivateGateway privateGateway : privateGateways) {
final NicProfile privateNic = nicProfileHelper.createPrivateNicProfileForGateway(privateGateway);
final Network privateNetwork = _networkModel.getNetwork(privateGateway.getNetworkId());
networks.put(privateNetwork, new ArrayList<NicProfile>(Arrays.asList(privateNic)));
}
}
//3) allocate nic for guest gateway if needed
List<? extends Network> guestNetworks = vpcMgr.getVpcNetworks(vpcId);
for (Network guestNetwork : guestNetworks) {
final List<? extends Network> guestNetworks = vpcMgr.getVpcNetworks(vpcId);
for (final Network guestNetwork : guestNetworks) {
if (_networkModel.isPrivateGateway(guestNetwork.getId())) {
continue;
}
if (guestNetwork.getState() == Network.State.Implemented || guestNetwork.getState() == Network.State.Setup) {
NicProfile guestNic = nicProfileHelper.createGuestNicProfileForVpcRouter(guestNetwork);
final NicProfile guestNic = nicProfileHelper.createGuestNicProfileForVpcRouter(guestNetwork);
networks.put(guestNetwork, new ArrayList<NicProfile>(Arrays.asList(guestNic)));
}
}
@ -115,12 +114,12 @@ public class VpcNetworkHelperImpl extends NetworkHelperImpl {
final List<IPAddressVO> ips = _ipAddressDao.listByAssociatedVpc(vpcId, false);
final List<NicProfile> publicNics = new ArrayList<NicProfile>();
Network publicNetwork = null;
for (IPAddressVO ip : ips) {
PublicIp publicIp = PublicIp.createFromAddrAndVlan(ip, _vlanDao.findById(ip.getVlanId()));
for (final IPAddressVO ip : ips) {
final PublicIp publicIp = PublicIp.createFromAddrAndVlan(ip, _vlanDao.findById(ip.getVlanId()));
if ((ip.getState() == IpAddress.State.Allocated || ip.getState() == IpAddress.State.Allocating) && vpcMgr.isIpAllocatedToVpc(ip) &&
!publicVlans.contains(publicIp.getVlanTag())) {
s_logger.debug("Allocating nic for router in vlan " + publicIp.getVlanTag());
NicProfile publicNic = new NicProfile();
final NicProfile publicNic = new NicProfile();
publicNic.setDefaultNic(false);
publicNic.setIp4Address(publicIp.getAddress().addr());
publicNic.setGateway(publicIp.getGateway());
@ -129,9 +128,9 @@ public class VpcNetworkHelperImpl extends NetworkHelperImpl {
publicNic.setBroadcastType(BroadcastDomainType.Vlan);
publicNic.setBroadcastUri(BroadcastDomainType.Vlan.toUri(publicIp.getVlanTag()));
publicNic.setIsolationUri(IsolationType.Vlan.toUri(publicIp.getVlanTag()));
NetworkOffering publicOffering = _networkModel.getSystemAccountNetworkOfferings(NetworkOffering.SystemPublicNetwork).get(0);
final NetworkOffering publicOffering = _networkModel.getSystemAccountNetworkOfferings(NetworkOffering.SystemPublicNetwork).get(0);
if (publicNetwork == null) {
List<? extends Network> publicNetworks = _networkMgr.setupNetwork(s_systemAccount, publicOffering, vpcRouterDeploymentDefinition.getPlan(), null, null, false);
final List<? extends Network> publicNetworks = _networkMgr.setupNetwork(s_systemAccount, publicOffering, vpcRouterDeploymentDefinition.getPlan(), null, null, false);
publicNetwork = publicNetworks.get(0);
}
publicNics.add(publicNic);
@ -141,6 +140,7 @@ public class VpcNetworkHelperImpl extends NetworkHelperImpl {
if (publicNetwork != null) {
if (networks.get(publicNetwork) != null) {
@SuppressWarnings("unchecked")
final
List<NicProfile> publicNicProfiles = (List<NicProfile>)networks.get(publicNetwork);
publicNicProfiles.addAll(publicNics);
networks.put(publicNetwork, publicNicProfiles);
@ -149,6 +149,8 @@ public class VpcNetworkHelperImpl extends NetworkHelperImpl {
}
}
return networks;
final ServiceOfferingVO routerOffering = _serviceOfferingDao.findById(vpcRouterDeploymentDefinition.getServiceOfferingId());
_itMgr.allocate(router.getInstanceName(), template, routerOffering, networks, vpcRouterDeploymentDefinition.getPlan(), hType);
}
}

View File

@ -194,7 +194,7 @@ public class RouterDeploymentDefinitionBuilder {
public RouterDeploymentDefinition build() {
RouterDeploymentDefinition routerDeploymentDefinition = null;
if (vpc != null) {
routerDeploymentDefinition = new VpcRouterDeploymentDefinition(vpc, dest, owner, params);
routerDeploymentDefinition = new VpcRouterDeploymentDefinition(guestNetwork, vpc, dest, owner, params);
} else {
routerDeploymentDefinition = new RouterDeploymentDefinition(guestNetwork, dest, owner, params);
}

View File

@ -29,6 +29,7 @@ import com.cloud.exception.ConcurrentOperationException;
import com.cloud.exception.InsufficientAddressCapacityException;
import com.cloud.exception.InsufficientCapacityException;
import com.cloud.exception.ResourceUnavailableException;
import com.cloud.network.Network;
import com.cloud.network.PhysicalNetwork;
import com.cloud.network.PhysicalNetworkServiceProvider;
import com.cloud.network.VirtualRouterProvider.Type;
@ -53,10 +54,10 @@ public class VpcRouterDeploymentDefinition extends RouterDeploymentDefinition {
protected Vpc vpc;
protected VpcRouterDeploymentDefinition(final Vpc vpc, final DeployDestination dest, final Account owner,
protected VpcRouterDeploymentDefinition(final Network guestNetwork, final Vpc vpc, final DeployDestination dest, final Account owner,
final Map<Param, Object> params) {
super(null, dest, owner, params);
super(guestNetwork, dest, owner, params);
this.vpc = vpc;
}
@ -197,7 +198,7 @@ public class VpcRouterDeploymentDefinition extends RouterDeploymentDefinition {
}
@Override
protected void generateDeploymentPlan() {
public void generateDeploymentPlan() {
plan = new DataCenterDeployment(dest.getDataCenter().getId());
}

View File

@ -111,7 +111,7 @@ class CsDhcp(CsDataBag):
for o in leases:
if o['del']:
cmd = "dhcp_release eth%s %s %s" % (o.device, o.ip, o.mac)
cmd = "dhcp_release eth%s %s %s" % (o['device'], o['ip'], o['mac'])
logging.info(cmd)
CsHelper.execute(cmd)
except IOError:

View File

@ -52,7 +52,7 @@ vrrp_instance inside_network {
}
!That's the correct path of the master.py file.
notify_master "/root/cloud_scripts/opt/cloud/bin/master.py --master"
notify_backup "/root/cloud_scripts/opt/cloud/bin/master.py --backup"
notify_fault "/root/cloud_scripts/opt/cloud/bin/master.py --fault"
!notify_master "/opt/cloud/bin/master.py --master"
!notify_backup "/opt/cloud/bin/master.py --backup"
!notify_fault "/opt/cloud/bin/master.py --fault"
}