Provide Container authorization roles to application running in container 40/1940/1
authorAlessandro Boch <aboch@cisco.com>
Wed, 16 Oct 2013 18:47:27 +0000 (11:47 -0700)
committerAlessandro Boch <aboch@cisco.com>
Wed, 16 Oct 2013 18:50:04 +0000 (11:50 -0700)
- An application that runs in a container needs to grant access to its
  resources to the container administrative roles

Change-Id: I439bbb9d5f8aa6dfb17fcaf518654ef3d42979f7
Signed-off-by: Alessandro Boch <aboch@cisco.com>
opendaylight/containermanager/api/src/main/java/org/opendaylight/controller/containermanager/ContainerConfig.java
opendaylight/containermanager/api/src/main/java/org/opendaylight/controller/containermanager/ContainerData.java
opendaylight/containermanager/implementation/src/main/java/org/opendaylight/controller/containermanager/internal/ContainerImpl.java
opendaylight/containermanager/implementation/src/main/java/org/opendaylight/controller/containermanager/internal/ContainerManager.java
opendaylight/containermanager/it.implementation/src/main/java/org/opendaylight/controller/containermanager/internal/ContainerImpl.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/IContainer.java

index caf8a13e63d20e9bfbe637483d6aaca82ff1d732..b82d2dae3cbf769a5e64239f178d6aaa3e7703f0 100644 (file)
@@ -40,6 +40,10 @@ import org.opendaylight.controller.sal.utils.StatusCode;
 public class ContainerConfig implements Serializable {
     private static final long serialVersionUID = 2L;
     private static final String regexName = "^\\w+$";
+    private static final String containerProfile = System.getProperty("container.profile") == null ? "Container"
+            : System.getProperty("container.profile");
+    private static final String ADMIN_SUFFIX = "Admin";
+    private static final String OPERATOR_SUFFIX = "Operator";
 
     @XmlElement
     private String container;
@@ -611,4 +615,30 @@ public class ContainerConfig implements Serializable {
         }
         return list;
     }
+
+    private String getContainerRole(boolean admin) {
+        return String.format("%s-%s-%s", containerProfile, container, (admin ? ADMIN_SUFFIX : OPERATOR_SUFFIX));
+    }
+
+    /**
+     * Return the well known administrator role for this container
+     *
+     * @return The administrator role for this container
+     */
+    public String getContainerAdminRole() {
+        return getContainerRole(true);
+    }
+
+    /**
+     * Return the well known operator role for this container
+     *
+     * @return The operator role for this container
+     */
+    public String getContainerOperatorRole() {
+        return getContainerRole(false);
+    }
+
+    public String getContainerGroupName() {
+        return String.format("%s-%s", containerProfile, container);
+    }
 }
index 5a7cdd2058b09aabb4fa5cfdd0f4f868979dc12b..0c8c53162ef52fbd758f30d1ce6803ca2020b444 100644 (file)
@@ -30,25 +30,13 @@ import org.opendaylight.controller.sal.core.NodeConnector;
  */
 public class ContainerData implements Serializable {
     private static final long serialVersionUID = 1L;
-
+    private String containerAdminRole;
+    private String containerOperatorRole;
     private String name;
     private ConcurrentMap<Node, Set<NodeConnector>> swPorts;
     private short staticVlan;
     private List<ContainerFlow> cFlowList;
 
-    /**
-     * Default constructor
-
-     *
-     * @return constructed ContainerData
-     */
-    public ContainerData() {
-        name = null;
-        swPorts = new ConcurrentHashMap<Node, Set<NodeConnector>>();
-        staticVlan = 0;
-        cFlowList = new ArrayList<ContainerFlow>();
-    }
-
     /**
      * Build a ContainerData from container configuration
      *
@@ -64,6 +52,8 @@ public class ContainerData implements Serializable {
         swPorts = new ConcurrentHashMap<Node, Set<NodeConnector>>();
         cFlowList = new ArrayList<ContainerFlow>();
         staticVlan = conf.getStaticVlanValue();
+        containerAdminRole = conf.getContainerAdminRole();
+        containerOperatorRole = conf.getContainerOperatorRole();
     }
 
     /**
@@ -238,4 +228,12 @@ public class ContainerData implements Serializable {
         }
         return set;
     }
+
+    public String getContainerAdminRole() {
+        return containerAdminRole;
+    }
+
+    public String getContainerOperatorRole() {
+        return containerOperatorRole;
+    }
 }
index 1dfab887af4779039e677f8a40d9a9d30de9f5ac..cb2a289af33ca6be2b099efdf7b066484cccec9c 100644 (file)
  */
 package org.opendaylight.controller.containermanager.internal;
 
-import java.util.concurrent.ConcurrentMap;
 import java.util.ArrayList;
-import java.util.HashSet;
 import java.util.Dictionary;
+import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentMap;
 
 import org.apache.felix.dm.Component;
+import org.opendaylight.controller.containermanager.ContainerData;
 import org.opendaylight.controller.sal.core.ContainerFlow;
 import org.opendaylight.controller.sal.core.IContainer;
 import org.opendaylight.controller.sal.core.Node;
 import org.opendaylight.controller.sal.core.NodeConnector;
 
-import org.opendaylight.controller.containermanager.ContainerData;
-
-import java.util.Set;
-import java.util.List;
-
 public class ContainerImpl implements IContainer {
     private String containerName = null;
     private IContainerInternal iContainerInternal = null;
@@ -114,4 +112,14 @@ public class ContainerImpl implements IContainer {
         }
         return set;
     }
+
+    @Override
+    public String getContainerAdminRole() {
+        return iContainerInternal.getContainerData(containerName).getContainerAdminRole();
+    }
+
+    @Override
+    public String getContainerOperatorRole() {
+        return iContainerInternal.getContainerData(containerName).getContainerOperatorRole();
+    }
 }
