Package starcluster :: Package plugins :: Module condor
[hide private]
[frames] | no frames]

Source Code for Module starcluster.plugins.condor

 1  from starcluster import clustersetup 
 2  from starcluster.templates import condor 
 3  from starcluster.logger import log 
 4   
 5  CONDOR_CFG = '/etc/condor/config.d/40starcluster' 
 6  FS_REMOTE_DIR = '/home/._condor_tmp' 
 7   
 8   
9 -class CondorPlugin(clustersetup.DefaultClusterSetup):
10
11 - def _add_condor_node(self, node):
12 condorcfg = node.ssh.remote_file(CONDOR_CFG, 'w') 13 daemon_list = "MASTER, STARTD, SCHEDD" 14 if node.is_master(): 15 daemon_list += ", COLLECTOR, NEGOTIATOR" 16 ctx = dict(CONDOR_HOST='master', DAEMON_LIST=daemon_list, 17 FS_REMOTE_DIR=FS_REMOTE_DIR) 18 condorcfg.write(condor.condor_tmpl % ctx) 19 condorcfg.close() 20 node.ssh.execute('pkill condor', ignore_exit_status=True) 21 node.ssh.execute('/etc/init.d/condor start')
22
23 - def _setup_condor(self, master=None, nodes=None):
24 log.info("Setting up Condor grid") 25 master = master or self._master 26 if not master.ssh.isdir(FS_REMOTE_DIR): 27 # TODO: below should work but doesn't for some reason... 28 #master.ssh.mkdir(FS_REMOTE_DIR, mode=01777) 29 master.ssh.mkdir(FS_REMOTE_DIR) 30 master.ssh.chmod(01777, FS_REMOTE_DIR) 31 nodes = nodes or self.nodes 32 log.info("Starting Condor master") 33 self._add_condor_node(master) 34 log.info("Starting Condor nodes") 35 for node in nodes: 36 self.pool.simple_job(self._add_condor_node, (node,), 37 jobid=node.alias) 38 self.pool.wait(numtasks=len(nodes))
39
40 - def run(self, nodes, master, user, user_shell, volumes):
41 try: 42 self._nodes = nodes 43 self._master = master 44 self._user = user 45 self._user_shell = user_shell 46 self._volumes = volumes 47 self._setup_condor() 48 finally: 49 self.pool.shutdown()
50
51 - def on_add_node(self, node, nodes, master, user, user_shell, volumes):
52 self._nodes = nodes 53 self._master = master 54 self._user = user 55 self._user_shell = user_shell 56 self._volumes = volumes 57 log.info("Adding %s to Condor" % node.alias) 58 self._add_condor_node(node)
59
60 - def on_remove_node(self, node, nodes, master, user, user_shell, volumes):
61 self._nodes = nodes 62 self._master = master 63 self._user = user 64 self._user_shell = user_shell 65 self._volumes = volumes 66 log.info("Removing %s from Condor peacefully..." % node.alias) 67 master.ssh.execute("condor_off -peaceful %s" % node.alias) 68 node.ssh.execute("pkill condor" % node.alias, ignore_exit_status=True)
69