s_logger.error("No NiciraNvp Controller on physical network "
+ network.getPhysicalNetworkId());
return false;
}
NiciraNvpDeviceVO niciraNvpDevice = devices.get(0);
HostVO niciraNvpHost = _hostDao.findById(niciraNvpDevice.getHostId());
_hostDao.loadDetails(niciraNvpHost);
Account owner = context.getAccount();
/**
* Lock the network as we might need to do multiple operations that
* should be done only once.
*/
// Network lock = _networkDao.acquireInLockTable(network.getId(),
// _networkModel.getNetworkLockTimeout());
// if (lock == null) {
// throw new ConcurrentOperationException("Unable to lock network "
// + network.getId());
// }
// Implement SourceNat immediately as we have al the info already
if (_networkModel.isProviderSupportServiceInNetwork(
network.getId(), Service.SourceNat, Provider.NiciraNvp)) {
s_logger.debug("Apparently we are supposed to provide SourceNat on this network");
PublicIp sourceNatIp = _networkManager
.assignSourceNatIpAddressToGuestNetwork(owner, network);
String publicCidr = sourceNatIp.getAddress().addr() + "/"
+ NetUtils.getCidrSize(sourceNatIp.getVlanNetmask());
String internalCidr = network.getGateway() + "/"
+ network.getCidr().split("/")[1];
long vlanid = (Vlan.UNTAGGED.equals(sourceNatIp.getVlanTag())) ? 0
: Long.parseLong(sourceNatIp.getVlanTag());
CreateLogicalRouterCommand cmd = new CreateLogicalRouterCommand(
niciraNvpHost.getDetail("l3gatewayserviceuuid"), vlanid,
network.getBroadcastUri().getSchemeSpecificPart(),
"router-" + network.getDisplayText(), publicCidr,
sourceNatIp.getGateway(), internalCidr, context
.getDomain().getName()
+ "-"
+ context.getAccount().getAccountName());
CreateLogicalRouterAnswer answer = (CreateLogicalRouterAnswer) _agentMgr
.easySend(niciraNvpHost.getId(), cmd);
if (answer.getResult() == false) {
s_logger.error("Failed to create Logical Router for network "
+ network.getDisplayText());
return false;
}