Example #1
0
 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')
Example #2
0
    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()
Example #3
0
    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()
Example #4
0
    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)
Example #5
0
 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')
Example #6
0
    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
Example #7
0
    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
Example #8
0
    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
Example #9
0
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()
Example #10
0
    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()
Example #11
0
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()
Example #12
0
    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()