X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fclient%2Fsfi.py;h=63883482012c2cdf4dbe03f92771a88645d7fdae;hb=da3bb9a7ec03ca5879878c056f6d1abf26ccc303;hp=764ce18c4ec80cc9b834151a833d10022c3c96cd;hpb=f3452433e15c17e92f54aded248ba667602f5ead;p=sfa.git diff --git a/sfa/client/sfi.py b/sfa/client/sfi.py index 764ce18c..63883482 100755 --- a/sfa/client/sfi.py +++ b/sfa/client/sfi.py @@ -11,10 +11,12 @@ import socket import random import datetime import zlib +import codecs from lxml import etree from StringIO import StringIO from types import StringTypes, ListType from optparse import OptionParser + from sfa.util.sfalogging import sfi_logger from sfa.trust.certificate import Keypair, Certificate from sfa.trust.gid import GID @@ -108,13 +110,17 @@ def save_record_to_file(filename, record): else: record = SfaRecord(dict=record) str = record.save_to_string() - file(filename, "w").write(str) + f=codecs.open(filename, encoding='utf-8',mode="w") + f.write(str) + f.close() return # load methods def load_record_from_file(filename): - str = file(filename, "r").read() + f=codecs.open(filename, encoding="utf-8", mode="r") + str = f.read() + f.close() record = SfaRecord(string=str) return record @@ -136,6 +142,8 @@ class Sfi: for opt in Sfi.required_options: if not hasattr(options,opt): setattr(options,opt,None) if not hasattr(options,'sfi_dir'): options.sfi_dir=os.path.expanduser("~/.sfi/") + # xxx oops, this is dangerous, sounds like ww sometimes have discrepency + # would be safer to remove self.sfi_dir altogether self.sfi_dir = options.sfi_dir self.options = options self.slicemgr = None @@ -218,7 +226,8 @@ class Sfi: help="optional component information", default=None) - if command in ("resources", "show", "list", "create_gid"): + # 'create' does return the new rspec, makes sense to save that too + if command in ("resources", "show", "list", "create_gid", 'create'): parser.add_option("-o", "--output", dest="file", help="output XML to file", metavar="FILE", default=None) @@ -284,7 +293,7 @@ class Sfi: def read_config(self): - config_file = self.options.sfi_dir + os.sep + "sfi_config" + config_file = os.path.join(self.options.sfi_dir,"sfi_config") try: config = Config (config_file) except: @@ -361,7 +370,7 @@ class Sfi: # check local cache first cache = None version = None - cache_file = self.sfi_dir + os.path.sep + 'sfi_cache.dat' + cache_file = os.path.join(self.options.sfi_dir,'sfi_cache.dat') cache_key = server.url + "-version" try: cache = Cache(cache_file) @@ -694,6 +703,7 @@ class Sfi: hrn = args[0] user_cred = self.get_user_cred().save_to_string(save_parents=True) records = self.registry.Resolve(hrn, user_cred) + print records records = filter_records(opts.type, records) if not records: print "No record of type", opts.type @@ -969,6 +979,8 @@ class Sfi: user_urns = [hrn_to_urn(hrn, 'user') for hrn in user_hrns] user_records = self.registry.Resolve(user_urns, [user_cred.save_to_string(save_parents=True)]) for user_record in user_records: + if user_record['type'] != 'user': + continue #user = {'urn': user_cred.get_gid_caller().get_urn(),'keys': []} user = {'urn': user_cred.get_gid_caller().get_urn(), # 'keys': user_record['keys'], @@ -993,8 +1005,11 @@ class Sfi: if self.server_supports_call_id_arg(server): call_args.append(unique_call_id()) - result = server.CreateSliver(*call_args) - print result + result = server.CreateSliver(*call_args) + if opts.file is None: + print result + else: + save_rspec_to_file (result, opts.file) return result # get a ticket for the specified slice @@ -1181,6 +1196,7 @@ class Sfi: self.dispatch(command, cmd_opts, cmd_args) except KeyError: self.logger.critical ("Unknown command %s"%command) + raise sys.exit(1) return