Exemplo n.º 1
0
def confd_loop():
    global ctlsock, workersock, dctx
    log.info("==>")
    _r = [ctlsock, workersock]
    _w = []
    _e = []

    try:
        while True:
            r, w, e = select.select(_r, _w, _e)

            for rs in r:
                if rs == ctlsock or rs == workersock:
                    try:
                        dp.fd_ready(dctx, rs)
                    except _confd.error.Error as e:
                        # Callback error
                        if e.confd_errno is _confd.ERR_EXTERNAL:
                            log.exception(e)
                        else:
                            raise e

    except KeyboardInterrupt:
        log.info(" **** Ctrl-C pressed ***")

    log.info("<==")
Exemplo n.º 2
0
def commit_confd_loop():
    global workersock_commit, dctx
    log.info("==>")
    _r = [workersock_commit]
    _w = []
    _e = []

    try:
        while True:
            r, w, e = select.select(_r, _w, _e)

            for rs in r:
                if rs == workersock_commit:
                    try:
                        dp.fd_ready(dctx, rs)
                    except _confd.error.Error as e:
                        # Callback error
                        if e.confd_errno is _confd.ERR_EXTERNAL:
                            log.exception(e)
                        else:
                            raise e

    except Exception:
        log.info("Closing commit loop")

    log.info("<==")
Exemplo n.º 3
0
def read_data(dctx, sock):
    try:
        dp.fd_ready(dctx, sock)
    except (confd_errors.Error) as e:
        # Callback error
        if e.confd_errno is _confd.ERR_EXTERNAL:
            print(str(e))
        else:
            raise e
Exemplo n.º 4
0
def run():
    # In C we use confd_init() which sets the debug-level, but for Python the
    # call to confd_init() is done when we do 'import confd'.
    # Therefore we need to set the debug level here:
    _confd.set_debug(_confd.TRACE, sys.stderr)

    ctx = dp.init_daemon("arpe_daemon")
    maapisock = socket.socket()
    ctlsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
    wrksock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
    try:
        maapi.connect(maapisock, '127.0.0.1', _confd.CONFD_PORT)
        dp.connect(ctx, ctlsock, dp.CONTROL_SOCKET, '127.0.0.1',
                   _confd.CONFD_PORT, '/')
        dp.connect(ctx, wrksock, dp.WORKER_SOCKET, '127.0.0.1',
                   _confd.CONFD_PORT, '/')

        maapi.load_schemas(maapisock)

        arp = ArpRunner()

        tcb = TransCbs(wrksock, arp)
        dp.register_trans_cb(ctx, tcb)
        dcb = DataCbs(arp)
        dp.register_data_cb(ctx, arpe_ns.ns.callpoint_arpe, dcb)

        dp.register_done(ctx)

        try:
            _r = [ctlsock, wrksock]
            _w = []
            _e = []

            while (True):
                (r, w, e) = select.select(_r, _w, _e, 1)
                for rs in r:
                    if rs.fileno() == ctlsock.fileno():
                        try:
                            dp.fd_ready(ctx, ctlsock)
                        except (_confd.error.Error) as e:
                            if e.confd_errno is not _confd.ERR_EXTERNAL:
                                raise e
                    elif rs.fileno() == wrksock.fileno():
                        try:
                            dp.fd_ready(ctx, wrksock)
                        except (_confd.error.Error) as e:
                            if e.confd_errno is not _confd.ERR_EXTERNAL:
                                raise e

        except KeyboardInterrupt:
            print("\nCtrl-C pressed\n")

    finally:
        ctlsock.close()
        wrksock.close()
        dp.release_daemon(ctx)
Exemplo n.º 5
0
 def _read_data(self, sock):
     try:
         dp.fd_ready(self.dctx, sock)
     except confd_errors.Error as ex:
         # Callback error
         if ex.confd_errno is _confd.ERR_EXTERNAL:
             print(str(ex))
         else:
             print("raising exception")
             raise ex
