Changeset e40c7ee


Ignore:
Timestamp:
Sep 10, 2008 1:17:43 PM (16 years ago)
Author:
Ted Faber <faber@…>
Branches:
axis_example, compt_changes, info-ops, master, version-1.30, version-2.00, version-3.01, version-3.02
Children:
89d9502
Parents:
03e0290
Message:

more data on a create request, including user requested local name

Location:
fedd
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • fedd/fedd_allocate_project.py

    r03e0290 re40c7ee  
    8888                uid = proj['userID']
    8989                # XXX: fedid
    90                 uname = uid.get('username', None) or \
     90                uname = uid.get('localname', None) or \
    9191                        uid.get('kerberosUsername', None) or \
    9292                        uid.get('uri', None)
     
    175175        rv = {\
    176176            'project': {\
    177                 'name': { 'username': name },
     177                'name': { 'localname': name },
    178178                'user' : [ {\
    179                     'userID': { 'username' : uname },
     179                    'userID': { 'localname' : uname },
    180180                    'access': [ { 'sshPubkey' : ssh } ],
    181181                } ]\
  • fedd/fedd_client.py

    r03e0290 re40c7ee  
    9999        fedd_client_opts.__init__(self)
    100100        self.add_option("-e", "--experiment_cert", dest="out_certfile",
     101                type="string", help="output certificate file")
     102        self.add_option("-E", "--experiment_name", dest="exp_name",
    101103                type="string", help="output certificate file")
    102104        self.add_option("-F","--useFedid", action="store_true",
     
    141143                help="Testbed identifier (URI) to contact (required)")
    142144
    143 def exit_with_fault(dict, out=sys.stderr):
    144     """ Print an error message and exit.
    145 
    146     The dictionary contains the FeddFaultBody elements."""
    147     codestr = ""
    148 
    149     if dict.has_key('errstr'):
    150         codestr = "Error: %s" % dict['errstr']
    151 
    152     if dict.has_key('code'):
    153         if len(codestr) > 0 :
    154             codestr += " (%d)" % dict['code']
    155         else:
    156             codestr = "Error Code: %d" % dict['code']
    157 
    158     print>>out, codestr
    159     print>>out, "Description: %s" % dict['desc']
    160     sys.exit(dict.get('code', 20))
    161 
    162145class fedd_exp_data_opts(fedd_client_opts):
    163146    def __init__(self):
     
    165148        self.add_option("-e", "--experiment_cert", dest="exp_certfile",
    166149                type="string", help="output certificate file")
    167 
     150        self.add_option("-E", "--experiment_name", dest="exp_name",
     151                type="string", help="output certificate file")
     152
     153def exit_with_fault(dict, out=sys.stderr):
     154    """ Print an error message and exit.
     155
     156    The dictionary contains the FeddFaultBody elements."""
     157    codestr = ""
     158
     159    if dict.has_key('errstr'):
     160        codestr = "Error: %s" % dict['errstr']
     161
     162    if dict.has_key('code'):
     163        if len(codestr) > 0 :
     164            codestr += " (%d)" % dict['code']
     165        else:
     166            codestr = "Error Code: %d" % dict['code']
     167
     168    print>>out, codestr
     169    print>>out, "Description: %s" % dict['desc']
     170    sys.exit(dict.get('code', 20))
    168171# Base class that will do a the SOAP/XMLRPC exchange for a request.
    169172class fedd_rpc:
     
    171174        def __init__(self, fb):
    172175            self.desc = fb.get('desc', None)
    173             self.code = fb.get('code', None)
     176            self.code = fb.get('code', -1)
    174177            self.errstr = fb.get('errstr', None)
    175178
     
    310313                method_call = getattr(port, self.method, None)
    311314                resp = method_call(
    312                         encapsulate_binaries({ self.RequestBody: msg},\
     315                        encapsulate_binaries({ self.RequestBody: req_dict},\
    313316                            ('fedid',)))
    314317            except Error, e:
     
    317320            if resp:
    318321                if resp.has_key(self.ResponseBody):
    319                     return resp[self.ResponseBody]
     322                    return decapsulate_binaries(resp[self.ResponseBody],
     323                            ('fedid',))
    320324                elif resp.has_key('FeddFaultBody'):
    321325                    raise self.RPCException(resp['FeddFaultBody'])
     
    387391            sys.exit("Cannot read certificate (%s)" % cert)
    388392
     393        if opts.exp_name and opts.exp_certfile:
     394            sys.exit("Only one of --experiment_cert and " +\
     395                    "--experiment_name permitted");
     396
    389397        if opts.exp_certfile:
    390             exp_fedid = fedid(file=opts.exp_certfile)
    391         else:
    392             sys.exit("Experiment certfile required")
     398            exp_id = { 'fedid': fedid(file=opts.exp_certfile) }
     399
     400        if opts.exp_name:
     401            exp_id = { 'localname' : opts.exp_name }
     402
     403        req = { 'experiment': exp_id }
    393404
    394405        try:
    395             resp_dict = self.do_rpc({ 'experiment': { 'fedid': exp_fedid } },
     406            resp_dict = self.do_rpc(req,
    396407                    opts.url, opts.transport, cert, opts.trusted,
    397408                    serialize_only=opts.serialize_only,
     
    401412                    {'desc': e.desc, 'errstr': e.errstr, 'code': e.code})
    402413        except RuntimeError, e:
    403             sys.exit("Error processing RPC: %s" % e.message)
     414            print e
     415            sys.exit("Error processing RPC: %s" % e)
    404416
    405417        try:
     
    469481                        } ]
    470482                }
     483
     484        if opts.exp_name:
     485            msg['experimentID'] = { 'localname': opts.exp_name }
    471486
    472487        if opts.debug > 1: print >>sys.stderr, msg
     
    493508            except IOError:
    494509                sys.exit('Could not write to %s' %  out_certfile)
     510        eid = resp_dict.get('experimentID', None)
     511        if eid:
     512            for id in eid:
     513                for k in id.keys():
     514                    if k == 'fedid': print "%s: %s" % (k,fedid(bits=id[k]))
     515                    else: print "%s: %s" % (k, id[k])
    495516
    496517class access(fedd_rpc):
  • fedd/fedd_create_experiment.py

    r03e0290 re40c7ee  
    624624                'destinationTestbed' : { 'uri' : uri },
    625625                'user':  user,
    626                 'allocID' : { 'username': 'test' },
     626                'allocID' : { 'localname': 'test' },
    627627                'access' : [ { 'sshPubkey' : self.ssh_pubkey } ]
    628628            }
     
    10771077        pid = "dummy"
    10781078        gid = "dummy"
    1079         eid = self.exp_stem
    1080         if self.randomize_experiments:
    1081             for i in range(0,5):
    1082                 eid += random.choice(string.ascii_letters)
    10831079        # XXX
    10841080        fail_soft = False
     
    11061102        else:
    11071103            raise service_error(service_error.req, "No experiment description")
     1104
     1105        if req.has_key('experimentID') and \
     1106                req['experimentID'].has_key('localname'):
     1107            eid = req['experimentID']['localname']
     1108            while (self.state.has_key(eid)):
     1109                eid += random.choice(string.ascii_letters)
     1110        else:
     1111            eid = self.exp_stem
     1112            for i in range(0,5):
     1113                eid += random.choice(string.ascii_letters)
     1114            while (self.state.has_key(eid)):
     1115                eid = self.exp_stem
     1116                for i in range(0,5):
     1117                    eid += random.choice(string.ascii_letters)
    11081118
    11091119        try:
     
    11721182                    "Failed to generate visualization")
    11731183
     1184        # save federant information
     1185        for k in allocated.keys():
     1186            tbparams[k]['federant'] = {\
     1187                    'name': [ { 'localname' : k} ],\
     1188                    'emulab': tbparams[k]['emulab'],\
     1189                    'master' : k == master,\
     1190                }
     1191
     1192
    11741193        # Copy tarfiles and rpms needed at remote sites into a staging area
    11751194        try:
     
    12541273        os.rmdir(tmpdir)
    12551274
    1256         resp = { 'emulab' : [ tbparams[tb]['emulab'] \
     1275        resp = { 'federant' : [ tbparams[tb]['federant'] \
    12571276                for tb in tbparams.keys() \
    1258                     if tbparams[tb].has_key('emulab') ],\
     1277                    if tbparams[tb].has_key('federant') ],\
    12591278                    'experiment': vtopo,\
    12601279                    'vis' : vis,
    1261                     'experimentID' : { 'fedid': expid },\
     1280                    'experimentID' : [\
     1281                            { 'fedid': expid }, { 'localname': eid },\
     1282                        ],\
    12621283                    'experimentAccess': { 'X509' : expcert },\
    12631284                }
    12641285       
    12651286        self.state[expid] = {\
    1266                 'emulab': [ tbparams[tb]['emulab'] \
     1287                'fedid': expid,
     1288                'localname': eid,
     1289                'federant': [ tbparams[tb]['federant'] \
    12671290                    for tb in tbparams.keys() \
    1268                         if tbparams[tb].has_key('emulab') ],\
     1291                        if tbparams[tb].has_key('federant') ],\
    12691292                'vis': vis,\
    12701293                'vtopo': vtopo,\
    12711294            }
     1295        self.state[eid] = self.state[expid]
    12721296           
    12731297        return resp
     
    12791303            raise service_error(service_error.req,
    12801304                    "Bad request format (no VtopoRequestBody)")
    1281         if req.has_key('experiment') and req['experiment'].has_key('fedid'):
    1282             qfedid = req['experiment']['fedid']
     1305        exp = req.get('experiment', None)
     1306        if exp:
     1307            if exp.has_key('fedid'):
     1308                key = fedid(bits=exp['fedid'])
     1309                keytype = "fedid"
     1310            elif exp.has_key('localname'):
     1311                key = exp['localname']
     1312                keytype = "localname"
     1313            else:
     1314                raise service_error(service_error.req, "Unknown lookup type")
    12831315        else:
    1284             raise service_error(service_error.req, "Use fedid for lookup")
    1285 
    1286         if self.state.has_key(qfedid):
    1287             return { 'experiment' : {'fedid': qfedid },\
    1288                     'vtopo': self.state[qfedid]['vtopo'],\
     1316            raise service_error(service_error.req, "No request?")
     1317
     1318        if self.state.has_key(key):
     1319            return { 'experiment' : {keytype: key },\
     1320                    'vtopo': self.state[key]['vtopo'],\
    12891321                    }
    12901322        else:
     
    12971329            raise service_error(service_error.req,
    12981330                    "Bad request format (no VisRequestBody)")
    1299         if req.has_key('experiment') and req['experiment'].has_key('fedid'):
    1300             qfedid = req['experiment']['fedid']
     1331        exp = req.get('experiment', None)
     1332        if exp:
     1333            if exp.has_key('fedid'):
     1334                key = fedid(bits=exp['fedid'])
     1335                keytype = "fedid"
     1336            elif exp.has_key('localname'):
     1337                key = exp['localname']
     1338                keytype = "localname"
     1339            else:
     1340                raise service_error(service_error.req, "Unknown lookup type")
    13011341        else:
    1302             raise service_error(service_error.req, "Use fedid for lookup")
    1303 
    1304         if self.state.has_key(qfedid):
    1305             return { 'experiment' : {'fedid': qfedid },\
    1306                     'vis': self.state[qfedid]['vis'],\
     1342            raise service_error(service_error.req, "No request?")
     1343
     1344        if self.state.has_key(key):
     1345            return { 'experiment' : {keytype: key },\
     1346                    'vis': self.state[key]['vis'],\
    13071347                    }
    13081348        else:
     
    13661406            'experimentdescription' : content,
    13671407            'master' : opts.master,
    1368             'user': [ {'userID' : { 'username' : 'faber' } } ],
     1408            'user': [ {'userID' : { 'localname' : 'faber' } } ],
    13691409            },
    13701410            None)
  • fedd/fedd_proj.py

    r03e0290 re40c7ee  
    502502                    # XXX ssh key additions
    503503                    ap = { 'project': \
    504                             { 'name' : { 'username' : found[0].name },\
     504                            { 'name' : { 'localname' : found[0].name },\
    505505                              'user' : [ {\
    506                                 'userID': { 'username' : found[1] }, \
     506                                'userID': { 'localname' : found[1] }, \
    507507                                'access': [ { 'sshPubkey': s } for s in ssh]}\
    508508                                ]\
     
    636636
    637637        if msg != None:
    638             return encapsulate_binaries({ "VtoposResponseBody" : msg },
     638            return encapsulate_binaries({ "VisResponseBody" : msg },
    639639                    ('fedid',))
    640640        else:
  • fedd/fedd_types.xsd

    r03e0290 re40c7ee  
    1515      <xsd:element name="fedid" type="xsd:base64Binary"/>
    1616      <xsd:element name="uri" type="xsd:string"/>
    17       <xsd:element name="username" type="xsd:string"/>
     17      <xsd:element name="localname" type="xsd:string"/>
    1818      <xsd:element name="kerberosUsername" type="xsd:string"/>
    1919    </xsd:choice>
     
    157157    </xsd:sequence>
    158158  </xsd:complexType>
     159
     160  <xsd:complexType name="federatedExperimentType">
     161    <xsd:annotation>
     162      <xsd:documentation>
     163        The information about a federated sub-experiment
     164      </xsd:documentation>
     165    </xsd:annotation>
     166    <xsd:sequence>
     167      <xsd:element name="name" type="tns:IDType" minOccurs="1"
     168        maxOccurs="unbounded"/>
     169      <xsd:element name="emulab" type="tns:emulabType"/>
     170      <xsd:element name="master" type="xsd:boolean"/>
     171    </xsd:sequence>
     172  </xsd:complexType>
     173
    159174
    160175  <xsd:complexType name="vtoponodeType">
     
    304319      <xsd:element name="experimentdescription" type="xsd:base64Binary"/>
    305320      <xsd:element name="master" type="xsd:string"/>
     321      <xsd:element name="experimentID" type="tns:IDType" minOccurs="0"
     322        maxOccurs="1"/>
    306323    </xsd:sequence>
    307324  </xsd:complexType>
     
    314331    </xsd:annotation>
    315332    <xsd:sequence>
    316       <xsd:element name="emulab" type="tns:emulabType" minOccurs="1"
    317         maxOccurs="unbounded"/>
     333      <xsd:element name="federant" type="tns:federatedExperimentType"
     334        minOccurs="1" maxOccurs="unbounded"/>
    318335      <xsd:element name="experiment" type="tns:vtopoType" minOccurs="0"
    319336        maxOccurs="1"/>
    320337      <xsd:element name="vis" type="tns:visType" minOccurs="0"
    321338        maxOccurs="1"/>
    322       <xsd:element name="experimentID" type="tns:IDType"/>
     339      <xsd:element name="experimentID" type="tns:IDType" minOccurs="1"
     340        maxOccurs="unbounded"/>
    323341      <xsd:element name="experimentAccess" type="tns:accessType" minOccurs="0"
    324342        maxOccurs="1"/>
  • fedd/fedd_util.py

    r03e0290 re40c7ee  
    169169    if isinstance(id, type(fedid())): return { 'fedid': id }
    170170    elif id.startswith("http:") or id.startswith("https:"): return { 'uri': id }
    171     else: return { 'username': id}
     171    else: return { 'localname': id}
    172172
    173173def unpack_id(id):
     
    175175    if id.has_key("fedid"): return fedid(id["fedid"])
    176176    else:
    177         for k in ("username", "uri", "kerberosUsername"):
     177        for k in ("localname", "uri", "kerberosUsername"):
    178178            if id.has_key(k): return id[k]
    179179    return None
Note: See TracChangeset for help on using the changeset viewer.