Merge branch 'master' of ssh://git.onelab.eu/git/sfa
authorSandrine Avakian <sandrine.avakian@inria.fr>
Tue, 8 Oct 2013 11:49:11 +0000 (13:49 +0200)
committerSandrine Avakian <sandrine.avakian@inria.fr>
Tue, 8 Oct 2013 11:49:11 +0000 (13:49 +0200)
18 files changed:
sfa/importer/plimporter.py
sfa/managers/slice_manager.py
sfa/planetlab/plaggregate.py
sfa/planetlab/pldriver.py
sfa/planetlab/plshell.py
sfa/planetlab/plslices.py
sfa/planetlab/plxrn.py
sfa/rspecs/elements/versions/iotlabv1Node.py
sfa/rspecs/elements/versions/nitosv1Node.py
sfa/rspecs/elements/versions/pgv2Lease.py
sfa/rspecs/elements/versions/pgv2Node.py
sfa/rspecs/elements/versions/sfav1Lease.py
sfa/rspecs/elements/versions/sfav1Node.py
sfa/rspecs/elements/versions/sfav1Sliver.py
sfa/rspecs/versions/iotlabv1.py
sfa/rspecs/versions/nitosv1.py
sfa/rspecs/versions/pgv2.py
sfa/rspecs/versions/sfav1.py

index 7994c8c..26d1ccd 100644 (file)
@@ -145,7 +145,7 @@ class PlImporter:
         # Get all plc sites
         # retrieve only required stuf
         sites = shell.GetSites({'peer_id': None, 'enabled' : True},
-                               ['site_id','login_base','node_ids','slice_ids','person_ids',])
+                               ['site_id','login_base','node_ids','slice_ids','person_ids', 'name'])
         # create a hash of sites by login_base
 #        sites_by_login_base = dict ( [ ( site['login_base'], site ) for site in sites ] )
         # Get all plc users
@@ -192,6 +192,9 @@ class PlImporter:
 
         # start importing 
         for site in sites:
+            if site['name'].startswith('sfa.'):
+                continue
+
             site_hrn = _get_site_hrn(interface_hrn, site)
             # import if hrn is not in list of existing hrns or if the hrn exists
             # but its not a site record
index 496aab2..daf3dc7 100644 (file)
@@ -116,7 +116,7 @@ class SliceManager:
                     forward_options['rspec_version'] = version_manager.get_version('SFA 1').to_dict()
                 else:
                     forward_options['rspec_version'] = version_manager.get_version('ProtoGENI 2').to_dict()
-                    forward_options['geni_rspec_version'] = {'type': 'geni', 'version': '3.0'}
+                    forward_options['geni_rspec_version'] = {'type': 'geni', 'version': '3'}
                 rspec = server.ListResources(credential, forward_options)
                 return {"aggregate": aggregate, "rspec": rspec, "elapsed": time.time()-tStart, "status": "success"}
             except Exception, e:
index 09826f0..e147041 100644 (file)
@@ -1,5 +1,5 @@
 #!/usr/bin/python
-from sfa.util.xrn import Xrn, hrn_to_urn, urn_to_hrn
+from sfa.util.xrn import Xrn, hrn_to_urn, urn_to_hrn, get_authority, get_leaf
 from sfa.util.sfatime import utcparse, datetime_to_string
 from sfa.util.sfalogging import logger
 
@@ -17,7 +17,7 @@ from sfa.rspecs.elements.lease import Lease
 from sfa.rspecs.elements.granularity import Granularity
 from sfa.rspecs.version_manager import VersionManager
 
-from sfa.planetlab.plxrn import PlXrn, hostname_to_urn, hrn_to_pl_slicename, slicename_to_hrn
+from sfa.planetlab.plxrn import PlXrn, hostname_to_urn, hrn_to_pl_slicename, slicename_to_hrn, xrn_to_ext_slicename, top_auth
 from sfa.planetlab.vlink import get_tc_rate
 from sfa.planetlab.topology import Topology
 
@@ -108,9 +108,15 @@ class PlAggregate:
         slice = None
         if not slice_xrn:
             return (slice, slivers)
