X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fclient%2Fsfi.py;h=71a782504f571624906d80f82913fff491d72056;hb=f41065c922fce4048eb2491fb612482c191e2905;hp=ca579c90071aa5c8e413f2e1867d89f6e513e37a;hpb=c7237769c91abcb6f2f338ba0f1b67f02daceede;p=sfa.git diff --git a/sfa/client/sfi.py b/sfa/client/sfi.py index ca579c90..71a78250 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 @@ -81,7 +83,6 @@ def filter_records(type, records): def save_rspec_to_file(rspec, filename): if not filename.endswith(".rspec"): filename = filename + ".rspec" - f = open(filename, 'w') f.write(rspec) f.close() @@ -108,13 +109,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 @@ -220,7 +225,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) @@ -363,7 +369,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) @@ -682,10 +688,7 @@ class Sfi: for record in list: print "%s (%s)" % (record['hrn'], record['type']) if opts.file: - file = opts.file - if not file.startswith(os.sep): - file = os.path.join(self.options.sfi_dir, file) - save_records_to_file(file, list) + save_records_to_file(opts.file, list) return # show named registry record @@ -696,6 +699,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 @@ -715,10 +719,7 @@ class Sfi: else: print record.save_to_string() if opts.file: - file = opts.file - if not file.startswith(os.sep): - file = os.path.join(self.options.sfi_dir, file) - save_records_to_file(file, records) + save_records_to_file(opts.file, records) return def delegate(self, opts, args): @@ -931,14 +932,10 @@ class Sfi: if self.server_supports_call_id_arg(server): call_args.append(unique_call_id()) result = server.ListResources(*call_args) - format = opts.format if opts.file is None: - display_rspec(result, format) + display_rspec(result, opts.format) else: - file = opts.file - if not file.startswith(os.sep): - file = os.path.join(self.options.sfi_dir, file) - save_rspec_to_file(result, file) + save_rspec_to_file(result, opts.file) return # created named slice with given rspec @@ -971,6 +968,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'], @@ -995,8 +994,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 @@ -1183,6 +1185,7 @@ class Sfi: self.dispatch(command, cmd_opts, cmd_args) except KeyError: self.logger.critical ("Unknown command %s"%command) + raise sys.exit(1) return