コード例 #1
0
    def _register(self, manifest, refresh_interval=None):
        app_presence = presence.EndpointPresence(context.GLOBAL.zk.conn,
                                                 manifest)

        try:
            app_presence.register()

            if manifest.get('tickets', None):
                _get_tickets(manifest['name'], manifest, self.container_dir)

            _start_service_sup(self.container_dir)
        except exc.ContainerSetupError as err:
            app_abort.abort(self.tm_env, manifest['name'], reason=str(err))

        # If tickets are not ok, app will be aborted. Waiting for tickets
        # in the loop is harmless way to wait for that.
        #
        # If tickets acquired successfully, services will start, and
        # tickets will be refreshed after each interval.
        tkts_spool_dir = os.path.join(self.container_dir, 'root', 'var',
                                      'spool', 'tickets')

        while True:
            time.sleep(refresh_interval)
            reply = tickets.request_tickets(context.GLOBAL.zk.conn,
                                            manifest['name'])
            if reply:
                tickets.store_tickets(reply, tkts_spool_dir)
            else:
                _LOGGER.error('Error requesting tickets.')
コード例 #2
0
def _get_tickets(appname, app, container_dir):
    """Get tickets."""
    tkts_spool_dir = os.path.join(
        container_dir, 'root', 'var', 'spool', 'tickets')

    reply = tickets.request_tickets(context.GLOBAL.zk.conn, appname)
    if reply:
        tickets.store_tickets(reply, tkts_spool_dir)

    # Check that all requested tickets are valid.
    for princ in app.get('tickets', []):
        krbcc_file = os.path.join(tkts_spool_dir, princ)
        if not tickets.krbcc_ok(krbcc_file):
            _LOGGER.error('Missing or expired tickets: %s, %s',
                          princ, krbcc_file)
            raise exc.ContainerSetupError('tickets.%s' % princ)
        else:
            _LOGGER.info('Ticket ok: %s, %s', princ, krbcc_file)
コード例 #3
0
    def register(approot, refresh_interval, manifest, container_dir,
                 appevents_dir):
        """Register container presence."""
        del appevents_dir
        tm_env = appmgr.AppEnvironment(approot)

        app = yaml.load(manifest.read())
        appname = app['name']

        app_presence = presence.EndpointPresence(
            context.GLOBAL.zk.conn,
            app
        )

        try:
            app_presence.register()
            _get_tickets(appname, app, container_dir)
            _start_service_sup(container_dir)
        except exc.ContainerSetupError as err:
            app_abort.abort(
                tm_env,
                appname,
                reason=str(err)
            )

        # If tickets are not ok, app will be aborted. Waiting for tickets
        # in the loop is harmless way to wait for that.
        #
        # If tickets acquired successfully, services will start, and
        # tickets will be refreshed after each interval.
        tkts_spool_dir = os.path.join(
            container_dir, 'root', 'var', 'spool', 'tickets')

        while True:
            time.sleep(refresh_interval)
            reply = tickets.request_tickets(context.GLOBAL.zk.conn,
                                            appname)
            if reply:
                tickets.store_tickets(reply, tkts_spool_dir)
            else:
                _LOGGER.error('Error requesting tickets.')