Exemplo n.º 6
0
def main():
    """ Main execution of the transformer daemon.
    """
    global maapi_socket

    _confd.set_debug(debug_level, sys.stderr)

    daemon_ctx = dp.init_daemon(daemon_name)

    maapi_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
    control_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
    worker_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)

    try:
        maapi.connect(maapi_socket, dest_ip, dest_port, path=ROOT_PATH)
        maapi.load_schemas(maapi_socket)

        dp.connect(daemon_ctx,
                   control_sock,
                   dp.CONTROL_SOCKET,
                   dest_ip,
                   dest_port,
                   path=ROOT_PATH)

        dp.connect(daemon_ctx,
                   worker_sock,
                   dp.WORKER_SOCKET,
                   dest_ip,
                   dest_port,
                   path=ROOT_PATH)

        transaction_cb = TransactionCallbackImpl(worker_sock)
        dp.register_trans_cb(daemon_ctx, transaction_cb)

        transform_cb = TransformCallbackImpl()
        dp.register_data_cb(daemon_ctx, ns_folders.callpoint_transcp,
                            transform_cb)

        dp.register_done(daemon_ctx)

        try:
            read_list = [control_sock, worker_sock]
            write_list = []
            error_list = []

            fd_map = {
                control_sock.fileno(): control_sock,
                worker_sock.fileno(): worker_sock
            }

            print('entering poll loop')
            while True:
                read_socks = select.select(read_list, write_list, error_list,
                                           1)[0]
                for rs in read_socks:
                    sock = fd_map[rs.fileno()]
                    try:
                        dp.fd_ready(daemon_ctx, sock)
                    except _confd.error.Error as ex:
                        traceback.print_exc()
                        if ex.confd_errno is not confd.ERR_EXTERNAL:
                            raise ex

        except KeyboardInterrupt:
            print("Ctrl-C pressed\n")
    finally:
        control_sock.close()
        worker_sock.close()
        dp.release_daemon(daemon_ctx)
Exemplo n.º 7
0
def run(debuglevel):

    # In C we use confd_init() which sets the debug-level, but for Python the
    # call to confd_init() is done when we do 'import confd'.
    # Therefore we need to set the debug level here:
    _confd.set_debug(debuglevel, sys.stderr)

    # init library
    ctx = dp.init_daemon("hosts_daemon")

    # initialize our simple database
    db = Dlist()
    if db.restore("RUNNING.ckp"):
        print("Restoring from checkpoint\n")
    elif db.restore("RUNNING.db"):
        print("Restoring from RUNNING.db\n")
    else:
        print("Starting with empy DB\n")

    db.show()

    maapisock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
    ctlsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
    wrksock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
    try:
        maapi.connect(maapisock, '127.0.0.1', _confd.CONFD_PORT)
        dp.connect(ctx, ctlsock, dp.CONTROL_SOCKET, '127.0.0.1',
                   _confd.CONFD_PORT, '/')
        dp.connect(ctx, wrksock, dp.WORKER_SOCKET, '127.0.0.1',
                   _confd.CONFD_PORT, '/')

        maapi.load_schemas(maapisock)

        # Transaction and db callbacks
        tcb = TransCbs(wrksock)
        dcb = DbCbs(wrksock, db)
        dp.register_trans_cb(ctx, tcb)
        dp.register_db_cb(ctx, dcb)

        # Read/Write callbacks
        host_cbks = HostDataCbs('hcp', db)
        iface_cbks = IfaceDataCbs('icp', db)
        if dp.register_data_cb(ctx, 'hcp', host_cbks) == _confd.CONFD_ERR:
            print("Failed to register host cb\n")
            exit(1)
        if dp.register_data_cb(ctx, 'icp', iface_cbks):
            print("Failed to register interface cb\n")
            exit(1)

        dp.register_done(ctx)

        p = Prompt(db)
        try:
            _r = [sys.stdin, ctlsock, wrksock]
            _w = []
            _e = []

            while (True):
                (r, w, e) = select.select(_r, _w, _e, 1)
                for rs in r:
                    if rs.fileno() == ctlsock.fileno():
                        try:
                            dp.fd_ready(ctx, ctlsock)
                        except (_confd.error.Error) as e:
                            if e.confd_errno is not _confd.ERR_EXTERNAL:
                                raise e
                    elif rs.fileno() == wrksock.fileno():
                        try:
                            dp.fd_ready(ctx, wrksock)
                        except (_confd.error.Error) as e:
                            if e.confd_errno is not _confd.ERR_EXTERNAL:
                                raise e
                    elif rs == sys.stdin:
                        p.handle_stdin(sys.stdin.readline().rstrip())

        except KeyboardInterrupt:
            print("\nCtrl-C pressed\n")

    finally:
        ctlsock.close()
        wrksock.close()
        dp.release_daemon(ctx)
