git://git.onelab.eu
/
sfa.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
2to3 -f print
[sfa.git]
/
sfa
/
rspecs
/
versions
/
pgv2.py
diff --git
a/sfa/rspecs/versions/pgv2.py
b/sfa/rspecs/versions/pgv2.py
index
f96b449
..
bdbae4a
100644
(file)
--- a/
sfa/rspecs/versions/pgv2.py
+++ b/
sfa/rspecs/versions/pgv2.py
@@
-1,11
+1,15
@@
+from __future__ import print_function
+
from copy import deepcopy
from StringIO import StringIO
from copy import deepcopy
from StringIO import StringIO
-from sfa.util.xrn import Xrn
, urn_to_sliver_id
+from sfa.util.xrn import Xrn
from sfa.rspecs.version import RSpecVersion
from sfa.rspecs.elements.versions.pgv2Link import PGv2Link
from sfa.rspecs.elements.versions.pgv2Node import PGv2Node
from sfa.rspecs.elements.versions.pgv2SliverType import PGv2SliverType
from sfa.rspecs.version import RSpecVersion
from sfa.rspecs.elements.versions.pgv2Link import PGv2Link
from sfa.rspecs.elements.versions.pgv2Node import PGv2Node
from sfa.rspecs.elements.versions.pgv2SliverType import PGv2SliverType
-
+from sfa.rspecs.elements.versions.pgv2Lease import PGv2Lease
+from sfa.util.sfalogging import logger
+
class PGv2(RSpecVersion):
type = 'ProtoGENI'
content_type = 'ad'
class PGv2(RSpecVersion):
type = 'ProtoGENI'
content_type = 'ad'
@@
-22,7
+26,8
@@
class PGv2(RSpecVersion):
# Networks
def get_networks(self):
network_names = set()
# Networks
def get_networks(self):
network_names = set()
- nodes = self.xml.xpath('//default:node[@component_manager_id] | //node[@component_manager_id]', namespaces=self.namespaces)
+ nodes = self.xml.xpath('//default:node[@component_manager_id] | //node[@component_manager_id]',
+ namespaces=self.namespaces)
for node in nodes:
if 'component_manager_id' in node.attrib:
network_urn = node.get('component_manager_id')
for node in nodes:
if 'component_manager_id' in node.attrib:
network_urn = node.get('component_manager_id')
@@
-44,8
+49,8
@@
class PGv2(RSpecVersion):
def get_nodes_with_slivers(self):
return PGv2Node.get_nodes_with_slivers(self.xml)
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
def merge_node(self, source_node_tag):
# this is untested
@@
-53,16
+58,18
@@
class PGv2(RSpecVersion):
# Slivers
# Slivers
- def get_sliver_attributes(self, hostname, network=None):
- nodes = self.get_nodes({'component_id': '*%s*' %hostname})
- attribs = []
- if nodes is not None and isinstance(nodes, list) and len(nodes) > 0:
+ def get_sliver_attributes(self, component_id, network=None):
+ nodes = self.get_nodes({'component_id': '*%s*' %component_id})
+ try:
node = nodes[0]
sliver = node.xpath('./default:sliver_type', namespaces=self.namespaces)
if sliver is not None and isinstance(sliver, list) and len(sliver) > 0:
sliver = sliver[0]
node = nodes[0]
sliver = node.xpath('./default:sliver_type', namespaces=self.namespaces)
if sliver is not None and isinstance(sliver, list) and len(sliver) > 0:
sliver = sliver[0]
- #attribs = self.attributes_list(sliver)
- return attribs
+ return self.attributes_list(sliver)
+ else:
+ return []
+ except:
+ return []
def get_slice_attributes(self, network=None):
slice_attributes = []
def get_slice_attributes(self, network=None):
slice_attributes = []
@@
-70,7
+77,7
@@
class PGv2(RSpecVersion):
# TODO: default sliver attributes in the PG rspec?
default_ns_prefix = self.namespaces['default']
for node in nodes_with_slivers:
# TODO: default sliver attributes in the PG rspec?
default_ns_prefix = self.namespaces['default']
for node in nodes_with_slivers:
- sliver_attributes = self.get_sliver_attributes(node, network)
+ sliver_attributes = self.get_sliver_attributes(node
['component_id']
, network)
for sliver_attribute in sliver_attributes:
name=str(sliver_attribute[0])
text =str(sliver_attribute[1])
for sliver_attribute in sliver_attributes:
name=str(sliver_attribute[0])
text =str(sliver_attribute[1])
@@
-102,7
+109,8
@@
class PGv2(RSpecVersion):
def add_default_sliver_attribute(self, name, value, network=None):
pass
def add_default_sliver_attribute(self, name, value, network=None):
pass
- def add_slivers(self, hostnames, attributes=[], sliver_urn=None, append=False):
+ def add_slivers(self, hostnames, attributes=None, sliver_urn=None, append=False):
+ if attributes is None: attributes=[]
# all nodes hould already be present in the rspec. Remove all
# nodes that done have slivers
for hostname in hostnames:
# all nodes hould already be present in the rspec. Remove all
# nodes that done have slivers
for hostname in hostnames:
@@
-143,7
+151,7
@@
class PGv2(RSpecVersion):
# set the sliver id
#slice_id = sliver_info.get('slice_id', -1)
#node_id = sliver_info.get('node_id', -1)
# set the sliver id
#slice_id = sliver_info.get('slice_id', -1)
#node_id = sliver_info.get('node_id', -1)
- #sliver_id =
urn_to_sliver_id(sliver_urn, slice_id, node_id
)
+ #sliver_id =
Xrn(xrn=sliver_urn, type='slice', id=str(node_id)).get_urn(
)
#node_elem.set('sliver_id', sliver_id)
# add the sliver type elemnt
#node_elem.set('sliver_id', sliver_id)
# add the sliver type elemnt
@@
-176,9
+184,17
@@
class PGv2(RSpecVersion):
# Leases
def get_leases(self, filter=None):
# Leases
def get_leases(self, filter=None):
- pass
+ return PGv2Lease.get_leases(self.xml, filter)
def add_leases(self, leases, network = None, no_dupes=False):
def add_leases(self, leases, network = None, no_dupes=False):
+ PGv2Lease.add_leases(self.xml, leases)
+
+ # Spectrum
+
+ def get_channels(self, filter=None):
+ return []
+
+ def add_channels(self, channels, network = None, no_dupes=False):
pass
# Utility
pass
# Utility
@@
-194,13
+210,20
@@
class PGv2(RSpecVersion):
nodes = in_rspec.version.get_nodes()
# protogeni rspecs need to advertise the availabel sliver types
nodes = in_rspec.version.get_nodes()
# protogeni rspecs need to advertise the availabel sliver types
+ main_nodes = []
for node in nodes:
for node in nodes:
+ if not node['component_name']:
+ # this node element is part of a lease
+ continue
if not node.has_key('sliver') or not node['sliver']:
node['sliver'] = {'name': 'plab-vserver'}
if not node.has_key('sliver') or not node['sliver']:
node['sliver'] = {'name': 'plab-vserver'}
-
- self.add_nodes(nodes)
+ main_nodes.append(node)
+ self.add_nodes(
main_
nodes)
self.add_links(in_rspec.version.get_links())
self.add_links(in_rspec.version.get_links())
+ # Leases
+ leases = in_rspec.version.get_leases()
+ self.add_leases(leases)
#
#rspec = RSpec(in_rspec)
#for child in rspec.xml.iterchildren():
#
#rspec = RSpec(in_rspec)
#for child in rspec.xml.iterchildren():
@@
-241,4
+264,4
@@
if __name__ == '__main__':
r = RSpec('/tmp/pg.rspec')
r.load_rspec_elements(PGv2.elements)
r.namespaces = PGv2.namespaces
r = RSpec('/tmp/pg.rspec')
r.load_rspec_elements(PGv2.elements)
r.namespaces = PGv2.namespaces
- print
r.get(RSpecElements.NODE
)
+ print
(r.get(RSpecElements.NODE)
)