Changeset 05191a6 for fedd/fedd/experiment_control.py
- Timestamp:
- Dec 1, 2008 3:07:40 PM (15 years ago)
- Branches:
- axis_example, compt_changes, info-ops, master, version-1.30, version-2.00, version-3.01, version-3.02
- Children:
- f816079
- Parents:
- f069052
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
fedd/fedd/experiment_control.py
rf069052 r05191a6 1537 1537 self.state_lock.release() 1538 1538 1539 try:1540 self.generate_ssh_keys(gw_secretkey, self.ssh_type)1541 except ValueError:1542 raise service_error(service_error.server_config,1543 "Bad key type (%s)" % self.ssh_type)1544 1545 user = req.get('user', None)1546 if user == None:1547 raise service_error(service_error.req, "No user")1548 1549 master = req.get('master', None)1550 if not master:1551 raise service_error(service_error.req, "No master testbed label")1552 export_project = req.get('exportProject', None)1553 if not export_project:1554 raise service_error(service_error.req, "No export project")1555 1556 if self.splitter_url:1557 self.log.debug("Calling remote splitter at %s" % self.splitter_url)1558 split_data = self.remote_splitter(self.splitter_url, file_content,1559 master)1560 else:1561 tclcmd = [self.tclsh, self.tcl_splitter, '-s', '-x',1562 str(self.muxmax), '-m', master]1563 1564 if self.fedkit:1565 tclcmd.append('-k')1566 1567 tclcmd.extend([pid, gid, eid, tclfile])1568 1569 self.log.debug("running local splitter %s", " ".join(tclcmd))1570 tclparser = Popen(tclcmd, stdout=PIPE)1571 split_data = tclparser.stdout1572 1573 allocated = { } # Testbeds we can access1574 started = { } # Testbeds where a sub-experiment started1575 # successfully1576 1577 # Objects to parse the splitter output (defined above)1578 parse_current_testbed = self.current_testbed(eid, tmpdir, self.fedkit)1579 parse_allbeds = self.allbeds(self.get_access)1580 parse_gateways = self.gateways(eid, master, tmpdir,1581 gw_pubkey_base, gw_secretkey_base, self.copy_file, self.fedkit)1582 parse_vtopo = self.shunt_to_string("^#\s+Begin\s+Vtopo",1583 "^#\s+End\s+Vtopo")1584 parse_hostnames = self.shunt_to_file("^#\s+Begin\s+hostnames",1585 "^#\s+End\s+hostnames", tmpdir + "/hosts")1586 parse_tarfiles = self.shunt_to_list("^#\s+Begin\s+tarfiles",1587 "^#\s+End\s+tarfiles")1588 parse_rpms = self.shunt_to_list("^#\s+Begin\s+rpms",1589 "^#\s+End\s+rpms")1590 1591 1539 try: 1540 # This catches exceptions to clear the placeholder if necessary 1541 try: 1542 self.generate_ssh_keys(gw_secretkey, self.ssh_type) 1543 except ValueError: 1544 raise service_error(service_error.server_config, 1545 "Bad key type (%s)" % self.ssh_type) 1546 1547 user = req.get('user', None) 1548 if user == None: 1549 raise service_error(service_error.req, "No user") 1550 1551 master = req.get('master', None) 1552 if not master: 1553 raise service_error(service_error.req, 1554 "No master testbed label") 1555 export_project = req.get('exportProject', None) 1556 if not export_project: 1557 raise service_error(service_error.req, "No export project") 1558 1559 if self.splitter_url: 1560 self.log.debug("Calling remote splitter at %s" % \ 1561 self.splitter_url) 1562 split_data = self.remote_splitter(self.splitter_url, 1563 file_content, master) 1564 else: 1565 tclcmd = [self.tclsh, self.tcl_splitter, '-s', '-x', 1566 str(self.muxmax), '-m', master] 1567 1568 if self.fedkit: 1569 tclcmd.append('-k') 1570 1571 tclcmd.extend([pid, gid, eid, tclfile]) 1572 1573 self.log.debug("running local splitter %s", " ".join(tclcmd)) 1574 tclparser = Popen(tclcmd, stdout=PIPE) 1575 split_data = tclparser.stdout 1576 1577 allocated = { } # Testbeds we can access 1578 started = { } # Testbeds where a sub-experiment started 1579 # successfully 1580 1581 # Objects to parse the splitter output (defined above) 1582 parse_current_testbed = self.current_testbed(eid, tmpdir, 1583 self.fedkit) 1584 parse_allbeds = self.allbeds(self.get_access) 1585 parse_gateways = self.gateways(eid, master, tmpdir, 1586 gw_pubkey_base, gw_secretkey_base, self.copy_file, 1587 self.fedkit) 1588 parse_vtopo = self.shunt_to_string("^#\s+Begin\s+Vtopo", 1589 "^#\s+End\s+Vtopo") 1590 parse_hostnames = self.shunt_to_file("^#\s+Begin\s+hostnames", 1591 "^#\s+End\s+hostnames", tmpdir + "/hosts") 1592 parse_tarfiles = self.shunt_to_list("^#\s+Begin\s+tarfiles", 1593 "^#\s+End\s+tarfiles") 1594 parse_rpms = self.shunt_to_list("^#\s+Begin\s+rpms", 1595 "^#\s+End\s+rpms") 1596 1592 1597 # Working on the split data 1593 1598 for line in split_data: … … 1611 1616 raise service_error(service_error.internal, 1612 1617 "Bad tcl parse? %s" % line) 1618 # Virtual topology and visualization 1619 vtopo = self.gentopo(parse_vtopo.str) 1620 if not vtopo: 1621 raise service_error(service_error.internal, 1622 "Failed to generate virtual topology") 1623 1624 vis = self.genviz(vtopo) 1625 if not vis: 1626 raise service_error(service_error.internal, 1627 "Failed to generate visualization") 1628 1629 # save federant information 1630 for k in allocated.keys(): 1631 tbparams[k]['federant'] = {\ 1632 'name': [ { 'localname' : eid} ],\ 1633 'emulab': tbparams[k]['emulab'],\ 1634 'allocID' : tbparams[k]['allocID'],\ 1635 'master' : k == master,\ 1636 } 1637 1638 1639 # Copy tarfiles and rpms needed at remote sites into a staging area 1640 try: 1641 if self.fedkit: 1642 parse_tarfiles.list.append(self.fedkit) 1643 for t in parse_tarfiles.list: 1644 if not os.path.exists("%s/tarfiles" % tmpdir): 1645 os.mkdir("%s/tarfiles" % tmpdir) 1646 self.copy_file(t, "%s/tarfiles/%s" % \ 1647 (tmpdir, os.path.basename(t))) 1648 for r in parse_rpms.list: 1649 if not os.path.exists("%s/rpms" % tmpdir): 1650 os.mkdir("%s/rpms" % tmpdir) 1651 self.copy_file(r, "%s/rpms/%s" % \ 1652 (tmpdir, os.path.basename(r))) 1653 except IOError, e: 1654 raise service_error(service_error.internal, 1655 "Cannot stage tarfile/rpm: %s" % e.strerror) 1656 1613 1657 except service_error, e: 1614 1658 # If something goes wrong in the parse (usually an access error) 1615 # clear the placeholder state 1659 # clear the placeholder state. From here on out the code delays 1660 # exceptions. 1616 1661 self.state_lock.acquire() 1617 1662 del self.state[eid] 1618 1663 self.state_lock.release() 1619 1664 raise e 1620 1621 # Virtual topology and visualization1622 vtopo = self.gentopo(parse_vtopo.str)1623 if not vtopo:1624 raise service_error(service_error.internal,1625 "Failed to generate virtual topology")1626 1627 vis = self.genviz(vtopo)1628 if not vis:1629 raise service_error(service_error.internal,1630 "Failed to generate visualization")1631 1632 # save federant information1633 for k in allocated.keys():1634 tbparams[k]['federant'] = {\1635 'name': [ { 'localname' : eid} ],\1636 'emulab': tbparams[k]['emulab'],\1637 'allocID' : tbparams[k]['allocID'],\1638 'master' : k == master,\1639 }1640 1641 1642 # Copy tarfiles and rpms needed at remote sites into a staging area1643 try:1644 if self.fedkit:1645 parse_tarfiles.list.append(self.fedkit)1646 for t in parse_tarfiles.list:1647 if not os.path.exists("%s/tarfiles" % tmpdir):1648 os.mkdir("%s/tarfiles" % tmpdir)1649 self.copy_file(t, "%s/tarfiles/%s" % \1650 (tmpdir, os.path.basename(t)))1651 for r in parse_rpms.list:1652 if not os.path.exists("%s/rpms" % tmpdir):1653 os.mkdir("%s/rpms" % tmpdir)1654 self.copy_file(r, "%s/rpms/%s" % \1655 (tmpdir, os.path.basename(r)))1656 except IOError, e:1657 raise service_error(service_error.internal,1658 "Cannot stage tarfile/rpm: %s" % e.strerror)1659 1665 1660 1666 thread_pool_info = self.thread_pool()
Note: See TracChangeset
for help on using the changeset viewer.