index c2610732350fdb027bf7fc8458343081c3db05fa..19341459b138274d084c9f30347617c95406a834 100644 (file)
@@ -826,15 +826,12 @@ public class ContainerManager extends Authorization<String> implements IContaine
      * @param containerName
      * @param delete
      */
-    private void updateResourceGroups(String containerName, boolean delete) {
-        String containerProfile = System.getProperty("container.profile");
-        if (containerProfile == null) {
-            containerProfile = "Container";
-        }
+    private void updateResourceGroups(ContainerConfig containerConf, boolean delete) {
         // Container Roles and Container Resource Group
-        String groupName = containerProfile+"-" + containerName;
-        String containerAdminRole = containerProfile+"-" + containerName + "-Admin";
-        String containerOperatorRole = containerProfile+"-" + containerName + "-Operator";
+        String containerName = containerConf.getContainer();
+        String groupName = containerConf.getContainerGroupName();
+        String containerAdminRole = containerConf.getContainerAdminRole();
+        String containerOperatorRole = containerConf.getContainerOperatorRole();
         Set<String> allContainerSet = resourceGroups.get(allResourcesGroupName);
         if (delete) {
             resourceGroups.remove(groupName);
@@ -1218,7 +1215,7 @@ public class ContainerManager extends Authorization<String> implements IContaine
         }
 
         // Automatically create and populate user and resource groups
-        updateResourceGroups(containerName, delete);
+        updateResourceGroups(containerConf, delete);
 
         // Notify global and local listeners
         UpdateType update = (delete) ? UpdateType.REMOVED : UpdateType.ADDED;
index 15f939d39bb853e7f411d3d71814fd21c0d8166b..27874dc33614f2d0203182ee63444392d83d0418 100644 (file)
@@ -28,6 +28,8 @@ import org.opendaylight.controller.sal.core.IContainer;
 
 public class ContainerImpl implements IContainer {
     private String containerName = null;
+    private String containerAdminRole;
+    private String containerOperatorRole;
 
     /**
      * Function called by the dependency manager when all the required
@@ -65,4 +67,14 @@ public class ContainerImpl implements IContainer {
     public Set<Node> getNodes() {
         return null;
     }
+
+    @Override
+    public String getContainerAdminRole() {
+        return containerAdminRole;
+    }
+
+    @Override
+    public String getContainerOperatorRole() {
+        return containerOperatorRole;
+    }
 }
index 5aeb5c8b2d29a004232f478b97e3266877a1a5d6..6370537762e9d071dbfd6ef44ae853cbb8d40cec 100644 (file)
@@ -64,4 +64,18 @@ public interface IContainer {
      * @return The array of Nodes that are part of the container
      */
     public Set<Node> getNodes();
+
+    /**
+     * Return the well known administrator role for this container
+     *
+     * @return The administrator role for this container
+     */
+    public String getContainerAdminRole();
+
+    /**
+     * Return the well known operator role for this container
+     *
+     * @return The operator role for this container
+     */
+    public String getContainerOperatorRole();
 }