You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by bh...@apache.org on 2013/01/03 01:32:15 UTC

git commit: Fix PluggableService to provide interface for ACL adapters etc. to get configs

Updated Branches:
  refs/heads/api_refactoring d8d87adc2 -> d23585916


Fix PluggableService to provide interface for ACL adapters etc. to get configs

- Fix interface to return array of strings, or filenames
- Fix StaticRoleBased ACL adapter to process config files by going through all pluggable services
- Refactor interface names

Signed-off-by: Rohit Yadav <bh...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/d2358591
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/d2358591
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/d2358591

Branch: refs/heads/api_refactoring
Commit: d235859168569fcd344e2210891b7611dbb3da12
Parents: d8d87ad
Author: Rohit Yadav <bh...@apache.org>
Authored: Wed Jan 2 16:29:39 2013 -0800
Committer: Rohit Yadav <bh...@apache.org>
Committed: Wed Jan 2 16:29:39 2013 -0800

----------------------------------------------------------------------
 .../server/ManagementServerSimulatorImpl.java      |    4 +-
 .../cloud/network/element/NiciraNvpElement.java    |    4 +-
 .../cloud/acl/StaticRoleBasedAPIAccessChecker.java |  119 ++++++---------
 .../network/element/VirtualRouterElement.java      |    4 +-
 server/src/com/cloud/server/ManagementServer.java  |    5 +-
 .../com/cloud/server/ManagementServerExtImpl.java  |    2 +-
 .../src/com/cloud/server/ManagementServerImpl.java |    2 +-
 .../src/com/cloud/servlet/CloudStartupServlet.java |    2 +-
 .../cloud/utils/component/PluggableService.java    |   15 +--
 9 files changed, 63 insertions(+), 94 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d2358591/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java b/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java
index 35aa301..ad42c23 100644
--- a/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java
+++ b/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java
@@ -19,8 +19,8 @@ package com.cloud.server;
 
 public class ManagementServerSimulatorImpl extends ManagementServerExtImpl {
     @Override
-    public String[] getApiConfig() {
-        String[] apis = super.getApiConfig();
+    public String[] getPropertiesFiles() {
+        String[] apis = super.getPropertiesFiles();
         String[] newapis = new String[apis.length + 1];
         for (int i = 0; i < apis.length; i++) {
             newapis[i] = apis[i];

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d2358591/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java
index dc47a73..4974cbe 100644
--- a/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java
+++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java
@@ -540,8 +540,8 @@ public class NiciraNvpElement extends AdapterBase implements
 	}
 
 	@Override
-	public String getPropertiesFile() {
-		return "nicira-nvp_commands.properties";
+	public String[] getPropertiesFiles() {
+		return new String[] { "nicira-nvp_commands.properties" };
 	}
 
 	@Override

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d2358591/server/src/com/cloud/acl/StaticRoleBasedAPIAccessChecker.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/acl/StaticRoleBasedAPIAccessChecker.java b/server/src/com/cloud/acl/StaticRoleBasedAPIAccessChecker.java
index 29dbc13..816b0de 100644
--- a/server/src/com/cloud/acl/StaticRoleBasedAPIAccessChecker.java
+++ b/server/src/com/cloud/acl/StaticRoleBasedAPIAccessChecker.java
@@ -21,10 +21,7 @@ import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
+import java.util.*;
 
 import javax.ejb.Local;
 import javax.naming.ConfigurationException;
@@ -60,7 +57,6 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIA
     private static List<String> s_adminCommands = null;
     private static List<String> s_resourceDomainAdminCommands = null;
     private static List<String> s_allCommands = null;
-    private static List<String> s_pluggableServiceCommands = null;
     private Properties _apiCommands = null;
 
     protected @Inject AccountManager _accountMgr;
@@ -72,7 +68,6 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIA
         s_resellerCommands = new ArrayList<String>();
         s_adminCommands = new ArrayList<String>();
         s_resourceDomainAdminCommands = new ArrayList<String>();
-        s_pluggableServiceCommands = new ArrayList<String>();
     }
 
     @Override
@@ -119,88 +114,70 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIA
     public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
         super.configure(name, params);
 
-        //load command.properties to build the static map per role.
-        ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name);
-        String[] apiConfig = ((ManagementServer) ComponentLocator.getComponent(ManagementServer.Name)).getApiConfig();
-
-        processConfigFiles(apiConfig, false);
-
-        // get commands for all pluggable services
-        String[] pluggableServicesApiConfigs = getPluggableServicesApiConfigs();
-        processConfigFiles(pluggableServicesApiConfigs, true);
-
-        return true;
-    }
-
-
-    private String[] getPluggableServicesApiConfigs() {
-        List<String> pluggableServicesApiConfigs = new ArrayList<String>();
-
+        // Read command properties files to build the static map per role.
         ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name);
         List<PluggableService> services = locator.getAllPluggableServices();
+        services.add((PluggableService) ComponentLocator.getComponent(ManagementServer.Name));
+
+        List<String> configFiles = new ArrayList<String>();
         for (PluggableService service : services) {
-            pluggableServicesApiConfigs.add(service.getPropertiesFile());
+            configFiles.addAll(Arrays.asList(service.getPropertiesFiles()));
         }
-        return pluggableServicesApiConfigs.toArray(new String[0]);
+
+        processConfigFiles(configFiles);
+        return true;
     }
 
