This is an automated email from the ASF dual-hosted git repository.

rohit pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/main by this push:
     new ef6c0c443d6 Prepend VPC name to VPC network tier name (#9780)
ef6c0c443d6 is described below

commit ef6c0c443d61c7619ae1f5663286a339701b31ed
Author: Abhisar Sinha <[email protected]>
AuthorDate: Tue Dec 3 12:06:00 2024 +0530

    Prepend VPC name to VPC network tier name (#9780)
    
    * Fix `updateTemplatePermission` when the UI is set to a language other 
than English (#9766)
    
    * Fix updateTemplatePermission UI in non-english language
    
    * Improve fix
    
    ---------
    
    Co-authored-by: Lucas Martins <[email protected]>
    
    * Prepend vpc name to vpc tier network name based on global setting
    
    * Added UT for createVpcGuestNetwork
    
    * rename connector to delimiter and add configKey.Category.Network
    
    * Move setting the name to a new method
    
    ---------
    
    Co-authored-by: Daan Hoogland <[email protected]>
    Co-authored-by: Lucas Martins 
<[email protected]>
    Co-authored-by: Lucas Martins <[email protected]>
---
 .../java/com/cloud/network/vpc/VpcManager.java     | 18 +++++++++++
 .../java/com/cloud/network/NetworkServiceImpl.java | 12 ++++++++
 .../java/com/cloud/network/vpc/VpcManagerImpl.java | 17 ++++++++++-
 .../com/cloud/network/NetworkServiceImplTest.java  | 35 ++++++++++++++++++++++
 4 files changed, 81 insertions(+), 1 deletion(-)

diff --git 
a/engine/components-api/src/main/java/com/cloud/network/vpc/VpcManager.java 
b/engine/components-api/src/main/java/com/cloud/network/vpc/VpcManager.java
index a340f49c13f..e7f02e62045 100644
--- a/engine/components-api/src/main/java/com/cloud/network/vpc/VpcManager.java
+++ b/engine/components-api/src/main/java/com/cloud/network/vpc/VpcManager.java
@@ -37,8 +37,26 @@ import com.cloud.network.PhysicalNetwork;
 import com.cloud.network.addr.PublicIp;
 import com.cloud.offering.NetworkOffering;
 import com.cloud.user.Account;
+import org.apache.cloudstack.framework.config.ConfigKey;
 
 public interface VpcManager {
+    ConfigKey<Boolean> VpcTierNamePrepend = new ConfigKey<>(Boolean.class,
+            "vpc.tier.name.prepend",
+            ConfigKey.CATEGORY_NETWORK,
+            "false",
+            "Whether to prepend the VPC name to the VPC tier network name",
+            true,
+            ConfigKey.Scope.Global,
+            null);
+    ConfigKey<String> VpcTierNamePrependDelimiter = new 
ConfigKey<>(String.class,
+            "vpc.tier.name.prepend.delimiter",
+            ConfigKey.CATEGORY_NETWORK,
+            " ",
+            "Delimiter string to use between the VPC and the VPC tier name",
+            true,
+            ConfigKey.Scope.Global,
+            null);
+
     /**
      * Returns all the Guest networks that are part of VPC
      *
diff --git a/server/src/main/java/com/cloud/network/NetworkServiceImpl.java 
b/server/src/main/java/com/cloud/network/NetworkServiceImpl.java
index 2ccd5fdd820..49970a8c1db 100644
--- a/server/src/main/java/com/cloud/network/NetworkServiceImpl.java
+++ b/server/src/main/java/com/cloud/network/NetworkServiceImpl.java
@@ -1476,6 +1476,11 @@ public class NetworkServiceImpl extends ManagerBase 
implements NetworkService, C
         }
     }
 
+    private String getVpcPrependedNetworkName(String networkName, Vpc vpc) {
+        final String delimiter = 
VpcManager.VpcTierNamePrependDelimiter.value();
+        return vpc.getName() + delimiter + networkName;
+    }
+
     @Override
     @DB
     @ActionEvent(eventType = EventTypes.EVENT_NETWORK_CREATE, eventDescription 
= "creating network")
@@ -1788,6 +1793,13 @@ public class NetworkServiceImpl extends ManagerBase 
implements NetworkService, C
 
         checkNetworkDns(ipv6, ntwkOff, vpcId, ip4Dns1, ip4Dns2, ip6Dns1, 
ip6Dns2);
 
+        if (vpcId != null && VpcManager.VpcTierNamePrepend.value()) {
+            Vpc vpc = _vpcDao.findById(vpcId);
+            if (vpc != null) {
+                name = getVpcPrependedNetworkName(name, vpc);
+            }
+        }
+
         Network network = commitNetwork(networkOfferingId, gateway, startIP, 
endIP, netmask, networkDomain, vlanId, bypassVlanOverlapCheck, name, 
displayText, caller, physicalNetworkId, zone.getId(),
                 domainId, isDomainSpecific, subdomainAccess, vpcId, startIPv6, 
endIPv6, ip6Gateway, ip6Cidr, displayNetwork, aclId, secondaryVlanId, 
privateVlanType, ntwkOff, pNtwk, aclType, owner, cidr, createVlan,
                 externalId, routerIPv4, routerIPv6, associatedNetwork, 
ip4Dns1, ip4Dns2, ip6Dns1, ip6Dns2, interfaceMTUs, networkCidrSize);
diff --git a/server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java 
b/server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java
index b956ccc16ed..e20795f1df5 100644
--- a/server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java
+++ b/server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java
@@ -71,6 +71,8 @@ import 
org.apache.cloudstack.api.command.user.vpc.RestartVPCCmd;
 import org.apache.cloudstack.api.command.user.vpc.UpdateVPCCmd;
 import org.apache.cloudstack.context.CallContext;
 import 
org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
+import org.apache.cloudstack.framework.config.ConfigKey;
+import org.apache.cloudstack.framework.config.Configurable;
 import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
 import org.apache.cloudstack.managed.context.ManagedContextRunnable;
 import org.apache.cloudstack.network.Ipv4GuestSubnetNetworkMap;
@@ -195,7 +197,7 @@ import com.cloud.vm.dao.NicDao;
 
 import static com.cloud.offering.NetworkOffering.RoutingMode.Dynamic;
 
-public class VpcManagerImpl extends ManagerBase implements VpcManager, 
VpcProvisioningService, VpcService {
+public class VpcManagerImpl extends ManagerBase implements VpcManager, 
VpcProvisioningService, VpcService, Configurable {
 
     public static final String SERVICE = "service";
     public static final String CAPABILITYTYPE = "capabilitytype";
@@ -3115,6 +3117,19 @@ public class VpcManagerImpl extends ManagerBase 
implements VpcManager, VpcProvis
         }
     }
 
+    @Override
+    public String getConfigComponentName() {
+        return VpcManager.class.getSimpleName();
+    }
+
+    @Override
+    public ConfigKey<?>[] getConfigKeys() {
+        return new ConfigKey<?>[]{
+                VpcTierNamePrepend,
+                VpcTierNamePrependDelimiter
+        };
+    }
+
     protected class VpcCleanupTask extends ManagedContextRunnable {
         @Override
         protected void runInContext() {
diff --git a/server/src/test/java/com/cloud/network/NetworkServiceImplTest.java 
b/server/src/test/java/com/cloud/network/NetworkServiceImplTest.java
index 64d813c9ba8..ce3283752c2 100644
--- a/server/src/test/java/com/cloud/network/NetworkServiceImplTest.java
+++ b/server/src/test/java/com/cloud/network/NetworkServiceImplTest.java
@@ -777,6 +777,41 @@ public class NetworkServiceImplTest {
         
Mockito.verify(routedIpv4Manager).assignIpv4SubnetToNetwork(nullable(Network.class));
     }
 
+    @Test
+    public void testCreateVpcTier() throws InsufficientCapacityException, 
ResourceAllocationException, NoSuchFieldException, IllegalAccessException {
+        Integer privateMtu = 1200;
+        Long networkOfferingId = 1L;
+        Long vpcId = 2L;
+
+        ReflectionTestUtils.setField(createNetworkCmd, "name", "testNetwork");
+        ReflectionTestUtils.setField(createNetworkCmd, "displayText", "Test 
Network");
+        ReflectionTestUtils.setField(createNetworkCmd, "networkOfferingId", 
networkOfferingId);
+        ReflectionTestUtils.setField(createNetworkCmd, "zoneId", zoneId);
+        ReflectionTestUtils.setField(createNetworkCmd, "privateMtu", 
privateMtu);
+        ReflectionTestUtils.setField(createNetworkCmd, "vpcId", vpcId);
+
+        dc = Mockito.mock(DataCenterVO.class);
+        Mockito.when(dcDao.findById(zoneId)).thenReturn(dc);
+        Mockito.when(dc.getId()).thenReturn(zoneId);
+        vpc = Mockito.mock(VpcVO.class);
+        Mockito.when(vpc.getName()).thenReturn("Vpc 1");
+        Mockito.when(vpcDao.findById(vpcId)).thenReturn(vpc);
+        networkOfferingVO = Mockito.mock(NetworkOfferingVO.class);
+        
Mockito.when(networkOfferingDao.findById(networkOfferingId)).thenReturn(networkOfferingVO);
+        
Mockito.when(configMgr.isOfferingForVpc(networkOfferingVO)).thenReturn(true);
+
+        overrideDefaultConfigValue(VpcManager.VpcTierNamePrepend, 
"_defaultValue", "true");
+        overrideDefaultConfigValue(VpcManager.VpcTierNamePrependDelimiter, 
"_defaultValue", " -- ");
+
+        service.createGuestNetwork(createNetworkCmd);
+
+        overrideDefaultConfigValue(VpcManager.VpcTierNamePrepend, 
"_defaultValue", "false");
+
+        Mockito.verify(vpcMgr, 
times(1)).createVpcGuestNetwork(networkOfferingId, "Vpc 1 -- testNetwork", 
"Test Network", null, null,
+                null, null, accountMock, null, phyNet, zoneId, null, null, 
vpcId, null, accountMock, true,
+                null, null, null, null, null, null, null, new Pair<>(0, 
privateMtu), null);
+    }
+
     @Test
     public void testCheckAndUpdateNetworkResetSuccess() {
         NetworkVO networkVO = new NetworkVO();

Reply via email to