if tt.multi:
tags = self.get_multi_tag(tt.tagname, node)
for tag in tags:
- xml << (tag.tagname, tag.value)
+ if not tag.deleted: ### Debugging
+ xml << (tag.tagname, tag.value)
else:
tag = self.get_tag(tt.tagname, node)
if tag:
- xml << (tag.tagname, tag.value)
+ if not tag.deleted: ### Debugging
+ xml << (tag.tagname, tag.value)
def toxml(self, xml):
with xml.sliver_defaults:
def __init__(self, tagtype):
self.id = tagtype['tag_type_id']
self.tagname = tagtype['tagname']
- if self.tagname in ['codemux', 'vsys']:
+ if self.tagname in ['codemux', 'ip_addresses', 'vsys']:
self.multi = True
else:
self.multi = False
try:
val = self.sites[id]
except:
- raise KeyError("site ID %s not found" % id)
+ raise InvalidRSpec("site ID %s not found" % id)
return val
def getSites(self):
try:
val = self.nodes[id]
except:
- raise KeyError("node ID %s not found" % id)
+ raise InvalidRSpec("node ID %s not found" % id)
return val
def getNodes(self):
try:
val = self.ifaces[id]
except:
- raise KeyError("interface ID %s not found" % id)
+ raise InvalidRSpec("interface ID %s not found" % id)
return val
def getIfaces(self):
try:
val = self.tags[id]
except:
- raise KeyError("slicetag ID %s not found" % id)
+ raise InvalidRSpec("slicetag ID %s not found" % id)
return val
def getSliceTags(self):
try:
val = self.tagstypes[name]
except:
- raise KeyError("tag %s not found" % name)
+ raise InvalidRSpec("tag %s not found" % name)
return val
def getTagTypes(self):
def __process_attributes(self, element, node=None):
# Do we need to check caller's role before update???
- tagtypes = self.GetTagTypes()
+ tagtypes = self.getTagTypes()
for tt in tagtypes:
if tt.multi:
for e in element.iterfind("./" + tt.tagname):
self.slice.update_multi_tag(tt.tagname, e.text, node)
else:
e = element.find("./" + tt.tagname)
- if e:
+ if e is not None:
self.slice.update_tag(tt.tagname, e.text, node)
"""
for node in self.getNodes():
nodedict[node.idtag] = node
- tree = etree.parse(StringIO(xml))
+ try:
+ tree = etree.parse(StringIO(xml))
+ except etree.XMLSyntaxError:
+ message = str(sys.exc_info()[1])
+ raise InvalidRSpec(message)
if schema:
# Validate the incoming request against the RelaxNG schema
def addSlice(self):
slice = self.slice
if not slice:
- raise Error("no slice associated with network")
+ raise InvalidRSpec("no slice associated with network")
for node in slice.get_nodes():
node.add_sliver()
if tag.slice_id == self.slice.id:
if not tag.updated:
tag.delete()
- #tag.write(self.api)
+ #tag.write(self.api) ### Debugging
"""
Produce XML directly from the topology specification.
"""
def get_sites(self, api):
tmp = []
- for site in api.plshell.GetSites(api.plauth):
+ for site in api.plshell.GetSites(api.plauth, {'peer_id': None}):
t = site['site_id'], Site(self, site)
tmp.append(t)
return dict(tmp)
"""
def get_nodes(self, api):
tmp = []
- for node in api.plshell.GetNodes(api.plauth):
+ for node in api.plshell.GetNodes(api.plauth, {'peer_id': None}):
t = node['node_id'], Node(self, node)
tmp.append(t)
return dict(tmp)
def get_tag_types(self, api):
tmp = []
for tag in api.plshell.GetTagTypes(api.plauth):
- t = tag['tagname'], TagType(tag)
- tmp.append(t)
+ if tag['category'] == 'slice/rspec':
+ t = tag['tagname'], TagType(tag)
+ tmp.append(t)
return dict(tmp)
"""