+
         slice_urn = hrn_to_urn(slice_xrn, 'slice')
         slice_hrn, _ = urn_to_hrn(slice_xrn)
-        slice_name = hrn_to_pl_slicename(slice_hrn)
+        top_auth_hrn = top_auth(slice_hrn)
+        if top_auth_hrn == self.driver.hrn:
+            slice_name = hrn_to_pl_slicename(slice_hrn)
+        else:
+            slice_name = xrn_to_ext_slicename(slice_hrn)
+
         slices = self.driver.shell.GetSlices(slice_name)
         if not slices:
             return (slice, slivers)
@@ -289,12 +295,16 @@ class PlAggregate:
             site=sites_dict[site_id]
 
             #rspec_lease['lease_id'] = lease['lease_id']
-            rspec_lease['component_id'] = hostname_to_urn(self.driver.hrn, site['login_base'], lease['hostname'])
+            rspec_lease['component_id'] = hrn_to_urn(self.driver.shell.GetNodeHrn(lease['hostname']), 'node')
+            #rspec_lease['component_id'] = hostname_to_urn(self.driver.hrn, site['login_base'], lease['hostname'])
             if slice_xrn:
                 slice_urn = slice_xrn
-                slice_hrn = urn_to_hrn(slice_urn)
+                slice_hrn, _ = urn_to_hrn(slice_urn)
+                # Check slice HRN
+                if slice_hrn != self.driver.shell.GetSliceHrn(lease['slice_id']):
+                    self.driver.shell.SetSliceHrn(lease['slice_id'], slice_hrn)
             else:
-                slice_hrn = slicename_to_hrn(self.driver.hrn, lease['name'])
+                slice_hrn = self.driver.shell.GetSliceHrn(lease['slice_id'])
                 slice_urn = hrn_to_urn(slice_hrn, 'slice')
             rspec_lease['slice_id'] = slice_urn
             rspec_lease['start_time'] = lease['t_from']
index 6c88a14..5215c57 100644 (file)
@@ -27,7 +27,7 @@ from sfa.planetlab.plshell import PlShell
 import sfa.planetlab.peers as peers
 from sfa.planetlab.plaggregate import PlAggregate
 from sfa.planetlab.plslices import PlSlices
-from sfa.planetlab.plxrn import PlXrn, slicename_to_hrn, hostname_to_hrn, hrn_to_pl_slicename, xrn_to_hostname
+from sfa.planetlab.plxrn import PlXrn, slicename_to_hrn, hostname_to_hrn, hrn_to_pl_slicename, xrn_to_hostname, xrn_to_ext_slicename, top_auth
 
 
 def list_to_dict(recs, key):
@@ -773,7 +773,13 @@ class PlDriver (Driver):
                                    version=rspec.version)
 
     def delete_sliver (self, slice_urn, slice_hrn, creds, options):
-        slicename = hrn_to_pl_slicename(slice_hrn)
+
+        top_auth_hrn = top_auth(slice_hrn)
+        if top_auth_hrn == self.hrn:
+            slicename = hrn_to_pl_slicename(slice_hrn)
+        else:
+            slicename = xrn_to_ext_slicename(slice_hrn)
+
         slices = self.shell.GetSlices({'name': slicename})
         if not slices:
             return True
@@ -799,7 +805,12 @@ class PlDriver (Driver):
         return True
     
     def renew_sliver (self, slice_urn, slice_hrn, creds, expiration_time, options):
-        slicename = hrn_to_pl_slicename(slice_hrn)
+        top_auth_hrn = top_auth(slice_hrn)
+        if top_auth_hrn == self.hrn:
+            slicename = hrn_to_pl_slicename(slice_hrn)
+        else:
+            slicename = xrn_to_ext_slicename(slice_hrn)
+
         slices = self.shell.GetSlices({'name': slicename}, ['slice_id'])
         if not slices:
             raise RecordNotFound(slice_hrn)
@@ -814,7 +825,12 @@ class PlDriver (Driver):
 
     # remove the 'enabled' tag 
     def start_slice (self, slice_urn, slice_hrn, creds):
