def handle_netconf_server_list(lock): crs = socket.socket() cdb.connect(crs, cdb.DATA_SOCKET, CONFD_ADDR, confd.CONFD_PORT) cds = socket.socket() cdb.connect(cds, cdb.DATA_SOCKET, CONFD_ADDR, confd.CONFD_PORT) css = socket.socket() cdb.connect(css, cdb.SUBSCRIPTION_SOCKET, CONFD_ADDR, confd.PORT) cdb.start_session2(crs, cdb.RUNNING, lock) cdb.start_session(cds, cdb.OPERATIONAL) num = cdb.num_instances(crs, SERVER_PATH) for i in range(num): sub_path = str( cdb.get(crs, "{}[{}]/subscription-path".format(SERVER_PATH, i))) sub_prio = int( cdb.get(crs, "{}[{}]/subscription-priority".format(SERVER_PATH, i))) sid = cdb.subscribe2(css, cdb.SUB_RUNNING_TWOPHASE, cdb.SUB_WANT_ABORT_ON_ABORT, sub_prio, 0, sub_path) cdb.set_elem(cds, str(sid), "{}[{}]/subscription-id".format(SERVER_PATH, i)) cds.close() server_prio = int(cdb.get(crs, "{}/server-priority".format(CLIENT_PATH))) server_sid = cdb.subscribe(css, server_prio, 0, SERVER_PATH) crs.close() cdb.subscribe_done(css) return css, server_sid
def __init__(self, prio=100, path='/'): self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) self.path = path self.prio = prio cdb.connect(self.sock, cdb.SUBSCRIPTION_SOCKET, '127.0.0.1', _confd.CONFD_PORT, self.path) cdb.subscribe(self.sock, self.prio, dhcpd_ns.ns.hash, self.path) cdb.subscribe_done(self.sock) print("Subscribed to {path}".format(path=self.path))
def run(): log.info("==>") # 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 ConfD debug level here (if we want it to be # different from the default debug level - CONFD_SILENT): _confd.set_debug(confd_debug_level, sys.stderr) subsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) # maapi socket for load schemas maapisock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) maapi.connect(maapisock, CONFD_ADDR, _confd.CONFD_PORT) maapi.load_schemas(maapisock) cdb.connect(subsock, cdb.SUBSCRIPTION_SOCKET, CONFD_ADDR, _confd.CONFD_PORT) spoint = cdb.subscribe(subsock, 3, user_folders_ns.ns.hash, ROOT_PATH) cdb.subscribe_done(subsock) log.debug("Subscribed to path %s spoint=%i" % (ROOT_PATH, spoint)) log.info("CDB subscriber initialized!") try: _r = [subsock] _w = [] _e = [] log.debug("subscok connected, starting ConfD loop") while True: (r, w, e) = select.select(_r, _w, _e, 1) for rs in r: log.debug("rs.fileno=%i subscok.fileno=%i" % ( rs.fileno(), subsock.fileno())) if rs.fileno() == subsock.fileno(): log.debug("subsock triggered") try: process_subscriptions(spoint, subsock) 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: subsock.close() log.info("<==")
def run(): """ Main subscriber thread execution. """ confd_addr = '127.0.0.1' confd_port = _confd.PORT _confd.set_debug(_confd.SILENT, sys.stderr) sub_path = "/system/ip/route" # MAAPI socket to load schemas for a nicer print() calls maapi_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) maapi.connect(maapi_sock, confd_addr, confd_port, sub_path) maapi.load_schemas(maapi_sock) # socket for subscription data iteration data_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) cdb.connect(data_sock, cdb.DATA_SOCKET, confd_addr, confd_port, sub_path) # tailf:cdb-oper subscription socket oper_sub_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) cdb.connect(oper_sub_sock, cdb.SUBSCRIPTION_SOCKET, confd_addr, confd_port, sub_path) oper_sub_point = cdb.oper_subscribe(oper_sub_sock, routes_ns.ns.hash, sub_path) cdb.subscribe_done(oper_sub_sock) try: read_list = [oper_sub_sock] write_list = [] error_list = [] print('entering poll loop') while True: read_socks = select.select(read_list, write_list, error_list, 1)[0] for rs in read_socks: # process only our cdb-oper subscription socket here... if rs.fileno() is not oper_sub_sock.fileno(): continue try: sub_points = cdb.read_subscription_socket(oper_sub_sock) for s in sub_points: if s != oper_sub_point: continue print("CDB operational subscription point triggered") cdb.start_session(data_sock, cdb.OPERATIONAL) cdb.set_namespace(data_sock, routes_ns.ns.hash) cdb.diff_iterate(oper_sub_sock, oper_sub_point, iterate_changes, 0, None) cdb.end_session(data_sock) cdb.sync_subscription_socket(oper_sub_sock, cdb.DONE_OPERATIONAL) 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: data_sock.close() oper_sub_sock.close()
def run(): log.info("==>") # 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 ConfD debug level here (if we want it to be # different from the default debug level - CONFD_SILENT): _confd.set_debug(confd_debug_level, sys.stderr) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) subsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) # maapi socket for load schemas maapisock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) maapi.connect(maapisock, CONFD_ADDR, _confd.CONFD_PORT) maapi.load_schemas(maapisock) cdb.connect(sock, cdb.DATA_SOCKET, CONFD_ADDR, _confd.CONFD_PORT) sub_path = "/root/NodeB/RFHead" cdb.connect(subsock, cdb.SUBSCRIPTION_SOCKET, CONFD_ADDR, _confd.CONFD_PORT) spoint = cdb.subscribe(subsock, 3, root_ns.ns.hash, sub_path) cdb.subscribe_done(subsock) log.debug("Subscribed to path %s spoint=%i" % (sub_path, spoint)) read_db(sock) try: _r = [subsock] _w = [] _e = [] log.debug("subscok connected, starting ConfD loop") while (True): (r, w, e) = select.select(_r, _w, _e, 1) # log.debug("select triggered r=%r" % r) for rs in r: log.debug("rs.fileno=%i subscok.fileno=%i" % (rs.fileno(), subsock.fileno())) if rs.fileno() == subsock.fileno(): log.debug("subsock triggered") try: sub_points = cdb.read_subscription_socket(subsock) for s in sub_points: if s == spoint: log.debug("our spoint=%i triggered" % spoint) cdb.start_session(sock, cdb.RUNNING) cdb.set_namespace(sock, root_ns.ns.hash) cdb.diff_iterate(subsock, spoint, iter, _confd.ITER_WANT_PREV, sock) cdb.end_session(sock) # variant with diff_match not yet available # in python cdb.sync_subscription_socket( subsock, cdb.DONE_PRIORITY) 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: sock.close() subsock.close() log.info("<==")