git://git.onelab.eu
/
sfa.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
8bc825a
)
Convert RSpec sliver attributes to slice tags
author
Andy Bavier
<acb@cs.princeton.edu>
Fri, 5 Feb 2010 18:01:41 +0000
(18:01 +0000)
committer
Andy Bavier
<acb@cs.princeton.edu>
Fri, 5 Feb 2010 18:01:41 +0000
(18:01 +0000)
sfa/plc/network.py
patch
|
blob
|
history
diff --git
a/sfa/plc/network.py
b/sfa/plc/network.py
index
a653e6e
..
7f92d73
100644
(file)
--- a/
sfa/plc/network.py
+++ b/
sfa/plc/network.py
@@
-123,7
+123,7
@@
class Slice:
"""
Use with tags that can have more than one instance
"""
"""
Use with tags that can have more than one instance
"""
- def get_
tags
(self, tagname, node = None):
+ def get_
multi_tag
(self, tagname, node = None):
tags = []
for i in self.slice_tag_ids:
tag = self.network.lookupSliceTag(i)
tags = []
for i in self.slice_tag_ids:
tag = self.network.lookupSliceTag(i)
@@
-157,7
+157,7
@@
class Slice:
else:
record['node_id'] = None
tag = Slicetag(record)
else:
record['node_id'] = None
tag = Slicetag(record)
- self.network.
slice
tags[tag.id] = tag
+ self.network.tags[tag.id] = tag
self.slice_tag_ids.append(tag.id)
tag.changed = True
tag.updated = True
self.slice_tag_ids.append(tag.id)
tag.changed = True
tag.updated = True
@@
-175,12
+175,22
@@
class Slice:
tag = self.add_tag(tagname, value, node)
tag.updated = True
tag = self.add_tag(tagname, value, node)
tag.updated = True
+ def update_multi_tag(self, tagname, value, node = None):
+ tags = self.get_multi_tag(tagname, node)
+ for tag in tags:
+ if tag and tag.value == value:
+ value = "no change"
+ break
+ else:
+ tag = self.add_tag(tagname, value, node)
+ tag.updated = True
+
def tags_to_xml(self, xml, node = None):
tag = self.get_tag("cpu_pct", node)
if tag:
with xml.cpu_percent:
xml << tag.value
def tags_to_xml(self, xml, node = None):
tag = self.get_tag("cpu_pct", node)
if tag:
with xml.cpu_percent:
xml << tag.value
- tags = self.get_
tags
("vsys", node)
+ tags = self.get_
multi_tag
("vsys", node)
for tag in tags:
with xml.vsys:
xml << tag.value
for tag in tags:
with xml.vsys:
xml << tag.value
@@
-311,10
+321,16
@@
class Network:
tags.append(self.tags[t])
return tags
tags.append(self.tags[t])
return tags
+
+ def __process_attributes(self, element, node=None):
+ for e in element.iterfind("./vsys"):
+ self.slice.update_multi_tag("vsys", e.text, node)
+
+
"""
Annotate the objects in the Network with information from the RSpec
"""
"""
Annotate the objects in the Network with information from the RSpec
"""
- def addRSpec(self, xml):
+ def addRSpec(self, xml
, schema=None
):
nodedict = {}
for node in self.getNodes():
nodedict[node.idtag] = node
nodedict = {}
for node in self.getNodes():
nodedict[node.idtag] = node
@@
-323,9
+339,9
@@
class Network:
tree = etree.parse(StringIO(xml))
tree = etree.parse(StringIO(xml))
- if s
elf.s
chema:
+ if schema:
# Validate the incoming request against the RelaxNG schema
# Validate the incoming request against the RelaxNG schema
- relaxng_doc = etree.parse(s
elf.s
chema)
+ relaxng_doc = etree.parse(schema)
relaxng = etree.RelaxNG(relaxng_doc)
if not relaxng(tree):
relaxng = etree.RelaxNG(relaxng_doc)
if not relaxng(tree):
@@
-335,18
+351,23
@@
class Network:
rspec = tree.getroot()
rspec = tree.getroot()
+ defaults = rspec.find("./network/sliver_defaults")
+ self.__process_attributes(defaults)
+
# Find slivers under node elements
for sliver in rspec.iterfind("./network/site/node/sliver"):
elem = sliver.getparent()
node = nodedict[elem.get("id")]
slicenodes[node.id] = node
node.add_sliver()
# Find slivers under node elements
for sliver in rspec.iterfind("./network/site/node/sliver"):
elem = sliver.getparent()
node = nodedict[elem.get("id")]
slicenodes[node.id] = node
node.add_sliver()
+ self.__process_attributes(sliver, node)
# Find slivers that specify nodeid
for sliver in rspec.iterfind("./request/sliver[@nodeid]"):
node = nodedict[sliver.get("nodeid")]
slicenodes[node.id] = node
node.add_sliver()
# Find slivers that specify nodeid
for sliver in rspec.iterfind("./request/sliver[@nodeid]"):
node = nodedict[sliver.get("nodeid")]
slicenodes[node.id] = node
node.add_sliver()
+ self.__process_attributes(sliver, node)
return
return
@@
-364,13
+385,13
@@
class Network:
"""
Write any slice tags that have been added or modified back to the DB
"""
"""
Write any slice tags that have been added or modified back to the DB
"""
- def updateSliceTags(self
, slice
):
+ def updateSliceTags(self):
# Update slice tags in database
for tag in self.getSliceTags():
# Update slice tags in database
for tag in self.getSliceTags():
- if tag.slice_id == slice.id:
- if
tag.tagname == 'topo_rspec' and
not tag.updated:
+ if tag.slice_id == s
elf.s
lice.id:
+ if not tag.updated:
tag.delete()
tag.delete()
- tag.write(self.api)
+
#
tag.write(self.api)
"""
Produce XML directly from the topology specification.
"""
Produce XML directly from the topology specification.