def write_clusterconfig(engines_dict,controller_host=None, base_clusterconfig=os.path.join(paths['home'],'py_util/base_clusterconfig-ec2.py'), final_clusterconfig=os.path.join(paths['home'],'.ipython/full_clusterconfig-ec2.py')): '''takes an engine description dict, and a base configuration filename (i.e. clusterconfig.py _without_ engines = {}), writes a full config to final_clusterconfig ''' if controller_host is None: import net controller_host = net.get_ip_address('eth0') fh = open(final_clusterconfig,'w') fh.write( open(base_clusterconfig).read() ) fh.write( 'controller = %s\n' % ({'host':controller_host}, ) ) fh.write( 'engines = %s\n' % (engines_dict, ) ) fh.close()
def write_clusterconfig( engines_dict, controller_host=None, base_clusterconfig=os.path.join(paths['home'], 'py_util/base_clusterconfig-ec2.py'), final_clusterconfig=os.path.join(paths['home'], '.ipython/full_clusterconfig-ec2.py')): '''takes an engine description dict, and a base configuration filename (i.e. clusterconfig.py _without_ engines = {}), writes a full config to final_clusterconfig ''' if controller_host is None: import net controller_host = net.get_ip_address('eth0') fh = open(final_clusterconfig, 'w') fh.write(open(base_clusterconfig).read()) fh.write('controller = %s\n' % ({'host': controller_host}, )) fh.write('engines = %s\n' % (engines_dict, )) fh.close()
def run(self): approot = self.approot c = self.config # Base socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # Wrap in SSL? if self.proto == "https": # Sanity--SSL configured if not c.get("privateKey"): raise Exception, "Private SSL key not configured" if not c.get("publicCert"): raise Exception, "Public SSL certificate not configured" # Create socket s = ssl.wrap_socket(s, c["privateKey"], c["publicCert"], server_side = True, suppress_ragged_eofs = False, do_handshake_on_connect=False) # ctx = SSL.Context(SSL.SSLv23_METHOD) # ctx.use_privatekey_file(c["privateKey"]) # ctx.use_certificate_file(c["publicCert"]) # s = SSL.Connection(ctx, s) # Default port port = c.get("port", 443) # Flag that SSL is active self.ssl = True elif self.proto == "http": # Default port port = c.get("port", 80) # In the clear self.ssl = False else: raise Exception, "Unknown protocol %s" % (self.proto,) # Set up incoming address filtering? self.permit = None if "permit" in c: # Get list of permitted addresses/prefixes v = c["permit"] self.permit = [] for m in v: self.permit.append(net.parseaddr(m)) # Standard options for socket self.socket = s s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) ifname = c.get("iface") if ifname: addr = net.get_ip_address(ifname) else: addr = "" s.bind( (addr, port) ) s.listen(20) # Stash away in case our server threads need to know self.addr,self.port = s.getsockname() # Endless service loop sys.stderr.write("Handler for %r started on %r:%r\n" % (self.proto, self.addr, self.port)) while True: conn,tup = s.accept() sys.stderr.write("HTTP %sfrom %r\n" % (("(ssl) " if self.ssl else ""), tup)) # See if we want to talk if self.permit and (not net.ok_ip(self.permit, tup[0])): sys.stderr.write(" rejected\n"); conn.close() continue t = threading.Thread(target=self.launch, args=(conn,tup)) t.start()