Ignore:
Timestamp:
Sep 6, 2009 2:15:52 PM (15 years ago)
Author:
Ted Faber <faber@…>
Branches:
axis_example, compt_changes, info-ops, master, version-2.00, version-3.01, version-3.02
Children:
2b7d768
Parents:
1da6a23
Message:

terminate works

File:
1 edited

Legend:

Unmodified
Added
Removed
  • fedd/federation/access.py

    r1da6a23 r5ae3857  
    6767        self.certdir = config.get("access","certdir")
    6868        self.ssh_privkey_file = config.get("access","ssh_privkey_file")
     69        self.create_debug = config.getboolean("access", "create_debug")
     70        print self.create_debug
    6971
    7072        self.attrs = { }
     
    116118            'ReleaseAccess': soap_handler("ReleaseAccess", self.ReleaseAccess),
    117119            'StartSegment': soap_handler("StartSegment", self.StartSegment),
     120            'TerminateSegment': soap_handler("TerminateSegment", self.TerminateSegment),
    118121            }
    119122        self.xmlrpc_services =  {\
     
    122125            'ReleaseAccess': xmlrpc_handler('ReleaseAccess',
    123126                self.ReleaseAccess),
    124             'StartSegment': xmlrpc_handler('StartSegment',
    125                 self.StartSegment),
     127            'StartSegment': xmlrpc_handler("StartSegment", self.StartSegment),
     128            'TerminateSegment': xmlrpc_handler('TerminateSegment',
     129                self.TerminateSegment),
    126130            }
    127131
     
    10831087    class stop_segment(proxy_emulab_segment):
    10841088        def __init__(self, log=None, keyfile=None, debug=False):
    1085             experiment_control_local.emulab_segment.__init__(self,
     1089            access.proxy_emulab_segment.__init__(self,
    10861090                    log=log, keyfile=keyfile, debug=debug)
    10871091
    1088         def __call__(self, tb, eid, tbparams):
     1092        def __call__(self, parent, user, pid, eid):
    10891093            """
    10901094            Stop a sub experiment by calling swapexp on the federant
    10911095            """
    1092             user = tbparams[tb]['user']
    1093             host = "%s%s" % (tbparams[tb]['host'], tbparams[tb]['domain'])
    1094             pid = tbparams[tb]['project']
    1095 
    1096             self.log.info("[stop_segment]: Stopping %s on %s" % (eid, tb))
     1096            host = "%s%s" % (parent.ops, parent.domain)
     1097            self.log.info("[stop_segment]: Stopping %s" % eid)
    10971098            rv = False
    10981099            try:
    10991100                # Clean out tar files: we've gone over quota in the past
    1100                 self.ssh_cmd(user, host, "rm -rf /proj/%s/rpms/%s" % (pid, eid))
    1101                 self.ssh_cmd(user, host, "rm -rf /proj/%s/tarfiles/%s" % \
    1102                         (pid, eid))
     1101                self.ssh_cmd(user, host, "rm -rf /proj/%s/software/%s" % \
     1102                        (pid, eid))
    11031103                rv = self.ssh_cmd(user, host,
    11041104                        "/usr/testbed/bin/swapexp -w %s %s out" % (pid, eid))
     
    13351335                proj = self.allocation[aid].get('sproject', None)
    13361336            user = self.allocation[aid].get('user', None)
     1337            self.allocation[aid]['experiment'] = ename
     1338            self.write_state()
    13371339        self.state_lock.release()
    13381340
     
    13511353        self.generate_ns2(topo, expfile,
    13521354                "/proj/%s/software/%s/" % (proj, ename), master)
    1353         starter = self.start_segment(keyfile=self.ssh_privkey_file, debug=False)
     1355        starter = self.start_segment(keyfile=self.ssh_privkey_file, debug=self.create_debug)
    13541356        starter(self, ename, proj, user, expfile, tmpdir)
    13551357
    13561358        return { 'allocID': req['allocID'] }
     1359
     1360    def TerminateSegment(self, req, fid):
     1361        print "In terminate"
     1362        try:
     1363            req = req['TerminateSegmentRequestBody']
     1364        except KeyError:
     1365            raise service_error(server_error.req, "Badly formed request")
     1366
     1367        auth_attr = req['allocID']['fedid']
     1368        aid = "%s" % auth_attr
     1369        attrs = req.get('fedAttr', [])
     1370        print "in terminate %s" % auth_attr
     1371        if not self.auth.check_attribute(fid, auth_attr):
     1372            print "access denied"
     1373            raise service_error(service_error.access, "Access denied")
     1374
     1375        self.state_lock.acquire()
     1376        if self.allocation.has_key(aid):
     1377            proj = self.allocation[aid].get('project', None)
     1378            if not proj:
     1379                proj = self.allocation[aid].get('sproject', None)
     1380            user = self.allocation[aid].get('user', None)
     1381            ename = self.allocation[aid].get('experiment', None)
     1382        self.state_lock.release()
     1383
     1384        if not proj:
     1385            raise service_error(service_error.internal,
     1386                    "Can't find project for %s" % aid)
     1387
     1388        if not user:
     1389            raise service_error(service_error.internal,
     1390                    "Can't find creation user for %s" % aid)
     1391        if not ename:
     1392            raise service_error(service_error.internal,
     1393                    "Can't find experiment name for %s" % aid)
     1394        stopper = self.stop_segment(keyfile=self.ssh_privkey_file, debug=self.create_debug)
     1395        stopper(self, user, proj, ename)
     1396        print { 'allocID': req['allocID'] }
     1397        return { 'allocID': req['allocID'] }
Note: See TracChangeset for help on using the changeset viewer.