From: Sandrine Avakian Date: Tue, 8 Oct 2013 11:49:11 +0000 (+0200) Subject: Merge branch 'master' of ssh://git.onelab.eu/git/sfa X-Git-Tag: sfa-2.1-27~8^2 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=f65b3846a75ea1f3273d54b2aa5dc4503301a596;hp=59efd21588743e444a9f253411375615dd064b0f;p=sfa.git Merge branch 'master' of ssh://git.onelab.eu/git/sfa --- diff --git a/sfa/importer/plimporter.py b/sfa/importer/plimporter.py index 7994c8c9..26d1ccdc 100644 --- a/sfa/importer/plimporter.py +++ b/sfa/importer/plimporter.py @@ -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 diff --git a/sfa/managers/slice_manager.py b/sfa/managers/slice_manager.py index 496aab21..daf3dc71 100644 --- a/sfa/managers/slice_manager.py +++ b/sfa/managers/slice_manager.py @@ -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: diff --git a/sfa/planetlab/plaggregate.py b/sfa/planetlab/plaggregate.py index 09826f05..e147041e 100644 --- a/sfa/planetlab/plaggregate.py +++ b/sfa/planetlab/plaggregate.py @@ -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'] diff --git a/sfa/planetlab/pldriver.py b/sfa/planetlab/pldriver.py index 6c88a14f..5215c57b 100644 --- a/sfa/planetlab/pldriver.py +++ b/sfa/planetlab/pldriver.py @@ -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) diff --git a/sfa/planetlab/plshell.py b/sfa/planetlab/plshell.py index f42af880..15334db0 100644 --- a/sfa/planetlab/plshell.py +++ b/sfa/planetlab/plshell.py @@ -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', diff --git a/sfa/planetlab/plslices.py b/sfa/planetlab/plslices.py index b16d5cfe..3b5f0fc9 100644 --- a/sfa/planetlab/plslices.py +++ b/sfa/planetlab/plslices.py @@ -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 diff --git a/sfa/planetlab/plxrn.py b/sfa/planetlab/plxrn.py index 22e94181..a8461b53 100644 --- a/sfa/planetlab/plxrn.py +++ b/sfa/planetlab/plxrn.py @@ -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 diff --git a/sfa/rspecs/elements/versions/iotlabv1Node.py b/sfa/rspecs/elements/versions/iotlabv1Node.py index d95103a0..a1b5a5cf 100644 --- a/sfa/rspecs/elements/versions/iotlabv1Node.py +++ b/sfa/rspecs/elements/versions/iotlabv1Node.py @@ -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 diff --git a/sfa/rspecs/elements/versions/nitosv1Node.py b/sfa/rspecs/elements/versions/nitosv1Node.py index 94678847..7ab5188a 100644 --- a/sfa/rspecs/elements/versions/nitosv1Node.py +++ b/sfa/rspecs/elements/versions/nitosv1Node.py @@ -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): diff --git a/sfa/rspecs/elements/versions/pgv2Lease.py b/sfa/rspecs/elements/versions/pgv2Lease.py index 7d439e94..10a10c8f 100644 --- a/sfa/rspecs/elements/versions/pgv2Lease.py +++ b/sfa/rspecs/elements/versions/pgv2Lease.py @@ -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 diff --git a/sfa/rspecs/elements/versions/pgv2Node.py b/sfa/rspecs/elements/versions/pgv2Node.py index 533e51a6..df455709 100644 --- a/sfa/rspecs/elements/versions/pgv2Node.py +++ b/sfa/rspecs/elements/versions/pgv2Node.py @@ -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 diff --git a/sfa/rspecs/elements/versions/sfav1Lease.py b/sfa/rspecs/elements/versions/sfav1Lease.py index fa735cd3..379636a1 100644 --- a/sfa/rspecs/elements/versions/sfav1Lease.py +++ b/sfa/rspecs/elements/versions/sfav1Lease.py @@ -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: diff --git a/sfa/rspecs/elements/versions/sfav1Node.py b/sfa/rspecs/elements/versions/sfav1Node.py index 2f839c48..95ca516d 100644 --- a/sfa/rspecs/elements/versions/sfav1Node.py +++ b/sfa/rspecs/elements/versions/sfav1Node.py @@ -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 = [] diff --git a/sfa/rspecs/elements/versions/sfav1Sliver.py b/sfa/rspecs/elements/versions/sfav1Sliver.py index 851d11c7..a2b07a13 100644 --- a/sfa/rspecs/elements/versions/sfav1Sliver.py +++ b/sfa/rspecs/elements/versions/sfav1Sliver.py @@ -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: diff --git a/sfa/rspecs/versions/iotlabv1.py b/sfa/rspecs/versions/iotlabv1.py index cee1f901..561b61c5 100644 --- a/sfa/rspecs/versions/iotlabv1.py +++ b/sfa/rspecs/versions/iotlabv1.py @@ -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") diff --git a/sfa/rspecs/versions/nitosv1.py b/sfa/rspecs/versions/nitosv1.py index 29d095ae..72133ac1 100644 --- a/sfa/rspecs/versions/nitosv1.py +++ b/sfa/rspecs/versions/nitosv1.py @@ -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']): diff --git a/sfa/rspecs/versions/pgv2.py b/sfa/rspecs/versions/pgv2.py index fbd8a394..cfe1eaee 100644 --- a/sfa/rspecs/versions/pgv2.py +++ b/sfa/rspecs/versions/pgv2.py @@ -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 diff --git a/sfa/rspecs/versions/sfav1.py b/sfa/rspecs/versions/sfav1.py index d0e76064..97950e7c 100644 --- a/sfa/rspecs/versions/sfav1.py +++ b/sfa/rspecs/versions/sfav1.py @@ -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']):