from __future__ import with_statement
+import sys
import re
import socket
+from StringIO import StringIO
+from lxml import etree
+from xmlbuilder import XMLBuilder
+
+from sfa.util.faults import *
+#from sfa.util.sfalogging import sfa_logger
from sfa.util.xrn import get_authority
from sfa.util.plxrn import hrn_to_pl_slicename, hostname_to_urn
-from sfa.util.faults import *
-from xmlbuilder import XMLBuilder
-from lxml import etree
-import sys
-from StringIO import StringIO
class Sliver:
def __init__(self, node):
Use with tags that have only one instance
"""
def get_tag(self, tagname, node = None):
- try:
- for i in self.slice_tag_ids:
+ for i in self.slice_tag_ids:
+ try:
tag = self.network.lookupSliceTag(i)
if tag.tagname == tagname:
if node:
return tag
elif not tag.node_id:
return tag
- except InvalidRSpec, e:
- # As they're not needed, we ignore some tag types from
- # GetSliceTags call. See Slicetag.ignore_tags
- pass
+ except InvalidRSpec, e:
+ # As they're not needed, we ignore some tag types from
+ # GetSliceTags call. See Slicetag.ignore_tags
+ pass
return None
def get_nodes(self):
# Update a slice tag if it exists, else add it
def update_tag(self, tagname, value, node = None, role = "user"):
+ tag = self.get_tag(tagname, node)
+ if tag and tag.value == value:
+ return tag
+
tt = self.network.lookupTagType(tagname)
if not tt.permit_update(role):
raise InvalidRSpec("permission denied to modify '%s' tag" % tagname)
- tag = self.get_tag(tagname, node)
+
if tag:
tag.change(value)
else:
try:
val = self.sites[id]
except:
+ self.api.logger.error("Invalid RSpec: site ID %s not found" % id )
raise InvalidRSpec("site ID %s not found" % id)
return val
if not relaxng(tree):
error = relaxng.error_log.last_error
message = "%s (line %s)" % (error.message, error.line)
+ self.api.logger.error("failed to validate rspec %r"%message)
+ self.api.logger.debug("---------- XML input BEG")
+ self.api.logger.debug(xml)
+ self.api.logger.debug("---------- XML input END")
raise InvalidRSpec(message)
self.rspec = rspec
"""
tmp = []
for node in api.plshell.GetNodes(api.plauth, {'peer_id': None}):
- t = node['node_id'], Node(self, node)
- tmp.append(t)
+ try:
+ t = node['node_id'], Node(self, node)
+ tmp.append(t)
+ except:
+ self.api.logger.error("Failed to add node %s (%s) to RSpec" % (node['hostname'], node['node_id']))
+
return dict(tmp)
def get_ifaces(self, api):