def stop_loop(): now = time.time() if now < deadline and (io_loop._callbacks or io_loop._timeouts): io_loop.add_timeout(now + 1, stop_loop) else: io_loop.stop() logger.info('Shutdown')
def request_certificate(self): logger.debug('[certificate][%s] Requesting new keys for %s ' % (self.service.name, self.domains)) if not self.lock(): logger.debug('[certificate][%s] failed to acquire lock for keys generation' % self.service.name) return False try: data = certificate_provider.get_certificate(self.service.id, self.domains) with open(data['private_key'], 'r') as f: self.private_key = f.read() f.close() consul.kv.put('vergilius/certificates/%s/private_key' % self.service.id, self.private_key) with open(data['public_key'], 'r') as f: self.public_key = f.read() f.close() consul.kv.put('vergilius/certificates/%s/public_key' % self.service.id, self.public_key) self.expires = data['expires'] self.key_domains = self.serialize_domains() consul.kv.put('vergilius/certificates/%s/expires' % self.service.id, str(self.expires)) consul.kv.put('vergilius/certificates/%s/key_domains' % self.service.id, self.serialize_domains()) logger.info('[certificate][%s]: got new keys for %s ' % (self.service.name, self.domains)) self.write_certificate_files() except Exception as e: logger.error(e) raise e finally: self.unlock()
def __init__(self, name): """ :type name: unicode - service name got from consul """ self.name = name self.id = self.slugify(name) logger.info('[service][%s]: new and loading' % self.name) self.allow_crossdomain = False self.nodes = {} self.port = None self.binds = { u'http': set(), u'http2': set(), u'tcp': set(), u'udp': set() } self.active = True self.certificate = None if not os.path.exists(config.NGINX_CONFIG_PATH): os.mkdir(config.NGINX_CONFIG_PATH) self.fetch() self.watch()
def flush_nginx_config(self): if not self.validate(): logger.error('[service][%s]: failed to validate nginx config!' % self.id) return False has_changes = False for config_type in self.get_config_types(): nginx_config = self.get_nginx_config(config_type) deployed_nginx_config = None try: deployed_nginx_config = self.read_nginx_config_file( config_type) except IOError: pass if deployed_nginx_config != nginx_config: config_file = open(self.get_nginx_config_path(config_type), 'w+') config_file.write(nginx_config) config_file.close() has_changes = True if has_changes: NginxReloader.queue_reload() logger.info('[service][%s]: got new nginx config' % self.name)
def delete(self): """ Destroy service, remove nginx config, stop watcher """ logger.info('[service][%s]: deleting' % self.name) self.active = False try: os.remove(self.get_nginx_config_path()) except OSError: pass
def delete(self): """ Destroy service, remove nginx config, stop watcher """ logger.info('[service][%s]: deleting' % self.name) self.active = False if self.port: self.release_port() for config_type in self.get_config_types(): try: os.remove(self.get_nginx_config_path(config_type)) except OSError: pass
def delete(self): """ Destroy service, remove nginx config, stop watcher """ logger.info('[service][%s]: deleting' % self.name) self.active = False self.release_port() for config_type in self.get_config_types(): try: os.remove(self.get_nginx_config_path(config_type)) except OSError: logger.error('[service][%s]: deleting nginx config is failed' % self.id) return false return true
def shutdown(): logger.info('Stopping http server') tornado.ioloop.IOLoop.current().stop() logger.info('Will shutdown in %s seconds ...', MAX_WAIT_SECONDS_BEFORE_SHUTDOWN) io_loop = tornado.ioloop.IOLoop.instance() deadline = time.time() + MAX_WAIT_SECONDS_BEFORE_SHUTDOWN def stop_loop(): now = time.time() if now < deadline and (io_loop._callbacks or io_loop._timeouts): io_loop.add_timeout(now + 1, stop_loop) else: io_loop.stop() logger.info('Shutdown') stop_loop()
def flush_nginx_config(self): if not self.validate(): logger.error('[service][%s]: failed to validate nginx config!' % self.id) return False nginx_config = self.get_nginx_config() deployed_nginx_config = None try: deployed_nginx_config = self.read_nginx_config_file() except IOError: pass if deployed_nginx_config != nginx_config: config_file = open(self.get_nginx_config_path(), 'w+') config_file.write(nginx_config) config_file.close() logger.info('[service][%s]: got new nginx config %s' % (self.name, self.get_nginx_config_path())) NginxReloader.queue_reload()
def __init__(self, name): """ :type name: unicode - service name got from consul """ self.name = name self.id = self.slugify(name) logger.info('[service][%s]: new and loading' % self.name) self.allow_crossdomain = False self.nodes = {} self.domains = { u'http': set(), u'http2': set() } self.active = True self.certificate = None if not os.path.exists(config.NGINX_CONFIG_PATH): os.mkdir(config.NGINX_CONFIG_PATH) self.fetch() self.watch()