From: Andy Bavier Date: Wed, 23 Feb 2011 22:01:06 +0000 (-0500) Subject: Merge branch 'master' of ssh://git.planet-lab.org/git/sfa X-Git-Tag: sfa-1.0-14~3 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=487d8d8af8977271edb60ee453c5969847b12848;hp=89760285c64c81ddb39751a5dc564937626a7c33;p=sfa.git Merge branch 'master' of ssh://git.planet-lab.org/git/sfa --- diff --git a/sfa/plc/network.py b/sfa/plc/network.py index ee043814..9650e4c9 100644 --- a/sfa/plc/network.py +++ b/sfa/plc/network.py @@ -9,7 +9,6 @@ from lxml import etree import sys from StringIO import StringIO - class Sliver: def __init__(self, node): self.node = node @@ -172,9 +171,9 @@ class Slice: return n # Add a new slice tag - def add_tag(self, tagname, value, node = None, role_id = 30): + def add_tag(self, tagname, value, node = None, role = "user"): tt = self.network.lookupTagType(tagname) - if not tt.permit_update(role_id): + if not tt.permit_update(role): raise InvalidRSpec("permission denied to modify '%s' tag" % tagname) tag = Slicetag() tag.initialize(tagname, value, node, self.network) @@ -183,23 +182,24 @@ class Slice: return tag # Update a slice tag if it exists, else add it - def update_tag(self, tagname, value, node = None, role_id = 30): + def update_tag(self, tagname, value, node = None, role = "user"): + 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: - if not tag.permit_update(role_id, value): - raise InvalidRSpec("permission denied to modify '%s' tag" % tagname) tag.change(value) else: - tag = self.add_tag(tagname, value, node, role_id) + tag = self.add_tag(tagname, value, node, role) return tag - def update_multi_tag(self, tagname, value, node = None, role_id = 30): + def update_multi_tag(self, tagname, value, node = None, role = "user"): tags = self.get_multi_tag(tagname, node) for tag in tags: if tag and tag.value == value: break else: - tag = self.add_tag(tagname, value, node, role_id) + tag = self.add_tag(tagname, value, node, role) return tag def tags_to_xml(self, xml, node = None): @@ -224,7 +224,6 @@ class Slice: class Slicetag: newid = -1 -# filter_fields = ['slice_tag_id','slice_id','tagname','value','node_id','category','min_role_id'] filter_fields = ['slice_tag_id','slice_id','tagname','value','node_id','category'] ignore_tags = ['hmac','ssh_key'] def __init__(self, tag = None): @@ -236,7 +235,6 @@ class Slicetag: self.value = tag['value'] self.node_id = tag['node_id'] self.category = tag['category'] -# self.min_role_id = tag['min_role_id'] self.status = None # Create a new slicetag that will be written to the DB later @@ -252,17 +250,8 @@ class Slicetag: else: self.node_id = None self.category = tt.category -# self.min_role_id = tt.min_role_id self.status = "new" - def permit_update(self, role_id, value = None): - if value and self.value == value: - return True - # xxx FIXME - the new model in PLCAPI has roles and not min_role_id - #if role_id > self.min_role_id: - # return False - return False - def change(self, value): if self.value != value: self.value = value @@ -302,7 +291,7 @@ class TagType: self.id = tagtype['tag_type_id'] self.category = tagtype['category'] self.tagname = tagtype['tagname'] -# self.min_role_id = tagtype['min_role_id'] + self.roles = tagtype['roles'] self.multi = False self.in_rspec = False if self.category == 'slice/rspec': @@ -310,10 +299,9 @@ class TagType: if self.tagname in ['codemux', 'ip_addresses', 'vsys']: self.multi = True - def permit_update(self, role_id): - # XXX FIXME ditto - #if role_id > self.min_role_id: - # return False + def permit_update(self, role): + if role in self.roles: + return True return False @@ -527,9 +515,10 @@ class Network: Write any slice tags that have been added or modified back to the DB """ for tag in self.getSliceTags(): - if tag.category == 'slice/rspec' and not tag.was_updated() and tag.permit_update(None, 30): - # The user wants to delete this tag - tag.delete() + if tag.category == 'slice/rspec' and not tag.was_updated(): + tt = self.lookupTagType(tag.tagname) + if tt.permit_update("user"): + tag.delete() # Update slice tags in database for tag in self.getSliceTags():