mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
server: publish ip6 assign event with route, always for vpc (#6389)
* server: publish ip6 assign event for vpc always Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com> * refactor event message, fix event publish Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com> * unused import Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com> * Fix event string
This commit is contained in:
parent
1964b7fda3
commit
5f29bc2b80
@ -70,8 +70,6 @@ public interface Ipv6Service extends PluggableService, Configurable {
|
||||
|
||||
void updateNicIpv6(NicProfile nic, DataCenter dc, Network network) throws InsufficientAddressCapacityException;
|
||||
|
||||
void releasePublicIpv6ForNic(Network network, String nicIpv6Address);
|
||||
|
||||
List<String> getPublicIpv6AddressesForNetwork(Network network);
|
||||
|
||||
void updateIpv6RoutesForVpcResponse(Vpc vpc, VpcResponse response);
|
||||
|
||||
@ -55,7 +55,6 @@ import org.apache.cloudstack.framework.messagebus.MessageBus;
|
||||
import org.apache.cloudstack.framework.messagebus.PublishScope;
|
||||
import org.apache.cloudstack.managed.context.ManagedContextRunnable;
|
||||
import org.apache.cloudstack.network.dao.NetworkPermissionDao;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.BooleanUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.log4j.Logger;
|
||||
@ -173,7 +172,6 @@ import com.cloud.network.element.UserDataServiceProvider;
|
||||
import com.cloud.network.element.VirtualRouterElement;
|
||||
import com.cloud.network.guru.NetworkGuru;
|
||||
import com.cloud.network.guru.NetworkGuruAdditionalFunctions;
|
||||
import com.cloud.network.guru.PublicNetworkGuru;
|
||||
import com.cloud.network.lb.LoadBalancingRulesManager;
|
||||
import com.cloud.network.router.VirtualRouter;
|
||||
import com.cloud.network.rules.FirewallManager;
|
||||
@ -2359,15 +2357,6 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra
|
||||
s_logger.debug("Removed nic id=" + nic.getId());
|
||||
// release assigned IPv6 for Isolated Network VR NIC
|
||||
|
||||
if (Type.DomainRouter.equals(vm.getType()) && PublicNetworkGuru.class.getSimpleName().equals(nic.getReserver())
|
||||
&& StringUtils.isNotEmpty(nic.getIPv6Address())) {
|
||||
List<Long> routerNetworks = routerNetworkDao.getRouterNetworks(vm.getId());
|
||||
if (CollectionUtils.isNotEmpty(routerNetworks)) {
|
||||
Network guestNetwork = _networksDao.findById(routerNetworks.get(0));
|
||||
ipv6Service.releasePublicIpv6ForNic(guestNetwork, nic.getIPv6Address());
|
||||
}
|
||||
}
|
||||
|
||||
if (Type.User.equals(vm.getType()) && GuestType.Isolated.equals(network.getGuestType())
|
||||
&& _networkOfferingDao.isIpv6Supported(network.getNetworkOfferingId()) && StringUtils.isNotEmpty(nic.getIPv6Address())) {
|
||||
final boolean usageHidden = networkDetailsDao.isNetworkUsageHidden(network.getId());
|
||||
|
||||
@ -79,6 +79,7 @@ import com.cloud.network.dao.Ipv6GuestPrefixSubnetNetworkMapDao;
|
||||
import com.cloud.network.dao.NetworkDetailsDao;
|
||||
import com.cloud.network.firewall.FirewallService;
|
||||
import com.cloud.network.guru.PublicNetworkGuru;
|
||||
import com.cloud.network.router.VirtualRouter;
|
||||
import com.cloud.network.rules.FirewallManager;
|
||||
import com.cloud.network.rules.FirewallRule;
|
||||
import com.cloud.network.rules.FirewallRuleVO;
|
||||
@ -167,19 +168,55 @@ public class Ipv6ServiceImpl extends ComponentLifecycleBase implements Ipv6Servi
|
||||
return new Pair<>(nic.getIPv6Address(), vlanOptional.get());
|
||||
}
|
||||
|
||||
private void publishPublicIpv6AssignActionEvent(final Network network, final String ipv6Address) {
|
||||
String event = EventTypes.EVENT_NET_IP6_ASSIGN;
|
||||
final String description = String.format("Assigned public IPv6 address: %1$s for network ID: %2$s. Subnet: %3$s, gateway: %1$s", ipv6Address, network.getUuid(), network.getIp6Cidr());
|
||||
ActionEventUtils.onCompletedActionEvent(CallContext.current().getCallingUserId(), network.getAccountId(), EventVO.LEVEL_INFO, event, description, network.getId(), ApiCommandResourceType.Network.toString(), 0);
|
||||
final boolean usageHidden = networkDetailsDao.isNetworkUsageHidden(network.getId());
|
||||
final String guestType = Vlan.VlanType.VirtualNetwork.toString();
|
||||
UsageEventUtils.publishUsageEvent(event, network.getAccountId(), network.getDataCenterId(), 0L,
|
||||
ipv6Address, false, guestType, false, usageHidden,
|
||||
IPv6Network.class.getName(), null);
|
||||
}
|
||||
|
||||
private void publishPublicIpv6ReleaseActionEvent(Network network, String nicIpv6Address) {
|
||||
String event = EventTypes.EVENT_NET_IP6_RELEASE;
|
||||
String description = String.format("Released public IPv6 address: %1$s from network ID: %2$s. Subnet: %3$s, gateway: %1$s", nicIpv6Address, network.getUuid(), network.getIp6Cidr());
|
||||
ActionEventUtils.onCompletedActionEvent(CallContext.current().getCallingUserId(), network.getAccountId(), EventVO.LEVEL_INFO, event, description, network.getId(), ApiCommandResourceType.Network.toString(), 0);
|
||||
final boolean usageHidden = networkDetailsDao.isNetworkUsageHidden(network.getId());
|
||||
UsageEventUtils.publishUsageEvent(event, network.getAccountId(), network.getDataCenterId(), 0L,
|
||||
nicIpv6Address, false, Vlan.VlanType.VirtualNetwork.toString(), false, usageHidden,
|
||||
IPv6Address.class.getName(), null);
|
||||
}
|
||||
|
||||
private void processPublicIpv6AddressUpdateForVpcTier(final Network network, final Nic nic) {
|
||||
if (network.getVpcId() == null || !Network.State.Implementing.equals(network.getState())) {
|
||||
return;
|
||||
}
|
||||
DomainRouterVO router = domainRouterDao.findById(nic.getInstanceId());
|
||||
if (router == null) {
|
||||
return;
|
||||
}
|
||||
if (router.getIsRedundantRouter() && !VirtualRouter.RedundantState.PRIMARY.equals(router.getRedundantState())) {
|
||||
return;
|
||||
}
|
||||
networkOrchestrationService.savePlaceholderNic(network, null, nic.getIPv6Address(), nic.getIPv6Cidr(), nic.getIPv6Gateway(), s_publicNetworkReserver, VirtualMachine.Type.DomainRouter);
|
||||
publishPublicIpv6AssignActionEvent(network, nic.getIPv6Address());
|
||||
}
|
||||
|
||||
private Pair<String, ? extends Vlan> assignPublicIpv6ToNetworkInternal(Network network, String vlanId, String nicMacAddress) throws InsufficientAddressCapacityException {
|
||||
final List<VlanVO> ranges = vlanDao.listIpv6RangeByPhysicalNetworkIdAndVlanId(network.getPhysicalNetworkId(), vlanId);
|
||||
if (CollectionUtils.isEmpty(ranges)) {
|
||||
s_logger.error(String.format("Unable to find IPv6 address for zone ID: %d, physical network ID: %d, VLAN: %s", network.getDataCenterId(), network.getPhysicalNetworkId(), vlanId));
|
||||
InsufficientAddressCapacityException ex = new InsufficientAddressCapacityException("Insufficient address capacity", DataCenter.class, network.getDataCenterId());
|
||||
ex.addProxyObject(ApiDBUtils.findZoneById(network.getDataCenterId()).getUuid());
|
||||
throw ex;
|
||||
}
|
||||
Pair<String, ? extends Vlan> placeholderResult = getPublicIpv6FromNetworkPlaceholder(network, ranges);
|
||||
if (placeholderResult != null) {
|
||||
return placeholderResult;
|
||||
}
|
||||
Pair<String, ? extends Vlan> result = Transaction.execute((TransactionCallbackWithException<Pair<String, ? extends Vlan>, InsufficientAddressCapacityException>) status -> {
|
||||
final List<VlanVO> ranges = vlanDao.listIpv6RangeByPhysicalNetworkIdAndVlanId(network.getPhysicalNetworkId(), vlanId);
|
||||
if (CollectionUtils.isEmpty(ranges)) {
|
||||
s_logger.error(String.format("Unable to find IPv6 address for zone ID: %d, physical network ID: %d, VLAN: %s", network.getDataCenterId(), network.getPhysicalNetworkId(), vlanId));
|
||||
InsufficientAddressCapacityException ex = new InsufficientAddressCapacityException("Insufficient address capacity", DataCenter.class, network.getDataCenterId());
|
||||
ex.addProxyObject(ApiDBUtils.findZoneById(network.getDataCenterId()).getUuid());
|
||||
throw ex;
|
||||
}
|
||||
Pair<String, ? extends Vlan> placeholderResult = getPublicIpv6FromNetworkPlaceholder(network, ranges);
|
||||
if (placeholderResult != null) {
|
||||
return placeholderResult;
|
||||
}
|
||||
removePublicIpv6PlaceholderNics(network);
|
||||
Collections.shuffle(ranges);
|
||||
VlanVO selectedVlan = ranges.get(0);
|
||||
@ -195,14 +232,7 @@ public class Ipv6ServiceImpl extends ComponentLifecycleBase implements Ipv6Servi
|
||||
return new Pair<>(ipv6Addr.toString(), selectedVlan);
|
||||
});
|
||||
final String ipv6Address = result.first();
|
||||
final String event = EventTypes.EVENT_NET_IP6_ASSIGN;
|
||||
final String description = String.format("Assigned public IPv6 address: %s for network ID: %s", ipv6Address, network.getUuid());
|
||||
ActionEventUtils.onCompletedActionEvent(CallContext.current().getCallingUserId(), network.getAccountId(), EventVO.LEVEL_INFO, event, description, network.getId(), ApiCommandResourceType.Network.toString(), 0);
|
||||
final boolean usageHidden = networkDetailsDao.isNetworkUsageHidden(network.getId());
|
||||
final String guestType = result.second().getVlanType().toString();
|
||||
UsageEventUtils.publishUsageEvent(event, network.getAccountId(), network.getDataCenterId(), 0L,
|
||||
ipv6Address, false, guestType, false, usageHidden,
|
||||
IPv6Network.class.getName(), null);
|
||||
publishPublicIpv6AssignActionEvent(network, ipv6Address);
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -380,6 +410,7 @@ public class Ipv6ServiceImpl extends ComponentLifecycleBase implements Ipv6Servi
|
||||
@Override
|
||||
public Nic assignPublicIpv6ToNetwork(Network network, Nic nic) {
|
||||
if (StringUtils.isNotEmpty(nic.getIPv6Address())) {
|
||||
processPublicIpv6AddressUpdateForVpcTier(network, nic);
|
||||
return nic;
|
||||
}
|
||||
try {
|
||||
@ -421,17 +452,6 @@ public class Ipv6ServiceImpl extends ComponentLifecycleBase implements Ipv6Servi
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void releasePublicIpv6ForNic(Network network, String nicIpv6Address) {
|
||||
String event = EventTypes.EVENT_NET_IP6_RELEASE;
|
||||
String description = String.format("Releasing public IPv6 address: %s from network ID: %s", nicIpv6Address, network.getUuid());
|
||||
ActionEventUtils.onCompletedActionEvent(CallContext.current().getCallingUserId(), network.getAccountId(), EventVO.LEVEL_INFO, event, description, network.getId(), ApiCommandResourceType.Network.toString(), 0);
|
||||
final boolean usageHidden = networkDetailsDao.isNetworkUsageHidden(network.getId());
|
||||
UsageEventUtils.publishUsageEvent(event, network.getAccountId(), network.getDataCenterId(), 0L,
|
||||
nicIpv6Address, false, Vlan.VlanType.VirtualNetwork.toString(), false, usageHidden,
|
||||
IPv6Address.class.getName(), null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getPublicIpv6AddressesForNetwork(Network network) {
|
||||
List<String> addresses = new ArrayList<>();
|
||||
@ -656,6 +676,7 @@ public class Ipv6ServiceImpl extends ComponentLifecycleBase implements Ipv6Servi
|
||||
for (Nic nic : nics) {
|
||||
s_logger.debug("Removing placeholder nic " + nic);
|
||||
nicDao.remove(nic.getId());
|
||||
publishPublicIpv6ReleaseActionEvent(network, nic.getIPv6Address());
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user