Changeset 12658df


Ignore:
Timestamp:
Apr 28, 2010 9:38:07 AM (15 years ago)
Author:
Ted Faber <faber@…>
Branches:
axis_example, compt_changes, info-ops, master, version-3.01, version-3.02
Children:
7e67ab9
Parents:
ab847bc
Message:

Add interface to specify services to the command line. Also make
--serializeOnly into --serialize_only and fix its operation for create.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • fedd/fedd_client.py

    rab847bc r12658df  
    6969        self.add_option( "--debug", action="count", dest="debug",
    7070                default=0, help="Set debug.  Repeat for more information")
    71         self.add_option("--serializeOnly", action="store_true",
     71        self.add_option("--serialize_only", action="store_true",
    7272                dest="serialize_only", default=False,
    7373                help="Print the SOAP request that would be sent and exit")
     
    9999                help="Project to export from master")
    100100        self.add_option("--master", dest="master",
    101                 help="Master testbed in the federation")
     101                help="Master testbed in the federation (pseudo project export)")
     102        self.add_option("--service", dest="service", action="append",
     103                type="string", default=[],
     104                help="Service description name:exporters:importers:attrs")
    102105
    103106class fedd_split_opts(fedd_create_opts):
     
    315318        if transport == "soap":
    316319            if serialize_only:
    317                 print self.caller.serialize_soap(req_dict)
    318                 sys.exit(0)
     320                print caller.serialize_soap(req_dict)
     321                return { }
    319322            else:
    320323                try:
     
    331334                ser = dumps((req_dict,))
    332335                print ser
    333                 sys.exit(0)
     336                return { }
    334337            else:
    335338                try:
     
    908911                    len(resp_dict['vtopo'].get('node', [])),
    909912                    file, fmt, opts.neato, opts.labels, opts.pixels)
     913        elif opts.serialze_only:
     914            sys.exit(0)
    910915        else:
    911916            sys.exit("Bad response. %s" % e.message)
     
    10641069            self.gen_image(topo, len(topo.get('node', [])), file, fmt,
    10651070                    opts.neato, opts.labels, opts.pixels)
     1071        elif opts.serialze_only:
     1072            sys.exit(0)
    10661073        else:
    10671074            sys.exit("Bad response. %s" % e.message)
     
    14181425    def __init__(self):
    14191426        fedd_rpc.__init__(self)
     1427
     1428    @staticmethod
     1429    def parse_service(svc):
     1430        terms = svc.split(':')
     1431        svcd = { }
     1432        if len(terms) < 2 or len(terms[0]) == 0 or len(terms[1]) == 0:
     1433            sys.exit("Bad service description '%s': Not enough terms" % svc)
     1434       
     1435        svcd['name'] = terms[0]
     1436        svcd['export'] = terms[1].split(",")
     1437        if len(terms) > 2 and len(terms[2]) > 0:
     1438            svcd['import'] = terms[2].split(",")
     1439        if len(terms) > 3 and len(terms[3]) > 0:
     1440            svcd['fedAttr'] = [ ]
     1441            for t in terms[3].split(","):
     1442                i = t.find("=")
     1443                if i != -1 :
     1444                    svcd['fedAttr'].append(
     1445                            {'attribute': t[0:i], 'value': t[i+1:]})
     1446                else:
     1447                    sys.exit("Bad service attribute '%s': no equals sign" % t)
     1448        return svcd
     1449
    14201450    def __call__(self):
    14211451        parser = fedd_create_opts()
    14221452
    14231453        (opts, args) = parser.parse_args()
     1454
     1455        svcs = []
    14241456
    14251457        if opts.trusted:
     
    14271459                sys.exit("Cannot read trusted certificates (%s)" % opts.trusted)
    14281460
    1429         if not opts.project :
    1430             parser.error('--project is required')
     1461        if not (opts.project and opts.master) and not opts.service:
     1462            print >>sys.stderr, "Neither master/project nor services requested"
    14311463
    14321464        if opts.debug > 0: opts.tracefile=sys.stderr
     
    14561488            sys.exit("Must specify an experiment description (--file)")
    14571489
    1458         if not opts.master:
    1459             sys.exit("Must specify a master testbed (--master)")
    1460 
    14611490        out_certfile = opts.out_certfile
    1462 
     1491       
     1492        # Fill in svcs here so errors in service specification come before the
     1493        # New call is made
     1494        if opts.master and opts.project:
     1495            svcs.append({
     1496                    'name': 'project_export',
     1497                    'export': [opts.master],
     1498                    'fedAttr': [
     1499                        { 'attribute': 'project', 'value': opts.project },
     1500                        ],
     1501                    })
     1502
     1503        svcs.extend([ self.parse_service(s) for s in opts.service])
    14631504        msg = { }
    14641505
     
    15001541                    elif k =='localname':
    15011542                        e_local = id[k]
    1502 
    1503         msg = {
    1504                 'experimentdescription': { 'ns2description': exp_desc },
    1505                 'service': [ {
    1506                     'name': 'project_export',
    1507                     'export': [opts.master],
    1508                     'fedAttr': [
    1509                         { 'attribute': 'project', 'value': opts.project },
    1510                         ],
    1511                     }, ]
    1512             }
     1543        elif opts.serialize_only:
     1544            e_local = "serialize"
     1545        msg = { 'experimentdescription': { 'ns2description': exp_desc }, }
     1546
     1547        if svcs:
     1548            msg['service'] = svcs
    15131549
    15141550        if e_fedid:
     
    17161752
    17171753        if opts.debug > 1: print >>sys.stderr, resp_dict
    1718         self.print_response_as_testbed(resp_dict, opts.label)
     1754        if not opts.serialize_only:
     1755            self.print_response_as_testbed(resp_dict, opts.label)
    17191756
    17201757# Keep requesting experiment status and printing updates to the log until the
     
    17921829                sys.exit("Error processing RPC: %s" % e)
    17931830
    1794             status = resp_dict.get('experimentStatus', None)
     1831            if not opts.serialize_only:
     1832                status = resp_dict.get('experimentStatus', None)
     1833            else:
     1834                status = "active"
    17951835            log = resp_dict.get('allocationLog', None)
    17961836            if not status:
     
    18651905
    18661906        if opts.debug > 1: print >>sys.stderr, resp_dict
    1867         print resp_dict
    1868 
    1869 
     1907        if not opts.serialize_only:
     1908            print resp_dict
    18701909
    18711910cmds = {\
Note: See TracChangeset for help on using the changeset viewer.