Merge branch 'master' of ssh://git.planet-lab.org/git/sfa
[sfa.git] / sfa / plc / network.py
index 4293301..41bae48 100644 (file)
@@ -1,7 +1,8 @@
 from __future__ import with_statement
 import re
 import socket
-from sfa.util.namespace import get_authority, hrn_to_pl_slicename
+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
@@ -49,6 +50,9 @@ class Node:
         self.iface_ids = node['interface_ids']
         self.sliver = None
         self.whitelist = node['slice_ids_whitelist']
+        auth = self.network.api.hrn
+        login_base = self.get_site().idtag
+        self.urn = hostname_to_urn(auth, login_base, self.hostname)
 
     def get_primary_iface(self):
         for id in self.iface_ids:
@@ -72,6 +76,8 @@ class Node:
         with xml.node(id = self.idtag):
             with xml.hostname:
                 xml << self.hostname
+            with xml.urn:
+                xml << self.urn
             iface = self.get_primary_iface()
             if iface:
                 iface.toxml(xml)
@@ -83,11 +89,11 @@ class Site:
     def __init__(self, network, site):
         self.network = network
         self.id = site['site_id']
-        self.idtag = "s%s" % self.id
         self.node_ids = site['node_ids']
         self.node_ids.sort()
         self.name = site['abbreviated_name']
         self.tag = site['login_base']
+        self.idtag = site['login_base']
         self.public = site['is_public']
         self.enabled = site['enabled']
         self.links = set()
@@ -160,7 +166,7 @@ class Slice:
         return n
 
     # Add a new slice tag   
-    def add_tag(self, tagname, value, node = None, role_id = 40):
+    def add_tag(self, tagname, value, node = None, role_id = 30):
         tt = self.network.lookupTagType(tagname)
         if not tt.permit_update(role_id):
             raise InvalidRSpec("permission denied to modify '%s' tag" % tagname)
@@ -171,7 +177,7 @@ class Slice:
         return tag
     
     # Update a slice tag if it exists, else add it             
-    def update_tag(self, tagname, value, node = None, role_id = 40):
+    def update_tag(self, tagname, value, node = None, role_id = 30):
         tag = self.get_tag(tagname, node)
         if tag:
             if not tag.permit_update(role_id, value):
@@ -181,7 +187,7 @@ class Slice:
             tag = self.add_tag(tagname, value, node, role_id)
         return tag
             
-    def update_multi_tag(self, tagname, value, node = None, role_id = 40):
+    def update_multi_tag(self, tagname, value, node = None, role_id = 30):
         tags = self.get_multi_tag(tagname, node)
         for tag in tags:
             if tag and tag.value == value:
@@ -212,7 +218,8 @@ 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','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):
         if not tag:
@@ -223,7 +230,7 @@ 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.min_role_id = tag['min_role_id']
         self.status = None
 
     # Create a new slicetag that will be written to the DB later
@@ -239,15 +246,16 @@ class Slicetag:
         else:
             self.node_id = None
         self.category = tt.category
-        self.min_role_id = tt.min_role_id
+#        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
-        if role_id > self.min_role_id:
-            return False
-        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:
@@ -288,7 +296,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.min_role_id = tagtype['min_role_id']
         self.multi = False
         self.in_rspec = False
         if self.category == 'slice/rspec':
@@ -297,9 +305,10 @@ class TagType:
             self.multi = True
 
     def permit_update(self, role_id):
-        if role_id > self.min_role_id:
-            return False
-        return True
+        # XXX FIXME ditto
+        #if role_id > self.min_role_id:
+        #    return False
+        return False
         
 
 class Network:
@@ -499,7 +508,7 @@ 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, 40):
+            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()