-    private void processConfigFiles(String[] apiConfig, boolean pluggableServicesConfig) {
+    private void processConfigFiles(List<String> configFiles) {
         try {
             if (_apiCommands == null)
                 _apiCommands = new Properties();
 
             Properties preProcessedCommands = new Properties();
-            if (apiConfig != null) {
-                for (String configFile : apiConfig) {
-                    File commandsFile = PropertiesUtil.findConfigFile(configFile);
-                    if (commandsFile != null) {
-                        try {
-                            preProcessedCommands.load(new FileInputStream(commandsFile));
-                        } catch (FileNotFoundException fnfex) {
-                            // in case of a file within a jar in classpath, try to open stream using url
-                            InputStream stream = PropertiesUtil.openStreamFromURL(configFile);
-                            if (stream != null) {
-                                preProcessedCommands.load(stream);
-                            } else {
-                                s_logger.error("Unable to find properites file", fnfex);
-                            }
+            for (String configFile : configFiles) {
+                File commandsFile = PropertiesUtil.findConfigFile(configFile);
+                if (commandsFile != null) {
+                    try {
+                        preProcessedCommands.load(new FileInputStream(commandsFile));
+                    } catch (FileNotFoundException fnfex) {
+                        // in case of a file within a jar in classpath, try to open stream using url
+                        InputStream stream = PropertiesUtil.openStreamFromURL(configFile);
+                        if (stream != null) {
+                            preProcessedCommands.load(stream);
+                        } else {
+                            s_logger.error("Unable to find properites file", fnfex);
                         }
                     }
                 }
-                for (Object key : preProcessedCommands.keySet()) {
-                    String preProcessedCommand = preProcessedCommands.getProperty((String) key);
-                    String[] commandParts = preProcessedCommand.split(";");
-                    _apiCommands.setProperty(key.toString(), commandParts[0]);
-
-                    if (pluggableServicesConfig) {
-                        s_pluggableServiceCommands.add(commandParts[0]);
-                    }
-
-                    if (commandParts.length > 1) {
-                        try {
-                            short cmdPermissions = Short.parseShort(commandParts[1]);
-                            if ((cmdPermissions & ADMIN_COMMAND) != 0) {
-                                s_adminCommands.add((String) key);
-                            }
-                            if ((cmdPermissions & RESOURCE_DOMAIN_ADMIN_COMMAND) != 0) {
-                                s_resourceDomainAdminCommands.add((String) key);
-                            }
-                            if ((cmdPermissions & DOMAIN_ADMIN_COMMAND) != 0) {
-                                s_resellerCommands.add((String) key);
-                            }
-                            if ((cmdPermissions & USER_COMMAND) != 0) {
-                                s_userCommands.add((String) key);
-                            }
-                            s_allCommands.addAll(s_adminCommands);
-                            s_allCommands.addAll(s_resourceDomainAdminCommands);
-                            s_allCommands.addAll(s_userCommands);
-                            s_allCommands.addAll(s_resellerCommands);
-                        } catch (NumberFormatException nfe) {
-                            s_logger.info("Malformed command.properties permissions value, key = " + key + ", value = " + preProcessedCommand);
+            }
+            for (Object key : preProcessedCommands.keySet()) {
+                String preProcessedCommand = preProcessedCommands.getProperty((String) key);
+                String[] commandParts = preProcessedCommand.split(";");
+                _apiCommands.setProperty(key.toString(), commandParts[0]);
+
+                if (commandParts.length > 1) {
+                    try {
+                        short cmdPermissions = Short.parseShort(commandParts[1]);
+                        if ((cmdPermissions & ADMIN_COMMAND) != 0) {
+                            s_adminCommands.add((String) key);
+                        }
+                        if ((cmdPermissions & RESOURCE_DOMAIN_ADMIN_COMMAND) != 0) {
+                            s_resourceDomainAdminCommands.add((String) key);
+                        }
+                        if ((cmdPermissions & DOMAIN_ADMIN_COMMAND) != 0) {
+                            s_resellerCommands.add((String) key);
                         }
+                        if ((cmdPermissions & USER_COMMAND) != 0) {
+                            s_userCommands.add((String) key);
+                        }
+                        s_allCommands.addAll(s_adminCommands);
+                        s_allCommands.addAll(s_resourceDomainAdminCommands);
+                        s_allCommands.addAll(s_userCommands);
+                        s_allCommands.addAll(s_resellerCommands);
+                    } catch (NumberFormatException nfe) {
+                        s_logger.info("Malformed command.properties permissions value, key = " + key + ", value = " + preProcessedCommand);
                     }
                 }
-
             }
         } catch (FileNotFoundException fnfex) {
             s_logger.error("Unable to find properties file", fnfex);

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d2358591/server/src/com/cloud/network/element/VirtualRouterElement.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java
index 5167616..b5b8b1a 100755
--- a/server/src/com/cloud/network/element/VirtualRouterElement.java
+++ b/server/src/com/cloud/network/element/VirtualRouterElement.java
@@ -680,8 +680,8 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
     }
 
     @Override
-    public String getPropertiesFile() {
-        return "virtualrouter_commands.properties";
+    public String[] getPropertiesFiles() {
+        return new String[] { "virtualrouter_commands.properties" };
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d2358591/server/src/com/cloud/server/ManagementServer.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/server/ManagementServer.java b/server/src/com/cloud/server/ManagementServer.java
index 91f82f8..29c76e0 100755
--- a/server/src/com/cloud/server/ManagementServer.java
+++ b/server/src/com/cloud/server/ManagementServer.java
@@ -25,11 +25,12 @@ import com.cloud.info.ConsoleProxyInfo;
 import com.cloud.storage.GuestOSVO;
 import com.cloud.storage.StoragePoolVO;
 import com.cloud.utils.Pair;
+import com.cloud.utils.component.PluggableService;
 import com.cloud.vm.VirtualMachine;
 
 /**
  */
-public interface ManagementServer extends ManagementService {
+public interface ManagementServer extends ManagementService, PluggableService  {
     
     /**
      * returns the instance id of this management server.
@@ -43,8 +44,6 @@ public interface ManagementServer extends ManagementService {
     */
     @Override
     String getVersion();
-    
-    String[] getApiConfig();
 
     /**
      * Retrieves a host by id

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d2358591/server/src/com/cloud/server/ManagementServerExtImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/server/ManagementServerExtImpl.java b/server/src/com/cloud/server/ManagementServerExtImpl.java
index 992d006..fbd517d 100644
--- a/server/src/com/cloud/server/ManagementServerExtImpl.java
+++ b/server/src/com/cloud/server/ManagementServerExtImpl.java
@@ -206,7 +206,7 @@ public class ManagementServerExtImpl extends ManagementServerImpl implements Man
     }
 
     @Override
-    public String[] getApiConfig() {
+    public String[] getPropertiesFiles() {
         return new String[] { "commands.properties", "commands-ext.properties" };
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d2358591/server/src/com/cloud/server/ManagementServerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java
index c3e5f8f..ee5f78e 100755
--- a/server/src/com/cloud/server/ManagementServerImpl.java
+++ b/server/src/com/cloud/server/ManagementServerImpl.java
@@ -2309,7 +2309,7 @@ public class ManagementServerImpl implements ManagementServer {
     }
 
     @Override
-    public String[] getApiConfig() {
+    public String[] getPropertiesFiles() {
         return new String[] { "commands.properties" };
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d2358591/server/src/com/cloud/servlet/CloudStartupServlet.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/servlet/CloudStartupServlet.java b/server/src/com/cloud/servlet/CloudStartupServlet.java
index 9efb4ea..389bd26 100755
--- a/server/src/com/cloud/servlet/CloudStartupServlet.java
+++ b/server/src/com/cloud/servlet/CloudStartupServlet.java
@@ -48,7 +48,7 @@ public class CloudStartupServlet extends HttpServlet implements ServletContextLi
 	    	s_locator = ComponentLocator.getLocator(ManagementServer.Name);
 		    ManagementServer ms = (ManagementServer)ComponentLocator.getComponent(ManagementServer.Name);
 		    ms.enableAdminUser("password");
-		    ApiServer.initApiServer(ms.getApiConfig());
+		    ApiServer.initApiServer(ms.getPropertiesFiles());
 	    } catch (InvalidParameterValueException ipve) {
 	    	s_logger.error("Exception starting management server ", ipve);
 	    	throw new ServletException (ipve.getMessage());

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d2358591/utils/src/com/cloud/utils/component/PluggableService.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/component/PluggableService.java b/utils/src/com/cloud/utils/component/PluggableService.java
index 9c94628..d219939 100644
--- a/utils/src/com/cloud/utils/component/PluggableService.java
+++ b/utils/src/com/cloud/utils/component/PluggableService.java
@@ -16,16 +16,9 @@
 // under the License.
 package com.cloud.utils.component;
 
-
-
-/**
- * This interface defines methods for pluggable code within the Cloud Stack. 
- */
+// This interface defines methods for pluggable code within the Cloud Stack.
 public interface PluggableService {
-
-    /**
-     * The config file name that lists API commands supported by this pluggable service
-     */
-    String getPropertiesFile();
-
+    // The config command properties filenames that lists allowed API commands
+    // and role masks supported by this pluggable service
+    String[] getPropertiesFiles();
 }