added getCredentialFromReistry() method
authorTony Mack <tmack@cs.princeton.edu>
Fri, 13 Mar 2009 23:51:47 +0000 (23:51 +0000)
committerTony Mack <tmack@cs.princeton.edu>
Fri, 13 Mar 2009 23:51:47 +0000 (23:51 +0000)
geni/aggregate.py

index d8a4622..343f1eb 100644 (file)
@@ -68,8 +68,8 @@ class Aggregate(GeniServer):
         self.nodes_ttl = 1
 
         self.connectPLC()
         self.nodes_ttl = 1
 
         self.connectPLC()
-        #self.connectRegistry()
-        #self.loadCredential()
+        self.connectRegistry()
+        self.loadCredential()
 
     def connectRegistry(self):
         """
 
     def connectRegistry(self):
         """
@@ -78,7 +78,7 @@ class Aggregate(GeniServer):
         # connect to registry using GeniClient
         address = self.config.GENI_REGISTRY_HOSTNAME
         port = self.config.GENI_REGISTRY_PORT
         # connect to registry using GeniClient
         address = self.config.GENI_REGISTRY_HOSTNAME
         port = self.config.GENI_REGISTRY_PORT
-        url = 'https://%(address)s:%(port)s' % locals()
+        url = 'http://%(address)s:%(port)s' % locals()
         self.registry = GeniClient(url, self.key_file, self.cert_file)
 
     
         self.registry = GeniClient(url, self.key_file, self.cert_file)
 
     
@@ -115,25 +115,29 @@ class Aggregate(GeniServer):
         Attempt to load credential from file if it exists. If it doesnt get 
         credential from registry.
         """ 
         Attempt to load credential from file if it exists. If it doesnt get 
         credential from registry.
         """ 
-
-        self_cred_filename = self.server_basedir + os.sep + "agg." + self.hrn + ".cred"
-        ma_cred_filename = self.server_basedir + os.sep + "agg." + self.hrn + ".ma.cred"
         
         # see if this file exists
         
         # see if this file exists
+        ma_cred_filename = self.server_basedir + os.sep + "agg." + self.hrn + ".ma.cred"
         try:
         try:
-            cred = Credential(filename = ma_cred_filename, subject=self.hrn)
-            self.credential = cred.save_to_string()
+            self.credential = Credential(filename = ma_cred_filename)
         except IOError:
             # get self credential
         except IOError:
             # get self credential
-            self_cred = self.registry.get_credential(None, 'ma', self.hrn)
-            self_credential = Credential(string = self_cred)
-            self_credential.save_to_file(self_cred_filename)
+            self.credential = self.getCredentialFromRegistry()
+
+    def getCredentialFromRegistry(self):
+        """
+        Get our current credential from the registry
+        """
+        # get self credential
+        self_cred_filename = self.server_basedir + os.sep + "agg." + self.hrn + ".cred"
+        self_cred = self.registry.get_credential(None, 'ma', self.hrn)
+        self_cred.save_to_file(self_cred_filename, save_parents = True)
 
 
-            # get ma credential
-            ma_cred = self.registry.get_credential(self_cred)
-            ma_credential = Credential(string = ma_cred)
-            ma_credential.save_to_file(ma_cred_filename)
-            self.credential = ma_cred
+        # get ma credential
+        ma_cred_filename = self.server_basedir + os.sep + "agg." + self.hrn + ".ma.cred"
+        ma_cred = self.registry.get_credential(self_cred, 'ma', self.hrn)
+        ma_cred.save_to_file(ma_cred_filename, save_parents=True)
+        return ma_cred
 
     def hostname_to_hrn(self, login_base, hostname):
         """
 
     def hostname_to_hrn(self, login_base, hostname):
         """
@@ -343,11 +347,36 @@ class Aggregate(GeniServer):
         self.slices.write()
         
         # Get slice info
         self.slices.write()
         
         # Get slice info
+        # if slice doesnt exist add it
         slicename = hrn_to_pl_slicename(slice_hrn)
         slices = self.shell.GetSlices(self.auth, [slicename], ['node_ids'])
         if not slices:
         slicename = hrn_to_pl_slicename(slice_hrn)
         slices = self.shell.GetSlices(self.auth, [slicename], ['node_ids'])
         if not slices:
-            raise RecordNotFound(slice_hrn)
-        slice = slices[0]
+            parts = slicename.split("_")
+            login_base = parts[0]
+            slice_record = self.registry.resolve(self.cred, slice_hrn)
+            slice_info = slice_record.as_dict()
+            slice = slice_info['pl_info']
+            
+            # if site doesnt exist add it
+            sites = self.shell.GetSites(self.auth, [login_base])
+            if not sites:
+                authority = get_authority(slice_hrn)
+                site_record = self.registry.reolve(self.cred, authority) 
+                site_info = site_record.as_dict()
+                site = site_info['pl_info']
+
+                # add the site
+                site.pop('site_id')
+                site_id = self.shell.AddSite(self.auth, site)
+
+            # add the slice
+            self.shell.AddSlice(self.auth, slice_info)
+            
+            # add the slice users
+            
+        else:    
+            slice = slices[0]
+
 
         # find out where this slice is currently running
         nodelist = self.shell.GetNodes(self.auth, slice['node_ids'], ['hostname'])
 
         # find out where this slice is currently running
         nodelist = self.shell.GetNodes(self.auth, slice['node_ids'], ['hostname'])
@@ -376,10 +405,6 @@ class Aggregate(GeniServer):
         self.shell.AddSliceToNodes(self.auth, slicename, added_nodes)
         self.shell.DeleteSliceFromNodes(self.auth, slicename, deleted_nodes)
 
         self.shell.AddSliceToNodes(self.auth, slicename, added_nodes)
         self.shell.DeleteSliceFromNodes(self.auth, slicename, deleted_nodes)
 
-        for attribute in attributes:
-            type, value, node, nodegroup = attribute['type'], attribute['value'], attribute['node'], attribute['nodegroup']
-            self.shell.AddSliceAttribute(self.auth, slicename, type, value, node, nodegroup)
-    
         # contact registry to get slice users and add them to the slice
         #slice_record = self.registry.resolve(self.credential, slice_hrn)
         # persons = slice_record['users']
         # contact registry to get slice users and add them to the slice
         #slice_record = self.registry.resolve(self.credential, slice_hrn)
         # persons = slice_record['users']