From: Tony Mack Date: Wed, 4 Feb 2009 05:39:05 +0000 (+0000) Subject: fix errors X-Git-Tag: sfa-0.9-0@14641~674 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=7191face3b2513c344937e809cb7a8abe1e68911;p=sfa.git fix errors --- diff --git a/geni/aggregate.py b/geni/aggregate.py index c74355f3..a04adf41 100644 --- a/geni/aggregate.py +++ b/geni/aggregate.py @@ -7,6 +7,7 @@ import xmlrpclib from geni.util.geniserver import GeniServer from geni.util.geniclient import * from geni.util.cert import Keypair, Certificate +from geni.util.credential import Credential from geni.util.trustedroot import TrustedRootList from geni.util.excep import * from geni.util.misc import * @@ -26,6 +27,9 @@ class Aggregate(GeniServer): threshold = None shell = None registry = None + key_file = None + cert_file = None + credential = None ## # Create a new aggregate object. @@ -40,28 +44,30 @@ class Aggregate(GeniServer): self.key_file = key_file self.cert_file = cert_file self.conf = Config(config) - basedir = self.conf.GENI_BASE_DIR + os.sep - server_basedir = basedir + os.sep + "geni" + os.sep + self.basedir = self.conf.GENI_BASE_DIR + os.sep + self.server_basedir = self.basedir + os.sep + "geni" + os.sep self.hrn = self.conf.GENI_INTERFACE_HRN - nodes_file = os.sep.join([server_basedir, 'agg.' + self.hrn + '.components']) + nodes_file = os.sep.join([self.server_basedir, 'agg.' + self.hrn + '.components']) self.nodes = SimpleStorage(nodes_file) self.nodes.load() - slices_file = os.sep.join([server_basedir, 'agg.' + self.hrn + '.slices']) + slices_file = os.sep.join([self.server_basedir, 'agg.' + self.hrn + '.slices']) self.slices = SimpleStorage(slices_file) self.slices.load() - policy_file = os.sep.join([server_basedir, 'agg.policy']) + policy_file = os.sep.join([self.server_basedir, 'agg.policy']) self.policy = SimpleStorage(policy_file) self.policy.load() - timestamp_file = os.sep.join([server_basedir, 'agg.' + self.hrn + '.timestamp']) + timestamp_file = os.sep.join([self.server_basedir, 'agg.' + self.hrn + '.timestamp']) self.timestamp = SimpleStorage(timestamp_file) self.nodes_ttl = 1 + self.connectPLC() self.connectRegistry() + self.loadCredential() def connectRegistry(self): """ @@ -71,7 +77,8 @@ class Aggregate(GeniServer): address = self.config.GENI_REGISTRY_HOSTNAME port = self.config.GENI_REGISTRY_PORT url = 'https://%(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) + def connectPLC(self): """ @@ -99,7 +106,32 @@ class Aggregate(GeniServer): 'AuthString': self.conf.GENI_PLC_PASSWORD} self.shell = xmlrpclib.Server(url, verbose = 0, allow_none = True) - self.shell.AuthCheck(self.auth) + self.shell.AuthCheck(self.auth) + + def loadCredential(self): + """ + 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 + try: + cred = Credential(filename = ma_cred_filename) + self.credential = cred.save_to_string() + 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) + + # get ma credential + ma_cred = self.registry.get_gredential(self_cred) + ma_credential = Credential(string = ma_cred) + ma_credential.save_to_file(ma_cred_filename) + self.credential = ma_cred def hostname_to_hrn(self, login_base, hostname): """ @@ -264,7 +296,7 @@ class Aggregate(GeniServer): # XX contact the registry to get the list of users on this slice and # their keys. - #slice_record = self.registry.resolve(slice_hrn) + slice_record = self.registry.resolve(self.credential, slice_hrn) #person_records = slice_record['users'] # for person in person_record: # email = person['email'] @@ -312,7 +344,7 @@ class Aggregate(GeniServer): 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(slice_hrn) + slice_record = self.registry.resolve(self.credential, slice_hrn) # persons = slice_record['users'] #for person in persons: diff --git a/geni/slicemgr.py b/geni/slicemgr.py index 9e6be186..ad35493b 100644 --- a/geni/slicemgr.py +++ b/geni/slicemgr.py @@ -6,6 +6,7 @@ import time from geni.util.geniserver import * from geni.util.geniclient import * from geni.util.cert import * +from geni.util.credential import Credential from geni.util.trustedroot import * from geni.util.excep import * from geni.util.misc import * @@ -17,8 +18,6 @@ from geni.util.storage import SimpleStorage class SliceMgr(GeniServer): hrn = None - key_file = None - cert_file = None nodes_ttl = None nodes = None slices = None @@ -28,7 +27,9 @@ class SliceMgr(GeniServer): threshold = None shell = None registry = None - + key_file = None + cert_file = None + credential = None ## # Create a new slice manager object. @@ -71,6 +72,33 @@ class SliceMgr(GeniServer): self.nodes_ttl = 1 self.connectAggregates() self.connectRegistry() + self.loadCredential() + + + def loadCredential(self): + """ + Attempt to load credential from file if it exists. If it doesnt get + credential from registry. + """ + + self_cred_filename = self.server_basedir + os.sep + "smgr." + self.hrn + ".cred" + ma_cred_filename = self.server_basedir + os.sep + "smgr." + self.hrn + ".sa.cred" + + # see if this file exists + try: + cred = Credential(filename = ma_cred_filename) + self.credential = cred.save_to_string() + 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) + + # get ma credential + ma_cred = self.registry.get_gredential(self_cred) + ma_credential = Credential(string = ma_cred) + ma_credential.save_to_file(ma_cred_filename) + self.credential = ma_cred def connect_aggregates(self, aggregates_file): """ @@ -190,7 +218,7 @@ class SliceMgr(GeniServer): def load_slices(self): """ - Read current slice instantiation states. + Read current slice instantiation states. """ print "loading slices" self.slices.load() @@ -220,8 +248,8 @@ class SliceMgr(GeniServer): """ Return the current rspec for the specified slice. """ + cred = self.credential - cred = None if slice_hrn in self.slices.keys(): # check if we alreay have this slices state saved rspec = self.slices[slice_hrn] @@ -262,7 +290,7 @@ class SliceMgr(GeniServer): Instantiate the specified slice according to whats defined in the rspec. """ # XX need to gget the correct credentials - cred = None + cred = self.credential # save slice state locally # we can assume that spec object has been validated so its safer to @@ -311,7 +339,7 @@ class SliceMgr(GeniServer): free up the resources it was using. """ # XX need to get the correct credential - cred = None + cred = self.credential if self.slices.has_key(slice_hrn): self.slices.pop(slice_hrn) @@ -326,8 +354,7 @@ class SliceMgr(GeniServer): """ Stop the slice at plc. """ - # XX need to get the correct credential - cred = None + cred = self.credential for hrn in self.aggregates.keys(): self.aggregates[hrn].startSlice(cred, slice_hrn) @@ -337,6 +364,7 @@ class SliceMgr(GeniServer): """ Stop the slice at plc """ + cred = self.credential for hrn in self.aggregates.keys(): self.aggregates[hrn].startSlice(cred, slice_hrn) return 1 @@ -375,7 +403,7 @@ class SliceMgr(GeniServer): def create(self, cred, hrn, rspec): self.decode_authentication(cred, 'embed') - self.verify_object_belongs_to_me(hrn, rspec) + self.verify_object_belongs_to_me(hrn) return self.create(hrn) def delete(self, cred, hrn): diff --git a/geni/util/rspec.py b/geni/util/rspec.py index 6a0fac47..7aaae856 100644 --- a/geni/util/rspec.py +++ b/geni/util/rspec.py @@ -159,7 +159,7 @@ class Rspec(): dicts.append(value) return dicts - def getDictByTagNameValue(self, tagname, value, dom = None) + def getDictByTagNameValue(self, tagname, value, dom = None): """ Search the dom for the first element with the specified tagname and value and return it as a dict. diff --git a/geni/util/storage.py b/geni/util/storage.py index ec220b6f..1fb2c9af 100644 --- a/geni/util/storage.py +++ b/geni/util/storage.py @@ -18,7 +18,7 @@ class SimpleStorage(dict): def write(self): db_file = open(self.db_filename, 'w') - db_file.write(str(self) + db_file.write(str(self)) db_file.close() def sync(self):