DeleteSliceFromNodes needs the same cooking as AddSliceToNodes
authorThierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Thu, 16 Nov 2006 10:19:26 +0000 (10:19 +0000)
committerThierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Thu, 16 Nov 2006 10:19:26 +0000 (10:19 +0000)
this is not the right way to do it but it works for now

PLC/Methods/DeleteSliceFromNodes.py
PLC/Slices.py

index 71809b7..1f9c01a 100644 (file)
@@ -2,6 +2,7 @@ from PLC.Faults import *
 from PLC.Method import Method
 from PLC.Parameter import Parameter, Mixed
 from PLC.Nodes import Node, Nodes
+from PLC.ForeignNodes import ForeignNode, ForeignNodes
 from PLC.Slices import Slice, Slices
 from PLC.Auth import Auth
 
@@ -36,9 +37,6 @@ class DeleteSliceFromNodes(Method):
 
         slice = slices[0]
 
-       # Get specified nodes
-        nodes = Nodes(self.api, node_id_or_hostname_list)
-
         if 'admin' not in self.caller['roles']:
             if self.caller['person_id'] in slice['person_ids']:
                 pass
@@ -48,9 +46,16 @@ class DeleteSliceFromNodes(Method):
                 raise PLCPermissionDenied, "Specified slice not associated with any of your sites"
        
        # Remove slice from all nodes found
+
+       # Get specified nodes
+        nodes = Nodes(self.api, node_id_or_hostname_list)
        for node in nodes:
             if slice['slice_id'] in node['slice_ids']:
                 slice.remove_node(node)
+        foreign_nodes = ForeignNodes(self.api, node_id_or_hostname_list)
+       for node in foreign_nodes:
+            if slice['slice_id'] in node['slice_ids']:
+                slice.remove_node(node,is_foreign_node=True)
        
        self.object_ids = [node['node_id'] for node in nodes]
 
index 46c6d73..82bcad5 100644 (file)
@@ -153,13 +153,16 @@ class Slice(Row):
             self['node_ids'].append(node_id)
             node['slice_ids'].append(slice_id)
 
-    def remove_node(self, node, commit = True):
+    def remove_node(self, node, is_foreign_node = False, commit = True):
         """
         Remove node from existing slice.
         """
 
         assert 'slice_id' in self
-        assert isinstance(node, Node)
+        if not is_foreign_node:
+            assert isinstance(node, Node)
+        else:
+            assert isinstance(node, ForeignNode)
         assert 'node_id' in node
 
         slice_id = self['slice_id']