-        slicename = hrn_to_pl_slicename(slice_hrn)
+        top_auth_hrn = top_auth(slice_hrn)
+        if top_auth_hrn == self.hrn:
+            slicename = hrn_to_pl_slicename(slice_hrn)
+        else:
+            slicename = xrn_to_ext_slicename(slice_hrn)
+
         slices = self.shell.GetSlices({'name': slicename}, ['slice_id'])
         if not slices:
             raise RecordNotFound(slice_hrn)
@@ -827,7 +843,12 @@ class PlDriver (Driver):
 
     # set the 'enabled' tag to 0
     def stop_slice (self, slice_urn, slice_hrn, creds):
-        slicename = hrn_to_pl_slicename(slice_hrn)
+        top_auth_hrn = top_auth(slice_hrn)
+        if top_auth_hrn == self.hrn:
+            slicename = hrn_to_pl_slicename(slice_hrn)
+        else:
+            slicename = xrn_to_ext_slicename(slice_hrn)
+
         slices = self.shell.GetSlices({'name': slicename}, ['slice_id'])
         if not slices:
             raise RecordNotFound(slice_hrn)
index f42af88..15334db 100644 (file)
@@ -25,7 +25,10 @@ class PlShell:
                     'GetSites','GetNodes',
                     # Lease management methods
                     'GetLeases', 'GetLeaseGranularity', 'DeleteLeases','UpdateLeases',
