示例#1
0
文件: pgv2Node.py 项目: aquila/sfa
    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']
            node_elem = xml.add_instance('node', node, node_fields)
            node_elems.append(node_elem)
            # set component name
            if node.get('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'):
                for hardware_type in node.get('hardware_types', []): 
                    node_elem.add_instance('hardware_type', hardware_type, HardwareType.fields)
            # set location
            if node.get('location'):
                node_elem.add_instance('location', node['location'], Location.fields)       

            # set granularity
            if node.get('exclusive') == "true":
                granularity = node.get('granularity')
                node_elem.add_instance('granularity', granularity, granularity.fields)
            # set interfaces
            PGv2Interface.add_interfaces(node_elem, node.get('interfaces'))
            #if node.get('interfaces'):
            #    for interface in  node.get('interfaces', []):
            #        node_elem.add_instance('interface', interface, ['component_id', 'client_id'])
            # set available element
            if node.get('available'):
                available_elem = node_elem.add_element('available', now=node['available'])
            # add services
            PGv2Services.add_services(node_elem, node.get('services', [])) 
            # add slivers
            slivers = node.get('slivers', [])
            if not slivers:
                # we must still advertise the available sliver types
                if node.get('sliver_type'):
                    slivers = Sliver({'type': node['sliver_type']})
                else:
                # Planet lab
                    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)

            # advertise the node tags
            tags = node.get('tags', [])
            if tags:
               for tag in tags:
                    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
示例#2
0
文件: pgv2Node.py 项目: tubav/sfa
 def add_nodes(xml, nodes):
     node_elems = []
     for node in nodes:
         node_fields = ["component_manager_id", "component_id", "client_id", "sliver_id", "exclusive"]
         node_elem = xml.add_instance("node", node, node_fields)
         node_elems.append(node_elem)
         # set component name
         if node.get("component_id"):
             component_name = xrn_to_hostname(node["component_id"])
             node_elem.set("component_name", component_name)
         # set hardware types
         if node.get("hardware_types"):
             for hardware_type in node.get("hardware_types", []):
                 node_elem.add_instance("hardware_type", hardware_type, HardwareType.fields)
         # set location
         if node.get("location"):
             node_elem.add_instance("location", node["location"], Location.fields)
         # set interfaces
         PGv2Interface.add_interfaces(node_elem, node.get("interfaces"))
         # if node.get('interfaces'):
         #    for interface in  node.get('interfaces', []):
         #        node_elem.add_instance('interface', interface, ['component_id', 'client_id'])
         # set available element
         if node.get("boot_state"):
             if node.get("boot_state").lower() == "boot":
                 available_elem = node_elem.add_element("available", now="true")
             else:
                 available_elem = node_elem.add_element("available", now="false")
         # add services
         PGv2Services.add_services(node_elem, node.get("services", []))
         # add slivers
         slivers = node.get("slivers", [])
         if not slivers:
             # 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
示例#3
0
文件: pgv2Node.py 项目: gnogueras/sfa
    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'
            ]
            node_elem = xml.add_instance('node', node, node_fields)
            node_elems.append(node_elem)
            # set component name
            if node.get('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'):
                for hardware_type in node.get('hardware_types', []):
                    node_elem.add_instance('hardware_type', hardware_type,
                                           HardwareType.fields)
            # set location
            if node.get('location'):
                node_elem.add_instance('location', node['location'],
                                       Location.fields)

            # set granularity
            if node.get('exclusive') == "true":
                granularity = node.get('granularity')
                node_elem.add_instance('granularity', granularity,
                                       granularity.fields)
            # set interfaces
            PGv2Interface.add_interfaces(node_elem, node.get('interfaces'))
            #if node.get('interfaces'):
            #    for interface in  node.get('interfaces', []):
            #        node_elem.add_instance('interface', interface, ['component_id', 'client_id'])
            # set available element
            if node.get('available'):
                available_elem = node_elem.add_element('available',
                                                       now=node['available'])
            # add services
            PGv2Services.add_services(node_elem, node.get('services', []))
            # add slivers
            slivers = node.get('slivers', [])
            if not slivers:
                # we must still advertise the available sliver types
                if node.get('sliver_type'):
                    slivers = Sliver({'type': node['sliver_type']})
                else:
                    # Planet lab
                    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)

            # advertise the node tags
            tags = node.get('tags', [])
            if tags:
                for tag in tags:
                    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