Exemplo n.º 8
0
def run(debuglevel):

    # In C we use confd_init() which sets the debug-level, but for Python the
    # call to confd_init() is done when we do 'import confd'.
    # Therefore we need to set the debug level here:
    _confd.set_debug(debuglevel, sys.stderr)

    # init library
    daemon_ctx = dp.init_daemon('hosts_daemon')

    # initialize our simple database
    custom_db = CustomDatabase()
    if custom_db.restore_db(DBFILE_CHECKPOINT):
        print('Restored from checkpoint\n')
    elif custom_db.restore_db(DBFILE_RUNNING):
        print('Restored from RUNNING.db\n')
    else:
        print('Starting with empty DB\n')

    custom_db.show()

    confd_addr = '127.0.0.1'
    confd_port = _confd.PORT
    managed_path = '/'

    maapisock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
    ctlsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
    wrksock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
    try:
        dp.connect(daemon_ctx, ctlsock, dp.CONTROL_SOCKET, confd_addr,
                   confd_port, managed_path)
        dp.connect(daemon_ctx, wrksock, dp.WORKER_SOCKET, confd_addr,
                   confd_port, managed_path)

        maapi.connect(maapisock, confd_addr, confd_port, managed_path)
        maapi.load_schemas(maapisock)

        transaction_cb = TransCbs(wrksock, custom_db)
        dp.register_trans_cb(daemon_ctx, transaction_cb)

        database_cb = DatabaseCbs(wrksock, custom_db)
        dp.register_db_cb(daemon_ctx, database_cb)

        host_data_cb = HostDataCbs(custom_db)
        dp.register_data_cb(daemon_ctx, model_ns.callpoint_hcp, host_data_cb)

        iface_data_cb = IfaceDataCbs(custom_db)
        dp.register_data_cb(daemon_ctx, model_ns.callpoint_icp, iface_data_cb)

        dp.register_done(daemon_ctx)

        p = Prompt(custom_db)
        try:
            _r = [sys.stdin, ctlsock, wrksock]
            _w = []
            _e = []

            while True:
                (r, w, e) = select.select(_r, _w, _e, 1)

                for rs in r:

                    if rs.fileno() == ctlsock.fileno():
                        try:
                            dp.fd_ready(daemon_ctx, ctlsock)
                        except _confd.error.Error as e:
                            if e.confd_errno is not _confd.ERR_EXTERNAL:
                                raise e
                    elif rs.fileno() == wrksock.fileno():
                        try:
                            dp.fd_ready(daemon_ctx, wrksock)
                        except _confd.error.Error as e:
                            if e.confd_errno is not _confd.ERR_EXTERNAL:
                                raise e
                    elif rs == sys.stdin:
                        p.handle_stdin(sys.stdin.readline().rstrip())

        except KeyboardInterrupt:
            print('\nCtrl-C pressed\n')

    finally:
        ctlsock.close()
        wrksock.close()
        dp.release_daemon(daemon_ctx)