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

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


The following commit(s) were added to refs/heads/4.16 by this push:
     new 9293f5b  server: fix enable/disable static nat if userdata is not 
supported (#5839)
9293f5b is described below

commit 9293f5bd2764f26418333ef846b126c1f90cfd1b
Author: Wei Zhou <[email protected]>
AuthorDate: Tue Jan 11 07:52:59 2022 +0100

    server: fix enable/disable static nat if userdata is not supported (#5839)
    
    * server: fix enable/disable static nat if userdata is not supported
    
    * Update #5839: rename applyUserData to applyUserDataIfNeeded
    
    * Update server/src/main/java/com/cloud/network/rules/RulesManagerImpl.java
    
    Co-authored-by: Daniel Augusto Veronezi Salvador 
<[email protected]>
---
 .../java/com/cloud/network/rules/RulesManagerImpl.java  | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/server/src/main/java/com/cloud/network/rules/RulesManagerImpl.java 
b/server/src/main/java/com/cloud/network/rules/RulesManagerImpl.java
index b743863..b18fe10 100644
--- a/server/src/main/java/com/cloud/network/rules/RulesManagerImpl.java
+++ b/server/src/main/java/com/cloud/network/rules/RulesManagerImpl.java
@@ -24,6 +24,7 @@ import java.util.Set;
 
 import javax.inject.Inject;
 
+import com.cloud.exception.UnsupportedServiceException;
 import com.cloud.network.element.UserDataServiceProvider;
 import com.cloud.storage.VMTemplateVO;
 import com.cloud.storage.dao.VMTemplateDao;
@@ -605,7 +606,7 @@ public class RulesManagerImpl extends ManagerBase 
implements RulesManager, Rules
                 // enable static nat on the backend
                 s_logger.trace("Enabling static nat for ip address " + 
ipAddress + " and vm id=" + vmId + " on the backend");
                 if (applyStaticNatForIp(ipId, false, caller, false)) {
-                    applyUserData(vmId, network, guestNic);
+                    applyUserDataIfNeeded(vmId, network, guestNic);
                     performedIpAssoc = false; // ignor 
unassignIPFromVpcNetwork in finally block
                     return true;
                 } else {
@@ -629,8 +630,14 @@ public class RulesManagerImpl extends ManagerBase 
implements RulesManager, Rules
         return false;
     }
 
-    protected void applyUserData(long vmId, Network network, Nic guestNic) 
throws ResourceUnavailableException {
-        UserDataServiceProvider element = 
_networkModel.getUserDataUpdateProvider(network);
+    protected void applyUserDataIfNeeded(long vmId, Network network, Nic 
guestNic) throws ResourceUnavailableException {
+        UserDataServiceProvider element = null;
+        try {
+            element = _networkModel.getUserDataUpdateProvider(network);
+        } catch (UnsupportedServiceException ex) {
+            s_logger.info(String.format("%s is not supported by network %s, 
skipping.", Service.UserData.getName(), network));
+            return;
+        }
         if (element == null) {
             s_logger.error("Can't find network element for " + 
Service.UserData.getName() + " provider needed for UserData update");
         } else {
@@ -1144,7 +1151,7 @@ public class RulesManagerImpl extends ManagerBase 
implements RulesManager, Rules
             Nic guestNic = _networkModel.getNicInNetwork(vmId, 
guestNetwork.getId());
             if (applyStaticNatForIp(ipId, false, caller, true)) {
                 if (ipAddress.getState() == IpAddress.State.Releasing) {
-                    applyUserData(vmId, guestNetwork, guestNic);
+                    applyUserDataIfNeeded(vmId, guestNetwork, guestNic);
                 }
             } else {
                 success = false;
@@ -1289,7 +1296,7 @@ public class RulesManagerImpl extends ManagerBase 
implements RulesManager, Rules
 
         if (disableStaticNat(ipId, caller, ctx.getCallingUserId(), false)) {
             Nic guestNic = _networkModel.getNicInNetworkIncludingRemoved(vmId, 
guestNetwork.getId());
-            applyUserData(vmId, guestNetwork, guestNic);
+            applyUserDataIfNeeded(vmId, guestNetwork, guestNic);
             return true;
         }
         return false;

Reply via email to