def merge(self, in_rspec): """ Merge contents for specified rspec with current rspec """ if not in_rspec: return from vt_manager.communication.sfa.rspecs.rspec import RSpec if isinstance(in_rspec, RSpec): rspec = in_rspec else: rspec = RSpec(in_rspec) if rspec.version.type.lower() == 'protogeni': from vt_manager.communication.sfa.rspecs.rspec_converter import RSpecConverter in_rspec = RSpecConverter.to_sfa_rspec(rspec.toxml()) rspec = RSpec(in_rspec) # just copy over all networks current_networks = self.get_networks() networks = rspec.version.get_networks() for network in networks: current_network = network.get('name') if current_network and current_network not in current_networks: self.xml.append(network.element) current_networks.append(current_network)
def get_rspec(self, version=None, slice_leaf=None, projectName=None, created_vms=[], new_nodes=[], options={}): version_manager = VersionManager() version = version_manager.get_version(version) if slice_leaf: #Manifest RSpec will be used when somebody creates an sliver, returning the resources of this AM and the vm(s) requested by the user. rspec_version = version_manager._get_version( version.type, version.version, 'manifest') options['slice'] = slice_leaf nodes = self.get_nodes_in_geni(options, slice_leaf, projectName, created_vms, new_nodes) rspec = RSpec(version=rspec_version, user_options=options) rspec.version.add_nodes_geni(nodes) else: rspec_version = version_manager._get_version( version.type, version.version, 'ad') nodes = self.get_nodes(options, slice_leaf, projectName, created_vms, new_nodes) rspec = RSpec(version=rspec_version, user_options=options) #nodes = self.get_nodes(options,slice_leaf,projectName,created_vms,new_nodes) rspec.version.add_nodes(nodes) return rspec.toxml()
def to_sfa_rspec(rspec, content_type=None): if not isinstance(rspec, RSpec): pg_rspec = RSpec(rspec) else: pg_rspec = rspec version_manager = VersionManager() sfa_version = version_manager._get_version('sfa', '1') sfa_rspec = RSpec(version=sfa_version) #nodes = pg_rspec.version.get_nodes() #sfa_rspec.version.add_nodes(nodes()) #sfa_rspec.version.add_links(pg_rspec.version.get_links()) #return sfa_rspec.toxml() # get network networks = pg_rspec.version.get_networks() network_hrn = networks[0]["name"] network_element = sfa_rspec.xml.add_element('network', name=network_hrn, id=network_hrn) # get nodes pg_nodes_elements = pg_rspec.version.get_nodes() nodes_with_slivers = pg_rspec.version.get_nodes_with_slivers() i = 1 for pg_node in pg_nodes_elements: attribs = dict(pg_node.items()) attribs['id'] = 'n' + str(i) node_element = network_element.add_element('node') for attrib in attribs: if type(attribs[attrib]) == str: node_element.set(attrib, attribs[attrib]) urn = pg_node["component_id"] if urn: if type(urn) == list: # legacy code, not sure if urn is ever a list... urn = urn[0] hostname = Xrn.urn_split(urn)[-1] hostname_element = node_element.add_element('hostname') hostname_element.set_text(hostname) if hostname in nodes_with_slivers: node_element.add_element('sliver') for hardware_type in pg_node["hardware_types"]: if "name" in hardware_type: node_element.add_element("hardware_type", name=hardware_type["name"]) # just copy over remaining child elements #for child in pg_node_element.getchildren(): # node_element.append(transform(child).getroot()) i = i + 1 return sfa_rspec.toxml()
def to_sfa_rspec(rspec, content_type = None): if not isinstance(rspec, RSpec): pg_rspec = RSpec(rspec) else: pg_rspec = rspec version_manager = VersionManager() sfa_version = version_manager._get_version('sfa', '1') sfa_rspec = RSpec(version=sfa_version) #nodes = pg_rspec.version.get_nodes() #sfa_rspec.version.add_nodes(nodes()) #sfa_rspec.version.add_links(pg_rspec.version.get_links()) #return sfa_rspec.toxml() # get network networks = pg_rspec.version.get_networks() network_hrn = networks[0]["name"] network_element = sfa_rspec.xml.add_element('network', name=network_hrn, id=network_hrn) # get nodes pg_nodes_elements = pg_rspec.version.get_nodes() nodes_with_slivers = pg_rspec.version.get_nodes_with_slivers() i = 1 for pg_node in pg_nodes_elements: attribs = dict(pg_node.items()) attribs['id'] = 'n'+str(i) node_element = network_element.add_element('node') for attrib in attribs: if type(attribs[attrib]) == str: node_element.set(attrib, attribs[attrib]) urn = pg_node["component_id"] if urn: if type(urn)==list: # legacy code, not sure if urn is ever a list... urn = urn[0] hostname = Xrn.urn_split(urn)[-1] hostname_element = node_element.add_element('hostname') hostname_element.set_text(hostname) if hostname in nodes_with_slivers: node_element.add_element('sliver') for hardware_type in pg_node["hardware_types"]: if "name" in hardware_type: node_element.add_element("hardware_type", name=hardware_type["name"]) # just copy over remaining child elements #for child in pg_node_element.getchildren(): # node_element.append(transform(child).getroot()) i = i+1 return sfa_rspec.toxml()
def get_rspec(self, version=None, slice_leaf=None, projectName=None ,created_vms=[],new_nodes=[], options={}): version_manager = VersionManager() version = version_manager.get_version(version) if slice_leaf: #Manifest RSpec will be used when somebody creates an sliver, returning the resources of this AM and the vm(s) requested by the user. rspec_version = version_manager._get_version(version.type, version.version, 'manifest') options['slice']=slice_leaf else: rspec_version = version_manager._get_version(version.type, version.version, 'ad') rspec = RSpec(version=rspec_version, user_options=options) nodes = self.get_nodes(options,slice_leaf,projectName,created_vms,new_nodes) rspec.version.add_nodes(nodes) return rspec.toxml()
def to_sfa_rspec(in_rspec, content_type=None): rspec = RSpec(in_rspec) version_manager = VersionManager() sfa_version = version_manager._get_version('sfa', '1') pg_version = version_manager._get_version('protogeni', '2') if rspec.version.type.lower() == sfa_version.type.lower(): return in_rspec elif rspec.version.type.lower() == pg_version.type.lower(): return PGRSpecConverter.to_sfa_rspec(in_rspec, content_type) else: return in_rspec
def merge(self, in_rspec): """ Merge contents for specified rspec with current rspec """ from vt_manager.communication.sfa.rspecs.rspec import RSpec # just copy over all the child elements under the root element if isinstance(in_rspec, basestring): in_rspec = RSpec(in_rspec) nodes = in_rspec.version.get_nodes() # protogeni rspecs need to advertise the availabel sliver types for node in nodes: if not node.has_key('sliver') or not node['sliver']: node['sliver'] = {'name': 'plab-vserver'} self.add_nodes(nodes) self.add_links(in_rspec.version.get_links())
def create_sliver (self,slice_leaf,authority,rspec_string, users, options, expiration_date): rspec = RSpec(rspec_string,'OcfVt') requested_attributes = rspec.version.get_slice_attributes() requested_attributes = self.shell.convert_to_uuid(requested_attributes) #Converts component_id URNs to UUIDs projectName = authority#users[0]['slice_record']['authority'] sliceName = slice_leaf self.shell.CreateSliver(requested_attributes,projectName,sliceName,expiration_date) created_vms = list() nodes = list() for slivers in requested_attributes: node = self.shell.GetNodes(uuid=slivers['component_id']) for vm in slivers['slivers']: #node = self.shell.GetNodes(uuid=vm['server-id']) if not node in nodes: nodes.append(node) #ip = self.shell.get_ip_from_vm(vm_name=vm['name'],slice_name=vm['slice-name'],project=authority) #created_vms.append({'vm-name':vm['name'],'vm-ip':ip,'vm-state':'ongoing','slice-name':slice_leaf,'node-name':node.name}) return self.aggregate.get_rspec(slice_leaf=slice_leaf,projectName=projectName,version=rspec.version,created_vms=created_vms,new_nodes=nodes)
class OcfVtAd(OcfVt): enabled = True content_type = 'ad' schema = '/opt/ofelia/vt_manager/src/python/vt_manager/communication/sfa/tests/vm_schema.xsd'#'http://www.protogeni.net/resources/rspec/2/ad.xsd' template = '<rspec type="advertisement" xmlns="http://www.protogeni.net/resources/rspec/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.protogeni.net/resources/rspec/2 http://www.protogeni.net/resources/rspec/2/ad.xsd /opt/ofelia/vt_manager/src/python/vt_manager/communication/sfa/tests/vm_schema.xsd"/>' class OcfVtRequest(OcfVt): enabled = True content_type = 'request' schema = '/opt/ofelia/vt_manager/src/python/vt_manager/communication/sfa/tests/vm_schema.xsd'#'http://www.protogeni.net/resources/rspec/2/ad.xsd' template = '<rspec type="advertisement" xmlns="http://www.protogeni.net/resources/rspec/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.protogeni.net/resources/rspec/2 http://www.protogeni.net/resources/rspec/2/ad.xsd /opt/ofelia/vt_manager/src/python/vt_manager/communication/sfa/tests/vm_schema.xsd"/>' #schema = 'http://www.protogeni.net/resources/rspec/2/request.xsd' #template = '<rspec type="request" xmlns="http://www.protogeni.net/resources/rspec/2" xmlns:flack="http://www.protogeni.net/resources/rspec/ext/flack/1" xmlns:plos="http://www.planet-lab.org/resources/sfa/ext/plos/1" xmlns:planetlab="http://www.planet-lab.org/resources/sfa/ext/planetlab/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.protogeni.net/resources/rspec/2 http://www.protogeni.net/resources/rspec/2/request.xsd http://www.planet-lab.org/resources/sfa/ext/planetlab/1 http://www.planet-lab.org/resources/sfa/ext/planetlab/1/planetlab.xsd http://www.planet-lab.org/resources/sfa/ext/plos/1 http://www.planet-lab.org/resources/sfa/ext/plos/1/plos.xsd"/>' class OcfVtManifest(OcfVt): enabled = True content_type = 'manifest' schema = 'http://www.protogeni.net/resources/rspec/2/manifest.xsd' template = '<rspec type="manifest" xmlns="http://www.protogeni.net/resources/rspec/2" xmlns:plos="http://www.planet-lab.org/resources/sfa/ext/plos/1" xmlns:flack="http://www.protogeni.net/resources/rspec/ext/flack/1" xmlns:planetlab="http://www.planet-lab.org/resources/sfa/ext/planetlab/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.protogeni.net/resources/rspec/2 http://www.protogeni.net/resources/rspec/2/manifest.xsd http://www.planet-lab.org/resources/sfa/ext/planetlab/1 http://www.planet-lab.org/resources/sfa/ext/planetlab/1/planetlab.xsd http://www.planet-lab.org/resources/sfa/ext/plos/1 http://www.planet-lab.org/resources/sfa/ext/plos/1/plos.xsd"/>' if __name__ == '__main__': from vt_manager.communication.sfa.rspecs.rspec import RSpec from vt_manager.communication.sfa.rspecs.rspec_elements import * r = RSpec('/tmp/ocf.rspec') r.load_rspec_elements(OcfVt.elements) print r.get(RSpecElements.NODE)
for sliver in slivers: fields = sliver.fields s = node_elem.add_element('sliver', type=str( sliver.__class__.__name__)) for field in fields: if sliver[field]: simple_elem = s.add_element( field) #node_elem.add_element(field) simple_elem.set_text(sliver[field]) # we must still advertise the available sliver types #slivers = Sliver({'type': 'plab-vserver'}) # we must also advertise the available initscripts #slivers['tags'] = [] #if node.get('pl_initscripts'): # for initscript in node.get('pl_initscripts', []): # slivers['tags'].append({'name': 'initscript', 'value': initscript['name']}) #PGv2SliverType.add_slivers(node_elem, slivers) return node_elems if __name__ == '__main__': from vt_manager.communication.sfa.rspecs.rspec import RSpec #import pdb r = RSpec('/tmp/emulab.rspec') r2 = RSpec(version='OcfVt') nodes = OcfVtNode.get_nodes(r.xml) OcfVtNode.add_nodes(r2.xml.root, nodes) #pdb.set_trace()
class PGv2Ad(PGv2): enabled = True content_type = 'ad' schema = 'http://www.protogeni.net/resources/rspec/2/ad.xsd' template = '<rspec type="advertisement" xmlns="http://www.protogeni.net/resources/rspec/2" xmlns:flack="http://www.protogeni.net/resources/rspec/ext/flack/1" xmlns:plos="http://www.planet-lab.org/resources/sfa/ext/plos/1" xmlns:planetlab="http://www.planet-lab.org/resources/sfa/ext/planetlab/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.protogeni.net/resources/rspec/2 http://www.protogeni.net/resources/rspec/2/ad.xsd http://www.planet-lab.org/resources/sfa/ext/planetlab/1 http://www.planet-lab.org/resources/sfa/ext/planetlab/1/planetlab.xsd http://www.planet-lab.org/resources/sfa/ext/plos/1 http://www.planet-lab.org/resources/sfa/ext/plos/1/plos.xsd"/>' class PGv2Request(PGv2): enabled = True content_type = 'request' schema = 'http://www.protogeni.net/resources/rspec/2/request.xsd' template = '<rspec type="request" xmlns="http://www.protogeni.net/resources/rspec/2" xmlns:flack="http://www.protogeni.net/resources/rspec/ext/flack/1" xmlns:plos="http://www.planet-lab.org/resources/sfa/ext/plos/1" xmlns:planetlab="http://www.planet-lab.org/resources/sfa/ext/planetlab/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.protogeni.net/resources/rspec/2 http://www.protogeni.net/resources/rspec/2/request.xsd http://www.planet-lab.org/resources/sfa/ext/planetlab/1 http://www.planet-lab.org/resources/sfa/ext/planetlab/1/planetlab.xsd http://www.planet-lab.org/resources/sfa/ext/plos/1 http://www.planet-lab.org/resources/sfa/ext/plos/1/plos.xsd"/>' class PGv2Manifest(PGv2): enabled = True content_type = 'manifest' schema = 'http://www.protogeni.net/resources/rspec/2/manifest.xsd' template = '<rspec type="manifest" xmlns="http://www.protogeni.net/resources/rspec/2" xmlns:plos="http://www.planet-lab.org/resources/sfa/ext/plos/1" xmlns:flack="http://www.protogeni.net/resources/rspec/ext/flack/1" xmlns:planetlab="http://www.planet-lab.org/resources/sfa/ext/planetlab/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.protogeni.net/resources/rspec/2 http://www.protogeni.net/resources/rspec/2/manifest.xsd http://www.planet-lab.org/resources/sfa/ext/planetlab/1 http://www.planet-lab.org/resources/sfa/ext/planetlab/1/planetlab.xsd http://www.planet-lab.org/resources/sfa/ext/plos/1 http://www.planet-lab.org/resources/sfa/ext/plos/1/plos.xsd"/>' if __name__ == '__main__': from vt_manager.communication.sfa.rspecs.rspec import RSpec from vt_manager.communication.sfa.rspecs.rspec_elements import * r = RSpec('/tmp/pg.rspec') r.load_rspec_elements(PGv2.elements) r.namespaces = PGv2.namespaces print r.get(RSpecElements.NODE)
for network in networks: current_network = network.get('name') if current_network and current_network not in current_networks: self.xml.append(network.element) current_networks.append(current_network) # Leases def get_leases(self, filter=None): return NITOSv1Lease.get_leases(self.xml, filter) def add_leases(self, leases, channels, network = None, no_dupes=False): NITOSv1Lease.add_leases(self.xml, leases, channels) # Spectrum def get_channels(self, filter=None): return NITOSv1Channel.get_channels(self.xml, filter) def add_channels(self, channels, network = None, no_dupes=False): NITOSv1Channel.add_channels(self.xml, channels) if __name__ == '__main__': from vt_manager.communication.sfa.rspecs.rspec import RSpec from vt_manager.communication.sfa.rspecs.rspec_elements import * r = RSpec('/tmp/resources.rspec') r.load_rspec_elements(SFAv1.elements) print r.get(RSpecElements.NODE)
self.xml.remove_element('//default:available | //available') class PGv2Ad(PGv2): enabled = True content_type = 'ad' schema = 'http://www.protogeni.net/resources/rspec/2/ad.xsd' template = '<rspec type="advertisement" xmlns="http://www.protogeni.net/resources/rspec/2" xmlns:flack="http://www.protogeni.net/resources/rspec/ext/flack/1" xmlns:plos="http://www.planet-lab.org/resources/sfa/ext/plos/1" xmlns:planetlab="http://www.planet-lab.org/resources/sfa/ext/planetlab/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.protogeni.net/resources/rspec/2 http://www.protogeni.net/resources/rspec/2/ad.xsd http://www.planet-lab.org/resources/sfa/ext/planetlab/1 http://www.planet-lab.org/resources/sfa/ext/planetlab/1/planetlab.xsd http://www.planet-lab.org/resources/sfa/ext/plos/1 http://www.planet-lab.org/resources/sfa/ext/plos/1/plos.xsd"/>' class PGv2Request(PGv2): enabled = True content_type = 'request' schema = 'http://www.protogeni.net/resources/rspec/2/request.xsd' template = '<rspec type="request" xmlns="http://www.protogeni.net/resources/rspec/2" xmlns:flack="http://www.protogeni.net/resources/rspec/ext/flack/1" xmlns:plos="http://www.planet-lab.org/resources/sfa/ext/plos/1" xmlns:planetlab="http://www.planet-lab.org/resources/sfa/ext/planetlab/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.protogeni.net/resources/rspec/2 http://www.protogeni.net/resources/rspec/2/request.xsd http://www.planet-lab.org/resources/sfa/ext/planetlab/1 http://www.planet-lab.org/resources/sfa/ext/planetlab/1/planetlab.xsd http://www.planet-lab.org/resources/sfa/ext/plos/1 http://www.planet-lab.org/resources/sfa/ext/plos/1/plos.xsd"/>' class PGv2Manifest(PGv2): enabled = True content_type = 'manifest' schema = 'http://www.protogeni.net/resources/rspec/2/manifest.xsd' template = '<rspec type="manifest" xmlns="http://www.protogeni.net/resources/rspec/2" xmlns:plos="http://www.planet-lab.org/resources/sfa/ext/plos/1" xmlns:flack="http://www.protogeni.net/resources/rspec/ext/flack/1" xmlns:planetlab="http://www.planet-lab.org/resources/sfa/ext/planetlab/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.protogeni.net/resources/rspec/2 http://www.protogeni.net/resources/rspec/2/manifest.xsd http://www.planet-lab.org/resources/sfa/ext/planetlab/1 http://www.planet-lab.org/resources/sfa/ext/planetlab/1/planetlab.xsd http://www.planet-lab.org/resources/sfa/ext/plos/1 http://www.planet-lab.org/resources/sfa/ext/plos/1/plos.xsd"/>' if __name__ == '__main__': from vt_manager.communication.sfa.rspecs.rspec import RSpec from vt_manager.communication.sfa.rspecs.rspec_elements import * r = RSpec('/tmp/pg.rspec') r.load_rspec_elements(PGv2.elements) r.namespaces = PGv2.namespaces print r.get(RSpecElements.NODE)
rspec = RSpec(in_rspec) if rspec.version.type.lower() == 'protogeni': from vt_manager.communication.sfa.rspecs.rspec_converter import RSpecConverter in_rspec = RSpecConverter.to_sfa_rspec(rspec.toxml()) rspec = RSpec(in_rspec) # just copy over all networks current_networks = self.get_networks() networks = rspec.version.get_networks() for network in networks: current_network = network.get('name') if current_network and current_network not in current_networks: self.xml.append(network.element) current_networks.append(current_network) # Leases def get_leases(self, filter=None): return SFAv1Lease.get_leases(self.xml, filter) def add_leases(self, leases, network=None, no_dupes=False): SFAv1Lease.add_leases(self.xml, leases) if __name__ == '__main__': from vt_manager.communication.sfa.rspecs.rspec import RSpec from vt_manager.communication.sfa.rspecs.rspec_elements import * r = RSpec('/tmp/resources.rspec') r.load_rspec_elements(SFAv1.elements) print r.get(RSpecElements.NODE)
def create_sliver(self, slice_leaf, authority, rspec_string, users, options, expiration_date): rspec = RSpec(rspec_string, 'OcfVt') requested_attributes = rspec.version.get_slice_attributes() requested_attributes = self.shell.convert_to_uuid( requested_attributes) #Converts component_id URNs to UUIDs projectName = authority #users[0]['slice_record']['authority'] sliceName = slice_leaf self.shell.CreateSliver(requested_attributes, projectName, sliceName, expiration_date) created_vms = list() nodes = list() for slivers in requested_attributes: node = self.shell.GetNodes(uuid=slivers['component_id']) #print "\n\n\n\n\n\nslivers: %s\n\n\n\n\n\n" % slivers['slivers'] for vm in slivers['slivers']: #node = self.shell.GetNodes(uuid=vm['server-id']) if not node in nodes: nodes.append(node) try: #print "\n\n\n\n\n\nusers: %s\n\n\n\n\n\n" % str(users) for user in users: xrn = Xrn(user['urn'], 'user') user_name = xrn.get_leaf() # Store user SSH key for future use for user_key in user['keys']: if not VirtualMachineKeys.objects.filter( project_uuid=vm["project-id"], slice_uuid=vm["slice-id"], vm_uuid=vm['uuid'], user_name=user_name, ssh_key=user_key): key_entry = VirtualMachineKeys( project_uuid=vm["project-id"], slice_uuid=vm["slice-id"], vm_uuid=vm['uuid'], user_name=user_name, ssh_key=user_key) key_entry.save() except Exception as e: logging.error( "create_sliver > Could not store user SSH key. Details: %s" % str(e)) #ip = self.shell.get_ip_from_vm(vm_name=vm['name'],slice_name=vm['slice-name'],project=authority) #created_vms.append({'vm-name':vm['name'],'vm-ip':ip,'vm-state':'ongoing','slice-name':slice_leaf,'node-name':node.name}) #add ssh keys to ldap of ssh gateway if len(nodes): logging.info("create_slice > Connecting to LDAP") session = ldapManager() con = session.bind() logging.info("create_slice > Connected to LDAP. Connection: %s" % str(con)) if con: logging.info("LDAP: trying to create the following users: %s" % str(users)) for user in users: logging.info("Sending users to LDAP") #logging.error("project: "+str(projectName)+" slicename"+str(sliceName)) ldapprj = "%s.%s" % (projectName, sliceName) ldapprj = ldapprj.replace("\\", "") logging.info("LDAP project: " + ldapprj) session.add_modify_project_users(con, user["urn"], ldapprj, user["keys"]) logging.info("User added to project: " + str(ldapprj) + ", SSH key: " + str(user['keys'])) #status=session.add_project(con,projectName+"."+sliceName) #if status != 0: #logging.error("users"+users) # for index,user in enumerate(users): #logging.error(user) # status=session.add_user(con,"user"+str(index),user['urn'],projectName+"."+sliceName,user['keys']) # if status ==0: # logging.error("can't add user to ldap of ssh gateway:"+ str(user)) #else: # logging.error("can't add project to ldap of ssh gateway: "+projectName+"."+sliceName) else: logging.error("Cannot contact LDAP of the SSH gateway") return self.aggregate.get_rspec(slice_leaf=slice_leaf, projectName=projectName, version=rspec.version, created_vms=created_vms, new_nodes=nodes)
def to_pg_rspec(rspec, content_type = None): if not isinstance(rspec, RSpec): sfa_rspec = RSpec(rspec) else: sfa_rspec = rspec if not content_type or content_type not in \ ['ad', 'request', 'manifest']: content_type = sfa_rspec.version.content_type version_manager = VersionManager() pg_version = version_manager._get_version('protogeni', '2', 'request') pg_rspec = RSpec(version=pg_version) # get networks networks = sfa_rspec.version.get_networks() for network in networks: # get nodes sfa_node_elements = sfa_rspec.version.get_node_elements(network=network) for sfa_node_element in sfa_node_elements: # create node element node_attrs = {} node_attrs['exclusive'] = 'false' if 'component_manager_id' in sfa_node_element.attrib: node_attrs['component_manager_id'] = sfa_node_element.attrib['component_manager_id'] else: node_attrs['component_manager_id'] = hrn_to_urn(network, 'authority+cm') if 'component_id' in sfa_node_element.attrib: node_attrs['compoenent_id'] = sfa_node_element.attrib['component_id'] if sfa_node_element.find('hostname') != None: hostname = sfa_node_element.find('hostname').text node_attrs['component_name'] = hostname node_attrs['client_id'] = hostname node_element = pg_rspec.xml.add_element('node', node_attrs) if content_type == 'request': sliver_element = sfa_node_element.find('sliver') sliver_type_elements = sfa_node_element.xpath('./sliver_type', namespaces=sfa_rspec.namespaces) available_sliver_types = [element.attrib['name'] for element in sliver_type_elements] valid_sliver_types = ['emulab-openvz', 'raw-pc'] # determine sliver type requested_sliver_type = 'emulab-openvz' for available_sliver_type in available_sliver_types: if available_sliver_type in valid_sliver_types: requested_sliver_type = available_sliver_type if sliver_element != None: pg_rspec.xml.add_element('sliver_type', {'name': requested_sliver_type}, parent=node_element) else: # create node_type element for hw_type in ['plab-pc', 'pc']: hdware_type_element = pg_rspec.xml.add_element('hardware_type', {'name': hw_type}, parent=node_element) # create available element pg_rspec.xml.add_element('available', {'now': 'true'}, parent=node_element) # create locaiton element # We don't actually associate nodes with a country. # Set country to "unknown" until we figure out how to make # sure this value is always accurate. location = sfa_node_element.find('location') if location != None: location_attrs = {} location_attrs['country'] = location.get('country', 'unknown') location_attrs['latitude'] = location.get('latitude', 'None') location_attrs['longitude'] = location.get('longitude', 'None') pg_rspec.xml.add_element('location', location_attrs, parent=node_element) return pg_rspec.toxml()
class OcfVtAd(OcfVt): enabled = True content_type = 'ad' schema = '/opt/ofelia/vt_manager/src/python/vt_manager/communication/sfa/tests/vm_schema.xsd' #'http://www.protogeni.net/resources/rspec/2/ad.xsd' template = '<rspec type="advertisement" xmlns="http://www.protogeni.net/resources/rspec/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.protogeni.net/resources/rspec/2 http://www.protogeni.net/resources/rspec/2/ad.xsd /opt/ofelia/vt_manager/src/python/vt_manager/communication/sfa/tests/vm_schema.xsd"/>' class OcfVtRequest(OcfVt): enabled = True content_type = 'request' schema = '/opt/ofelia/vt_manager/src/python/vt_manager/communication/sfa/tests/vm_schema.xsd' #'http://www.protogeni.net/resources/rspec/2/ad.xsd' template = '<rspec type="advertisement" xmlns="http://www.protogeni.net/resources/rspec/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.protogeni.net/resources/rspec/2 http://www.protogeni.net/resources/rspec/2/ad.xsd /opt/ofelia/vt_manager/src/python/vt_manager/communication/sfa/tests/vm_schema.xsd"/>' #schema = 'http://www.protogeni.net/resources/rspec/2/request.xsd' #template = '<rspec type="request" xmlns="http://www.protogeni.net/resources/rspec/2" xmlns:flack="http://www.protogeni.net/resources/rspec/ext/flack/1" xmlns:plos="http://www.planet-lab.org/resources/sfa/ext/plos/1" xmlns:planetlab="http://www.planet-lab.org/resources/sfa/ext/planetlab/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.protogeni.net/resources/rspec/2 http://www.protogeni.net/resources/rspec/2/request.xsd http://www.planet-lab.org/resources/sfa/ext/planetlab/1 http://www.planet-lab.org/resources/sfa/ext/planetlab/1/planetlab.xsd http://www.planet-lab.org/resources/sfa/ext/plos/1 http://www.planet-lab.org/resources/sfa/ext/plos/1/plos.xsd"/>' class OcfVtManifest(OcfVt): enabled = True content_type = 'manifest' schema = 'http://www.protogeni.net/resources/rspec/2/manifest.xsd' template = '<rspec type="manifest" xmlns="http://www.protogeni.net/resources/rspec/2" xmlns:plos="http://www.planet-lab.org/resources/sfa/ext/plos/1" xmlns:flack="http://www.protogeni.net/resources/rspec/ext/flack/1" xmlns:planetlab="http://www.planet-lab.org/resources/sfa/ext/planetlab/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.protogeni.net/resources/rspec/2 http://www.protogeni.net/resources/rspec/2/manifest.xsd http://www.planet-lab.org/resources/sfa/ext/planetlab/1 http://www.planet-lab.org/resources/sfa/ext/planetlab/1/planetlab.xsd http://www.planet-lab.org/resources/sfa/ext/plos/1 http://www.planet-lab.org/resources/sfa/ext/plos/1/plos.xsd"/>' if __name__ == '__main__': from vt_manager.communication.sfa.rspecs.rspec import RSpec from vt_manager.communication.sfa.rspecs.rspec_elements import * r = RSpec('/tmp/ocf.rspec') r.load_rspec_elements(OcfVt.elements) print r.get(RSpecElements.NODE)