X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fclient%2Fsfi.py;h=3aaae801d55605b78df9dc5982879e152ae9b77d;hb=a25070387782e1ea97b6cc28f8ed99da77d96c4e;hp=9cf7d0b4d05707ec54407d2e11fdabb817c24a0d;hpb=d9595e3c83fc48fc3587419800773e2ccb59cbe1;p=sfa.git diff --git a/sfa/client/sfi.py b/sfa/client/sfi.py index 9cf7d0b4..3aaae801 100755 --- a/sfa/client/sfi.py +++ b/sfa/client/sfi.py @@ -83,20 +83,37 @@ 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() return -def save_records_to_file(filename, recordList): - index = 0 - for record in recordList: - if index > 0: - save_record_to_file(filename + "." + str(index), record) - else: - save_record_to_file(filename, record) - index = index + 1 +def save_records_to_file(filename, recordList, format="xml"): + if format == "xml": + index = 0 + for record in recordList: + if index > 0: + save_record_to_file(filename + "." + str(index), record) + else: + save_record_to_file(filename, record) + index = index + 1 + elif format == "xmllist": + f = open(filename, "w") + f.write("\n") + for record in recordList: + record = SfaRecord(dict=record) + f.write('\n') + f.write("\n"); + f.close() + elif format == "hrnlist": + f = open(filename, "w") + for record in recordList: + record = SfaRecord(dict=record) + f.write(record.get_name() + "\n") + f.close() + else: + # this should never happen + print "unknown output format", format def save_record_to_file(filename, record): if record['type'] in ['user']: @@ -226,15 +243,20 @@ 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) - + if command in ("show", "list"): parser.add_option("-f", "--format", dest="format", type="choice", help="display format ([text]|xml)", default="text", choices=("text", "xml")) + parser.add_option("-F", "--fileformat", dest="fileformat", type="choice", + help="output file format ([xml]|xmllist|hrnlist)", default="xml", + choices=("xml", "xmllist", "hrnlist")) + if command in ("delegate"): parser.add_option("-u", "--user", action="store_true", dest="delegate_user", default=False, @@ -681,17 +703,14 @@ class Sfi: list = self.registry.List(hrn, user_cred) except IndexError: raise Exception, "Not enough parameters for the 'list' command" - - # filter on person, slice, site, node, etc. + + # filter on person, slice, site, node, etc. # THis really should be in the self.filter_records funct def comment... list = filter_records(opts.type, list) for record in list: - print "%s (%s)" % (record['hrn'], record['type']) + 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, opts.fileformat) return # show named registry record @@ -721,10 +740,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, opts.fileformat) return def delegate(self, opts, args): @@ -937,14 +953,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,12 +983,14 @@ class Sfi: all_keys = [] all_key_ids = [] slice_records = self.registry.Resolve(slice_urn, [user_cred.save_to_string(save_parents=True)]) - if slice_records and 'researcher' in slice_records[0]: + if slice_records and 'researcher' in slice_records[0] and slice_records[0]['researcher']!=[]: slice_record = slice_records[0] user_hrns = slice_record['researcher'] 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'], @@ -1001,8 +1015,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 @@ -1189,6 +1206,7 @@ class Sfi: self.dispatch(command, cmd_opts, cmd_args) except KeyError: self.logger.critical ("Unknown command %s"%command) + raise sys.exit(1) return