-                    'AddLeases' 
+                    'AddLeases',
+                    # HRN management methods
+                    'SetPersonHrn', 'GetPersonHrn', 'SetSliceHrn', 'GetSliceHrn',
+                    'SetNodeHrn', 'GetNodeHrn' 
                     ]
     # support for other names - this is experimental
     alias_calls = { 'get_authorities':'GetSites',
index b16d5cf..3b5f0fc 100644 (file)
@@ -8,7 +8,7 @@ from sfa.util.xrn import Xrn, get_leaf, get_authority, urn_to_hrn
 from sfa.rspecs.rspec import RSpec
 
 from sfa.planetlab.vlink import VLink
-from sfa.planetlab.plxrn import PlXrn, hrn_to_pl_slicename, xrn_to_hostname
+from sfa.planetlab.plxrn import PlXrn, hrn_to_pl_slicename, xrn_to_hostname, xrn_to_ext_slicename, hrn_to_ext_loginbase, top_auth
 
 import time
 
@@ -169,7 +169,12 @@ class PlSlices:
         requested_leases = []
         for lease in rspec_requested_leases:
              requested_lease = {}
-             slice_name = hrn_to_pl_slicename(lease['slice_id'])
+             slice_hrn, _ = urn_to_hrn(lease['slice_id'])
+             top_auth_hrn = top_auth(slice_hrn)
+             if top_auth_hrn == self.driver.hrn:
+                 slice_name = hrn_to_pl_slicename(lease['slice_id'])
+             else:
+                 slice_name = xrn_to_ext_slicename(lease['slice_id'])
              if slice_name != slice['name']:
                  continue
              elif Xrn(lease['component_id']).get_authority_urn().split(':')[0] != self.driver.hrn:
@@ -360,15 +365,20 @@ class PlSlices:
 
     def verify_site(self, slice_xrn, slice_record={}, peer=None, sfa_peer=None, options={}):
         (slice_hrn, type) = urn_to_hrn(slice_xrn)
-        site_hrn = get_authority(slice_hrn)
-        # login base can't be longer than 20 characters
-        slicename = hrn_to_pl_slicename(slice_hrn)
-        authority_name = slicename.split('_')[0]
-        login_base = authority_name[:20]
+        top_auth_hrn = top_auth(slice_hrn)
+        if top_auth_hrn == self.driver.hrn:
+            # login base can't be longer than 20 characters
+            slicename = hrn_to_pl_slicename(slice_hrn)
+            authority_name = slicename.split('_')[0]
+            login_base = authority_name[:20]
+        else:
+            login_base = hrn_to_ext_loginbase(slice_hrn)
+            authority_name = login_base
+
         sites = self.driver.shell.GetSites(login_base)
         if not sites:
             # create new site record
-            site = {'name': 'geni.%s' % authority_name,
+            site = {'name': 'sfa.%s' % authority_name,
                     'abbreviated_name': authority_name,
                     'login_base': login_base,
                     'max_slices': 100,
@@ -396,16 +406,25 @@ class PlSlices:
         return site        
 
     def verify_slice(self, slice_hrn, slice_record, peer, sfa_peer, options={}):
-        slicename = hrn_to_pl_slicename(slice_hrn)
-        parts = slicename.split("_")
-        login_base = parts[0]
-        slices = self.driver.shell.GetSlices([slicename]) 
+        top_auth_hrn = top_auth(slice_hrn)
+        if top_auth_hrn == self.driver.hrn:
+            slice_name = hrn_to_pl_slicename(slice_hrn)
+            parts = slice_name.split("_")
+            login_base = parts[0]
+        else:
+            login_base = hrn_to_ext_loginbase(slice_hrn)
+            slice_name = xrn_to_ext_slicename(slice_hrn)
+            
+        slices = self.driver.shell.GetSlices([slice_name]) 
         if not slices:
-            slice = {'name': slicename,
+            slice = {'name': slice_name,
                      'url': slice_record.get('url', slice_hrn), 
                      'description': slice_record.get('description', slice_hrn)}
             # add the slice                          
             slice['slice_id'] = self.driver.shell.AddSlice(slice)
+            # set the slice HRN
+            self.driver.shell.SetSliceHrn(int(slice['slice_id']), slice_hrn)            
+
             slice['node_ids'] = []
             slice['person_ids'] = []
             if peer:
@@ -417,6 +436,10 @@ class PlSlices:
 #                self.registry.register_peer_object(self.credential, peer_dict)
         else:
             slice = slices[0]
+            # Check slice HRN
+            if self.driver.shell.GetSliceHrn(slice['slice_id']) != slice_hrn:
+                self.driver.shell.SetSliceHrn(slice['slice_id'], slice_hrn)
+
             if peer:
                 slice['peer_slice_id'] = slice_record.get('slice_id', None)
                 # unbind from peer so we can modify if necessary. Will bind back later
@@ -438,10 +461,16 @@ class PlSlices:
             user['urn'] = user['urn'].lower()
             hrn, type = urn_to_hrn(user['urn'])
             username = get_leaf(hrn)
-            login_base = PlXrn(xrn=user['urn']).pl_login_base()
             user['username'] = username
-            user['site'] = login_base
+             
+            top_auth_hrn = top_auth(hrn)            
+
+            if top_auth_hrn == self.driver.hrn:
+                login_base = PlXrn(xrn=user['urn']).pl_login_base()
+            else:
+                login_base = hrn_to_ext_loginbase(hrn)
 
+            user['site'] = login_base
             if 'email' in user:
                 user['email'] = user['email'].lower() 
                 users_by_email[user['email']] = user
@@ -537,11 +566,16 @@ class PlSlices:
                 'first_name': added_user.get('first_name', hrn),
                 'last_name': added_user.get('last_name', hrn),
                 'email': added_user_id,
-                'peer_person_id': None,
-                'keys': [],
+                #'peer_person_id': None,
+                #'keys': [],
                 #'key_ids': added_user.get('key_ids', []),
             }
             person['person_id'] = self.driver.shell.AddPerson(person)
+            self.driver.shell.AddRoleToPerson('user', int(person['person_id']))
+            # check user HRN
+            if self.driver.shell.GetPersonHrn(int(person['person_id'])) != hrn:
+                self.driver.shell.SetPersonHrn(int(person['person_id']), hrn)
+
             if peer:
                 person['peer_person_id'] = added_user['person_id']
             added_persons.append(person)
@@ -555,6 +589,8 @@ class PlSlices:
             for key_string in added_user.get('keys', []):
                 key = {'key':key_string, 'key_type':'ssh'}
                 key['key_id'] = self.driver.shell.AddPersonKey(person['person_id'], key)
+                if 'keys' not in person:
+                    person['keys'] = []
                 person['keys'].append(key)
 
             # add the registry record
index 22e9418..a8461b5 100644 (file)
@@ -1,6 +1,6 @@
 # specialized Xrn class for PlanetLab
 import re
-from sfa.util.xrn import Xrn
+from sfa.util.xrn import Xrn, get_authority
 
 # temporary helper functions to use this module instead of namespace
 def hostname_to_hrn (auth, login_base, hostname):
@@ -21,6 +21,22 @@ def hrn_to_pl_authname (hrn):
 def xrn_to_hostname(hrn):
     return Xrn.unescape(PlXrn(xrn=hrn, type='node').get_leaf())
 
+# helpers to handle external objects created via fedaration 
+def xrn_to_ext_slicename (xrn):
+    slice_hrn=PlXrn(xrn=xrn,type='slice').get_hrn()
+    site_hrn = get_authority(slice_hrn)
+    login_base = '8'.join(site_hrn.split('.'))
+    slice_name = '_'.join([login_base, slice_hrn.split('.')[-1]])
+    return slice_name
+
+def hrn_to_ext_loginbase (hrn):
+    site_hrn =  get_authority(hrn)
+    login_base = '8'.join(site_hrn.split('.'))[:20]
+    return login_base
+
+def top_auth (hrn):
+    return hrn.split('.')[0]
+
 class PlXrn (Xrn):
 
     @staticmethod 
index d95103a..a1b5a5c 100644 (file)
@@ -69,7 +69,7 @@ class Iotlabv1Node:
             network_elem.set('login', unicode(iotlab_network_dict['login']))
 
     @staticmethod
-    def add_nodes(xml, nodes):
+    def add_nodes(xml, nodes, rspec_content_type=None):
         """Adds the nodes to the xml.
 
         Adds the nodes as well as dedicated iotlab fields to the node xml
@@ -165,6 +165,11 @@ class Iotlabv1Node:
                                                     #'value': initscript['name']})
 
                     Iotlabv1Sliver.add_slivers(node_elem, slivers)
+            
+            # add sliver tag in Request Rspec
+            if rspec_content_type == "request":
+                node_elem.add_instance('sliver', '', [])
+
         return node_elems
 
     @staticmethod
index 9467884..7ab5188 100644 (file)
@@ -102,6 +102,10 @@ class NITOSv1Node:
                     tag_elem = node_elem.add_element(tag['tagname'])
                     tag_elem.set_text(tag['value'])
             NITOSv1Sliver.add_slivers(node_elem, node.get('slivers', []))
+            
+            # add sliver tag in Request Rspec
+            if rspec_content_type == "request":
+                node_elem.add_instance('sliver', '', [])
 
     @staticmethod 
     def add_slivers(xml, slivers):
index 7d439e9..10a10c8 100644 (file)
@@ -14,7 +14,6 @@ from sfa.rspecs.elements.versions.pgv2SliverType import PGv2SliverType
 from sfa.rspecs.elements.versions.pgv2Interface import PGv2Interface     
 from sfa.rspecs.elements.lease import Lease
 
-from sfa.planetlab.plxrn import xrn_to_hostname
 
 class PGv2Lease:
     @staticmethod
index 533e51a..df45570 100644 (file)
@@ -1,4 +1,4 @@
-from sfa.util.xrn import Xrn
+from sfa.util.xrn import Xrn, get_leaf
 from sfa.util.xml import XpathFilter
 
 from sfa.rspecs.elements.node import Node
@@ -16,11 +16,10 @@ from sfa.rspecs.elements.versions.sfav1PLTag import SFAv1PLTag
 from sfa.rspecs.elements.granularity import Granularity
 from sfa.rspecs.elements.attribute import Attribute
 
-from sfa.planetlab.plxrn import xrn_to_hostname
 
 class PGv2Node:
     @staticmethod
-    def add_nodes(xml, nodes):
+    def add_nodes(xml, nodes, rspec_content_type=None):
         node_elems = []
         for node in nodes:
             node_fields = ['component_manager_id', 'component_id', 'client_id', 'sliver_id', 'exclusive']
@@ -28,7 +27,7 @@ class PGv2Node:
             node_elems.append(node_elem)
             # set component name
             if node.get('component_id'):
-                component_name = xrn_to_hostname(node['component_id'])
+                component_name = Xrn.unescape(get_leaf(Xrn(node['component_id']).get_hrn()))
                 node_elem.set('component_name', component_name)
             # set hardware types
             if node.get('hardware_types'):
@@ -39,7 +38,7 @@ class PGv2Node:
                 node_elem.add_instance('location', node['location'], Location.fields)       
 
             # set granularity
-            if node['exclusive'] == "true":
+            if node.get('exclusive') == "true":
                 granularity = node.get('granularity')
                 node_elem.add_instance('granularity', granularity, granularity.fields)
             # set interfaces
@@ -74,6 +73,10 @@ class PGv2Node:
                     tag['name'] = tag.pop('tagname')
                     node_elem.add_instance('{%s}attribute' % xml.namespaces['planetlab'], tag, ['name', 'value'])
 
+            # add sliver tag in Request Rspec
+            if rspec_content_type == "request":
+                node_elem.add_instance('sliver', '', [])
+
         return node_elems
 
 
@@ -132,21 +135,28 @@ class PGv2Node:
                     node['boot_state'] = 'disabled' 
 
             # get initscripts
-            node['pl_initscripts'] = []
-            initscript_elems = node_elem.xpath('./default:sliver_type/planetlab:initscript | ./sliver_type/initscript')
-            if len(initscript_elems) > 0:
-                for initscript_elem in initscript_elems:
-                    if 'name' in initscript_elem.attrib:
-                        node['pl_initscripts'].append(dict(initscript_elem.attrib))
+            try:
+               node['pl_initscripts'] = []
+               initscript_elems = node_elem.xpath('./default:sliver_type/planetlab:initscript | ./sliver_type/initscript')
+               if len(initscript_elems) > 0:
+                   for initscript_elem in initscript_elems:
+                        if 'name' in initscript_elem.attrib:
+                            node['pl_initscripts'].append(dict(initscript_elem.attrib))
+            except:
+               pass
 
             # get node tags
-            tag_elems = node_elem.xpath('./planetlab:attribute | ./attribute')
-            node['tags'] = []
-            if len(tag_elems) > 0:
-                for tag_elem in tag_elems:
-                    tag = dict(tag_elem.get_instance(Attribute))
-                    tag['tagname'] = tag.pop('name')
-                    node['tags'].append(tag)
+            try:
+               tag_elems = node_elem.xpath('./planetlab:attribute | ./attribute')
+               node['tags'] = []
+               if len(tag_elems) > 0:
+                   for tag_elem in tag_elems:
+                        tag = dict(tag_elem.get_instance(Attribute))
+                        tag['tagname'] = tag.pop('name')
+                        node['tags'].append(tag)
+            except:
+               pass
+  
         return nodes
 
 
index fa735cd..379636a 100644 (file)
@@ -16,7 +16,6 @@ from sfa.rspecs.elements.versions.sfav1PLTag import SFAv1PLTag
 from sfa.rspecs.elements.versions.pgv2Services import PGv2Services
 from sfa.rspecs.elements.lease import Lease
 
-from sfa.planetlab.plxrn import xrn_to_hostname
 
 class SFAv1Lease:
 
index 2f839c4..95ca516 100644 (file)
@@ -1,6 +1,6 @@
 from sfa.util.sfalogging import logger
 from sfa.util.xml import XpathFilter
-from sfa.util.xrn import Xrn
+from sfa.util.xrn import Xrn, get_leaf
 
 from sfa.rspecs.elements.element import Element
 from sfa.rspecs.elements.node import Node
@@ -15,12 +15,11 @@ from sfa.rspecs.elements.versions.sfav1Sliver import SFAv1Sliver
 from sfa.rspecs.elements.versions.sfav1PLTag import SFAv1PLTag
 from sfa.rspecs.elements.versions.pgv2Services import PGv2Services
 
-from sfa.planetlab.plxrn import xrn_to_hostname
 
 class SFAv1Node:
 
     @staticmethod
-    def add_nodes(xml, nodes):
+    def add_nodes(xml, nodes, rspec_content_type=None):
         network_elems = xml.xpath('//network')
         if len(network_elems) > 0:
             network_elem = network_elems[0]
@@ -43,7 +42,7 @@ class SFAv1Node:
 
             # set component_name attribute and  hostname element
             if 'component_id' in node and node['component_id']:
-                component_name = xrn_to_hostname(node['component_id'])
+                component_name = Xrn.unescape(get_leaf(Xrn(node['component_id']).get_hrn()))
                 node_elem.set('component_name', component_name)
                 hostname_elem = node_elem.add_element('hostname')
                 hostname_elem.set_text(component_name)
@@ -94,6 +93,10 @@ class SFAv1Node:
                         tag_elem.set_text(tag['value'])
             SFAv1Sliver.add_slivers(node_elem, node.get('slivers', []))
 
+            # add sliver tag in Request Rspec
+            if rspec_content_type == "request":
+                node_elem.add_instance('sliver', '', []) 
+
     @staticmethod 
     def add_slivers(xml, slivers):
         component_ids = []
index 851d11c..a2b07a1 100644 (file)
@@ -5,7 +5,6 @@ from sfa.rspecs.elements.element import Element
 from sfa.rspecs.elements.sliver import Sliver
 from sfa.rspecs.elements.versions.sfav1PLTag import SFAv1PLTag
 
-from sfa.planetlab.plxrn import PlXrn
 
 class SFAv1Sliver:
 
index cee1f90..561b61c 100644 (file)
@@ -64,8 +64,8 @@ class Iotlabv1(RSpecVersion):
     def add_connection_information(self, ldap_username, sites_set):
         return Iotlabv1Node.add_connection_information(self.xml,ldap_username, sites_set)
 
-    def add_nodes(self, nodes, check_for_dupes=False):
-        return Iotlabv1Node.add_nodes(self.xml,nodes )
+    def add_nodes(self, nodes, check_for_dupes=False, rspec_content_type=None):
+        return Iotlabv1Node.add_nodes(self.xml,nodes, rspec_content_type)
 
     def merge_node(self, source_node_tag, network, no_dupes = False):
         logger.debug("SLABV1 merge_node")
index 29d095a..72133ac 100644 (file)
@@ -47,8 +47,8 @@ class NITOSv1(RSpecVersion):
     def get_nodes_with_slivers(self):
         return NITOSv1Node.get_nodes_with_slivers(self.xml)
 
-    def add_nodes(self, nodes, network = None, no_dupes=False):
-        NITOSv1Node.add_nodes(self.xml, nodes)
+    def add_nodes(self, nodes, network = None, no_dupes=False, rspec_content_type=None):
+        NITOSv1Node.add_nodes(self.xml, nodes, rspec_content_type)
 
     def merge_node(self, source_node_tag, network, no_dupes=False):
         if no_dupes and self.get_node_element(node['hostname']):
index fbd8a39..cfe1eae 100644 (file)
@@ -45,8 +45,8 @@ class PGv2(RSpecVersion):
     def get_nodes_with_slivers(self):
         return PGv2Node.get_nodes_with_slivers(self.xml)
 
-    def add_nodes(self, nodes, check_for_dupes=False):
-        return PGv2Node.add_nodes(self.xml, nodes)
+    def add_nodes(self, nodes, check_for_dupes=False, rspec_content_type=None):
+        return PGv2Node.add_nodes(self.xml, nodes, rspec_content_type)
     
     def merge_node(self, source_node_tag):
         # this is untested
index d0e7606..97950e7 100644 (file)
@@ -46,8 +46,8 @@ class SFAv1(RSpecVersion):
     def get_nodes_with_slivers(self):
         return SFAv1Node.get_nodes_with_slivers(self.xml)
 
-    def add_nodes(self, nodes, network = None, no_dupes=False):
-        SFAv1Node.add_nodes(self.xml, nodes)
+    def add_nodes(self, nodes, network = None, no_dupes=False, rspec_content_type=None):
+        SFAv1Node.add_nodes(self.xml, nodes, rspec_content_type)
 
     def merge_node(self, source_node_tag, network, no_dupes=False):
         if no_dupes and self.get_node_element(node['hostname']):