X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fclient%2Fsfi.py;h=ec34f45f1d5188922a016ee6f71feb745afc9355;hb=6f0a757c5adf47b4d222cec09514dcd688b93457;hp=6f2d5b71948a5634ed01cd8fc16fa9634d7d98f8;hpb=108f6d000af6517d3b22501255b377a83568b946;p=sfa.git diff --git a/sfa/client/sfi.py b/sfa/client/sfi.py index 6f2d5b71..ec34f45f 100644 --- a/sfa/client/sfi.py +++ b/sfa/client/sfi.py @@ -28,8 +28,8 @@ from sfa.util.config import Config from sfa.util.version import version_core from sfa.util.cache import Cache -#from sfa.storage.record import SfaRecord, UserRecord, SliceRecord, NodeRecord, AuthorityRecord -from sfa.storage.persistentobjs import RegRecord +from sfa.storage.persistentobjs import RegRecord, RegAuthority, RegUser, RegSlice, RegNode +from sfa.storage.persistentobjs import make_record from sfa.rspecs.rspec import RSpec from sfa.rspecs.rspec_converter import RSpecConverter @@ -107,48 +107,35 @@ def save_rspec_to_file(rspec, filename): f.close() return -def save_records_to_file(filename, recordList, format="xml"): +def save_records_to_file(filename, record_dicts, format="xml"): if format == "xml": index = 0 - for record in recordList: + for record_dict in record_dicts: if index > 0: - save_record_to_file(filename + "." + str(index), record) + save_record_to_file(filename + "." + str(index), record_dict) else: - save_record_to_file(filename, record) + save_record_to_file(filename, record_dict) index = index + 1 elif format == "xmllist": f = open(filename, "w") f.write("\n") - for record in recordList: - record_obj=RegRecord (dict=record) - f.write('\n') + for record_dict in record_dicts: + record_obj=make_record (dict=record_dict) + f.write('\n') f.write("\n") f.close() elif format == "hrnlist": f = open(filename, "w") - for record in recordList: - record_obj=RegRecord (dict=record) - f.write(record.hrn + "\n") + for record_dict in record_dicts: + record_obj=make_record (dict=record_dict) + f.write(record_obj.hrn + "\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']: - # UserRecord - record = RegRecord(dict=record) - elif record['type'] in ['slice']: - # SliceRecord - record = RegRecord(dict=record) - elif record['type'] in ['node']: - # NodeRecord - record = RegRecord(dict=record) - elif record['type'] in ['authority', 'ma', 'sa']: - # AuthorityRecord - record = RegRecord(dict=record) - else: - record = RegRecord(dict=record) +def save_record_to_file(filename, record_dict): + rec_record = make_record (dict=record_dict) str = record.save_to_string() f=codecs.open(filename, encoding='utf-8',mode="w") f.write(str) @@ -159,11 +146,9 @@ def save_record_to_file(filename, record): # load methods def load_record_from_file(filename): f=codecs.open(filename, encoding="utf-8", mode="r") - str = f.read() + xml_string = f.read() f.close() - record = RegRecord() - record.load_from_xml(str) - return record + return make_record (xml=xml_string) import uuid @@ -338,6 +323,8 @@ class Sfi: help="root registry", metavar="URL", default=None) parser.add_option("-s", "--sliceapi", dest="sm", default=None, metavar="URL", help="slice API - in general a SM URL, but can be used to talk to an aggregate") + parser.add_option("-R", "--raw", dest="raw", action="store_true", default=False, + help="Display raw, unparsed server response") parser.add_option("-d", "--dir", dest="sfi_dir", help="config & working directory - default is %default", metavar="PATH", default=Sfi.default_sfi_dir()) @@ -714,32 +701,16 @@ or version information about sfi itself self.print_help() sys.exit(1) hrn = args[0] - records = self.registry().Resolve(hrn, self.my_credential_string) - records = filter_records(options.type, records) - if not records: + record_dicts = self.registry().Resolve(hrn, self.my_credential_string) + record_dicts = filter_records(options.type, record_dicts) + if not record_dicts: self.logger.error("No record of type %s"% options.type) + records = [ make_record (dict=record_dict) for record_dict in record_dicts ] for record in records: - if record['type'] in ['user']: - # UserRecord - record = RegRecord(dict=record) - elif record['type'] in ['slice']: - # SliceRecord - record = RegRecord(dict=record) - elif record['type'] in ['node']: - # NodeRecord - record = RegRecord(dict=record) - elif record['type'].startswith('authority'): - # AuthorityRecord - record = RegRecord(dict=record) - else: - record = RegRecord(dict=record) - - if (options.format == "text"): - record.dump() - else: - print record.save_as_xml() + if (options.format == "text"): record.dump() + else: print record.save_as_xml() if options.file: - save_records_to_file(options.file, records, options.fileformat) + save_records_to_file(options.file, record_dicts, options.fileformat) return def add(self, options, args): @@ -760,14 +731,14 @@ or version information about sfi itself sys.exit(1) rec_file = self.get_record_file(args[0]) record = load_record_from_file(rec_file) - if record['type'] == "user": - if record.get_name() == self.user: + if record.type == "user": + if record.hrn == self.user: cred = self.my_credential_string else: cred = self.my_authority_credential_string() - elif record['type'] in ["slice"]: + elif record.type in ["slice"]: try: - cred = self.slice_credential_string(record.get_name()) + cred = self.slice_credential_string(record.hrn) except ServerException, e: # XXX smbaker -- once we have better error return codes, update this # to do something better than a string compare @@ -775,14 +746,14 @@ or version information about sfi itself cred = self.my_authority_credential_string() else: raise - elif record.get_type() in ["authority"]: + elif record.type in ["authority"]: cred = self.my_authority_credential_string() - elif record.get_type() == 'node': + elif record.type == 'node': cred = self.my_authority_credential_string() else: - raise "unknown record type" + record.get_type() - record = record.as_dict() - return self.registry().Update(record, cred) + raise "unknown record type" + record.type + record_dict = record.todict() + return self.registry().Update(record_dict, cred) def remove(self, options, args): "remove registry record by name (Remove)" @@ -813,7 +784,10 @@ or version information about sfi itself api_options['call_id']=unique_call_id() result = server.ListSlices(creds, *self.ois(server,api_options)) value = ReturnValue.get_value(result) - display_list(value) + if self.options.raw: + print result + else: + display_list(value) return # show rspec for named slice @@ -863,7 +837,10 @@ or with an slice hrn, shows currently provisioned resources result = server.ListResources (creds, api_options) value = ReturnValue.get_value(result) if options.file is None: - display_rspec(value, options.format) + if self.options.raw: + print result + else: + display_rspec(value, options.format) else: save_rspec_to_file(value, options.file) return @@ -930,7 +907,10 @@ or with an slice hrn, shows currently provisioned resources result = server.CreateSliver(slice_urn, creds, rspec, users, *self.ois(server, api_options)) value = ReturnValue.get_value(result) if options.file is None: - print value + if self.options.raw: + print result + else: + print value else: save_rspec_to_file (value, options.file) return value @@ -956,8 +936,12 @@ or with an slice hrn, shows currently provisioned resources api_options = {} api_options ['call_id'] = unique_call_id() result = server.DeleteSliver(slice_urn, creds, *self.ois(server, api_options ) ) - # xxx no ReturnValue ?? - return result + value = ReturnValue.get_value(result) + if self.options.raw: + print result + else: + print value + return value def status(self, options, args): """ @@ -978,10 +962,13 @@ or with an slice hrn, shows currently provisioned resources # options and call_id when supported api_options = {} - api_options['call_id']=unique_call_id() + api_options['call_id']=unique_call_id() result = server.SliverStatus(slice_urn, creds, *self.ois(server,api_options)) value = ReturnValue.get_value(result) - print value + if self.options.raw: + print result + else: + print value if options.file: save_variable_to_file(value, options.file, options.fileformat) @@ -1002,7 +989,13 @@ or with an slice hrn, shows currently provisioned resources delegated_cred = self.delegate_cred(slice_cred, get_authority(self.authority)) creds.append(delegated_cred) # xxx Thierry - does this not need an api_options as well ? - return server.Start(slice_urn, creds) + result = server.Start(slice_urn, creds) + value = ReturnValue.get_value(result) + if self.options.raw: + print result + else: + print value + return value def stop(self, options, args): """ @@ -1018,7 +1011,13 @@ or with an slice hrn, shows currently provisioned resources if options.delegate: delegated_cred = self.delegate_cred(slice_cred, get_authority(self.authority)) creds.append(delegated_cred) - return server.Stop(slice_urn, creds) + result = server.Stop(slice_urn, creds) + value = ReturnValue.get_value(result) + if self.options.raw: + print result + else: + print value + return value # reset named slice def reset(self, options, args): @@ -1035,7 +1034,13 @@ or with an slice hrn, shows currently provisioned resources if options.delegate: delegated_cred = self.delegate_cred(slice_cred, get_authority(self.authority)) creds.append(delegated_cred) - return server.reset_slice(creds, slice_urn) + result = server.reset_slice(creds, slice_urn) + value = ReturnValue.get_value(result) + if self.options.raw: + print result + else: + print value + return value def renew(self, options, args): """ @@ -1058,6 +1063,10 @@ or with an slice hrn, shows currently provisioned resources api_options['call_id']=unique_call_id() result = server.RenewSliver(slice_urn, creds, time, *self.ois(server,api_options)) value = ReturnValue.get_value(result) + if self.options.raw: + print result + else: + print value return value @@ -1075,7 +1084,13 @@ or with an slice hrn, shows currently provisioned resources if options.delegate: delegated_cred = self.delegate_cred(slice_cred, get_authority(self.authority)) creds.append(delegated_cred) - return server.Shutdown(slice_urn, creds) + result = server.Shutdown(slice_urn, creds) + value = ReturnValue.get_value(result) + if self.options.raw: + print result + else: + print value + return value def get_ticket(self, options, args):