Exemplo n.º 1
0
    def __init__(self, username, password, port, agent):
        """
        The constructor for the NETCONF Server class.

        :param username: username to allow the NETCONF server
        :type username: str
        :param password: password to allow the NETCONF server
        :type password: str
        :param port: port number to bind the NETCONF server
        :type port: int
        :param agent: Agent Core module
        :type agent: AgentCore
        """
        self.ac = agent
        self.capability = None
        self.configuration = bindingConfiguration.blueSPACE_DRoF_configuration(
        )
        self.capabilities = [
            "blueSPACE-DRoF-configuration", "blueSPACE-DRoF-TP-capability"
        ]
        try:
            auth = server.SSHUserPassController(username=username,
                                                password=password)
            self.server = server.NetconfSSHServer(server_ctl=auth,
                                                  server_methods=self,
                                                  port=port,
                                                  debug=False)
            logger.debug(
                "CONNECTION to NETCONF Server on port {} created".format(port))

        except Exception as e:
            logger.error(
                "CONNECTION to NETCONF Server refused, error: {}".format(e))
            raise e
Exemplo n.º 2
0
def start_server():
  # Configure Netconf server listener and ip route
  global netconf_server, ip_route
  # Setup Netconf
  if netconf_server is not None:
    logger.error("Netconf Server is already up and running")
  else:
    server_ctl = server.SSHUserPassController(username=NC_USER,
                          password=NC_PASSWORD)
    netconf_server = server.NetconfSSHServer(server_ctl=server_ctl,
                         server_methods=SRv6NetconfMethods(),
                         port=NC_PORT,
                         debug=SERVER_DEBUG)
  # Setup ip route
  if ip_route is not None:
    logger.error("IP Route is already setup")
  else:
    ip_route = IPRoute()
  # Resolve the interfaces
  for interface in interfaces:
    idxs[interface] = ip_route.link_lookup(ifname=interface)[0]
  # Start the loop for Netconf
  logger.info("Listening Netconf")
  while True:
    time.sleep(5)
Exemplo n.º 3
0
def test_server_close():
    server_ctl = server.SSHUserPassController(username=getpass.getuser(),
                                              password="******")
    for i in range(0, 10):
        logger.debug("Starting %d iteration", i)
        ns = server.NetconfSSHServer(server_ctl=server_ctl,
                                     server_methods=NetconfMethods(),
                                     port=None,
                                     host_key="tests/host_key",
                                     debug=SERVER_DEBUG)
        port = ns.port

        logger.info("Connect to server on port %d", port)
        session = client.NetconfSSHSession("127.0.0.1",
                                           password="******",
                                           port=port,
                                           debug=CLIENT_DEBUG)
        session.close()
        # NetconfSSHSession.flush()

        logger.debug("Closing")
        ns.close()
        logger.debug("Joining")
        ns.join()
    logger.debug("Test Complete")
Exemplo n.º 4
0
def _test_multi_open(client_cache):

    logger.info("Create Server")
    server_ctl = server.SSHUserPassController(username=getpass.getuser(),
                                              password="******")
    ns = server.NetconfSSHServer(server_ctl=server_ctl,
                                 server_methods=NetconfMethods(),
                                 port=NC_PORT,
                                 host_key="tests/host_key",
                                 debug=SERVER_DEBUG)
    port = ns.port

    logger.info("Open sessions")
    sessions = [
        client.NetconfSSHSession("127.0.0.1",
                                 password="******",
                                 port=port,
                                 debug=CLIENT_DEBUG,
                                 cache=client_cache)
        for unused in range(0, 25)
    ]

    logger.info("Close sessions")
    for session in sessions:
        session.close()

    logger.info("Reopening")
    sessions = [
        client.NetconfSSHSession("127.0.0.1",
                                 password="******",
                                 port=port,
                                 debug=CLIENT_DEBUG)
        for unused in range(0, 25)
    ]

    logger.info("Closeing")
    for session in sessions:
        session.close()

    logger.info("Reopening")
    sessions = [
        client.NetconfSSHSession("127.0.0.1",
                                 password="******",
                                 port=port,
                                 debug=CLIENT_DEBUG)
        for unused in range(0, 25)
    ]
    logger.info("Reclosing")
    for session in sessions:
        session.close()

    # Close down the server and join it to make sure it's closed
    logger.info("Closing server")
    ns.close()
    logger.info("Joining server")
    ns.join()

    # Delete the server so that we don't end up with a bunch of logging going on on exit.
    del ns
    del server_ctl
Exemplo n.º 5
0
def main(*margs):

    parser = argparse.ArgumentParser("Example System Server")
    parser.add_argument("--debug",
                        action="store_true",
                        help="Enable debug logging")
    parser.add_argument("--password",
                        default="admin",
                        help='Use "env:" or "file:" prefix to specify source')
    parser.add_argument('--port',
                        type=int,
                        default=8300,
                        help='Netconf server port')
    parser.add_argument("--username", default="admin", help='Netconf username')
    args = parser.parse_args(*margs)

    #logging.basicConfig(level=logging.DEBUG if args.debug else logging.INFO)
    logging.basicConfig(level=logging.DEBUG if args.debug else logging.WARNING)

    args.password = parse_password_arg(args.password)
    host_key = os.path.dirname(__file__) + "/server-key"

    auth = server.SSHUserPassController(username=args.username,
                                        password=args.password)
    s = SystemServer(args.port, host_key, auth, args.debug)

    if sys.stdout.isatty():
        print("^C to quit server")
    try:
        while True:
            time.sleep(1)
    except Exception:
        print("quitting server")

    s.close()
Exemplo n.º 6
0
 def __init__(self, username, password, port):
     auth = server.SSHUserPassController(username=username,
                                         password=password)
     self.server = server.NetconfSSHServer(server_ctl=auth,
                                           server_methods=self,
                                           port=port,
                                           debug=False)
     self.node_topology = None
     self.node_connectivity = node_connectivity()
Exemplo n.º 7
0
def test_server_close():
    server_ctl = server.SSHUserPassController(username=getpass.getuser(),
                                              password="******")
    port = None
    LAST_INDEX = 40000 + 5000
    for port in range(40000, LAST_INDEX + 1):
        try:
            logger.info("Create server on port %d", port)
            ns = server.NetconfSSHServer(server_ctl=server_ctl,
                                         server_methods=NetconfMethods(),
                                         port=port,
                                         host_key="tests/host_key",
                                         debug=SERVER_DEBUG)
            break
        except socket.error as error:
            logger.info("Got exception: %s %d %d", str(error), error.errno,
                        errno.EADDRINUSE)
            if error.errno != errno.EADDRINUSE or port == LAST_INDEX:
                raise

    logger.info("Connect to server on port %d", port)
    session = client.NetconfSSHSession("127.0.0.1",
                                       password="******",
                                       port=port,
                                       debug=CLIENT_DEBUG)
    session.close()
    # NetconfSSHSession.flush()

    logger.debug("Closing")
    ns.close()
    logger.debug("Joining")
    ns.join()

    # import time
    # time.sleep(.1)

    for i in range(0, 10):
        logger.debug("Starting %d iteration", i)
        ns = server.NetconfSSHServer(server_ctl=server_ctl,
                                     server_methods=NetconfMethods(),
                                     port=port,
                                     host_key="tests/host_key",
                                     debug=SERVER_DEBUG)

        logger.info("Connect to server on port %d", port)
        session = client.NetconfSSHSession("127.0.0.1",
                                           password="******",
                                           port=port,
                                           debug=CLIENT_DEBUG)
        session.close()
        # NetconfSSHSession.flush()

        logger.debug("Closing")
        ns.close()
        logger.debug("Joining")
        ns.join()
    logger.debug("Test Complete")
Exemplo n.º 8
0
def setup_module(unused_module):
    if setup_module.init:
        logger.error("XXX Called setup_module multiple times")
    else:
        logging.basicConfig(level=logging.DEBUG)
        global ncserver
        server_ctl = server.SSHUserPassController(username=getpass.getuser(),
                                                  password="******")
        ncserver = server.NetconfSSHServer(server_ctl=server_ctl,
                                           server_methods=NetconfMethods(),
                                           port=NC_PORT,
                                           host_key="tests/host_key",
                                           debug=SERVER_DEBUG)
        setup_module.init = True
Exemplo n.º 9
0
def init_mock_server():
    # logging.basicConfig(level=logging.DEBUG)

    if init_mock_server.server is not None:
        logger.error("XXX Called init_mock_server called multiple times")
    else:
        sctrl = ncserver.SSHUserPassController(username=getpass.getuser(), password="******")
        init_mock_server.server = ncserver.NetconfSSHServer(
            server_ctl=sctrl,
            server_methods=MockMethods(),
            port=None,
            host_key="tests/host_key",
            debug=NC_DEBUG)
    return init_mock_server.server.port
Exemplo n.º 10
0
def setup_module(unused_module):
    global nc_server

    logging.basicConfig(level=logging.DEBUG)

    if nc_server is not None:
        logger.error("XXX Called setup_module multiple times")
    else:
        sctrl = server.SSHUserPassController(username=getpass.getuser(),
                                             password="******")
        nc_server = server.NetconfSSHServer(server_ctl=sctrl,
                                            server_methods=NetconfMethods(),
                                            port=NC_PORT,
                                            host_key="tests/host_key",
                                            debug=NC_DEBUG)
Exemplo n.º 11
0
def setup_module (unused_module):
    global nc_server, uuid_set, device_category

    yangModel, command_dict, uuid_set, device_category = generate_yang(test, uuid_set)

    logging.basicConfig(level=logging.DEBUG)

    if nc_server is not None:
        logger.error("XXX Called setup_module multiple times")
    else:
        sctrl = netconf_server.SSHUserPassController(username=getpass.getuser(),
                                             password="******")
        nc_server = netconf_server.NetconfSSHServer(server_ctl=sctrl,
                                            server_methods=NetconfMethods(),
                                            port=NC_PORT,
                                            host_key="tests/host_key",
                                            debug=NC_DEBUG)
def setup_netconf():

    "Configure Netconf server listener"

    global netconf_server  # pylint: disable=C0103

    if netconf_server is not None:
        logger.error("Netconf Server is already up and running")
    else:
        server_ctl = server.SSHUserPassController(username=USER,
                                                  password=PASSWORD)
        netconf_server = server.NetconfSSHServer(
            server_ctl=server_ctl,
            server_methods=NetconfMethods(),
            port=NC_PORT,
            host_key="keys/host_key",
            debug=SERVER_DEBUG)
Exemplo n.º 13
0
def startMyServer():
    # logging: https://cloud.tencent.com/developer/article/1354396
    debug = True
    level = logging.DEBUG if debug else logging.INFO
    logging.basicConfig(
        level=level,
        filename='server.log',
        filemode='w',
        format='%(asctime)s %(levelname)s:%(name)s(L%(lineno)d): %(message)s')

    host_key = os.path.join(os.path.dirname(__file__), "server-key")
    auth = server.SSHUserPassController(username='******', password='******')
    s = SystemServer(830, host_key, auth, debug)

    if s.server:
        print('Server started.')
        serverIsRunning = True
        while True:
            # time.sleep(5)
            #print(s.server.sockets, len(s.server.sockets))  #当前已经建链的socket
            if s.server.thread.isAlive():
                if not serverIsRunning:
                    print('Server is running.')
                    serverIsRunning = True
            else:
                print('Server stopped. Restarting...')
                # s.close()
                serverIsRunning = False
                s = SystemServer(830, host_key, auth, debug)

            cli = prompt(
                '>',
                history=FileHistory('history.txt'),
                auto_suggest=AutoSuggestFromHistory(),
                completer=nc_completer,
            )
            if cli == 'exit':
                return
            elif cli in nc_completer.words:
                # locals()['s.' + cli]()
                getattr(s, cli)()
            else:
                print('Not supported!')
Exemplo n.º 14
0
    def __init__(self,
                 device,
                 host_key,
                 ssh_port=830,
                 username=None,
                 password=None,
                 debug=False):
        #-----------------
        # Open the device
        #-----------------
        self.debug = debug

        host_key_path = os.path.expanduser(host_key)
        assert os.path.exists(host_key_path)

        idn = device.get_idn_data()

        # XXX Is this where we get the port count?
        assert idn[4] == "cal04" or idn[4] == "cal02"
        if idn[4] == "cal04":
            self.nports = 4
            self.is_tfm = False
        else:
            self.nports = 1
            self.is_tfm = True

        self.device = device
        self.device_lock = threading.Lock()

        #-----------------------
        # Start the server.
        #-----------------------

        self.controller = server.SSHUserPassController(username=username,
                                                       password=password)

        self.server = server.NetconfSSHServer(server_ctl=self.controller,
                                              port=ssh_port,
                                              host_key=host_key_path,
                                              server_methods=self,
                                              debug=debug)
        logger.info("Listening on port %d", self.server.port)
Exemplo n.º 15
0
    def rpc_system_shutdown(self, session, rpc, *params):
        raise error.AccessDeniedAppError(rpc)


if __name__ == "__main__":
    conf = {
        'host_key': '/home/heweiwei/.ssh/id_rsa',
        'port': 8300,
        'username': '******',
        'password': '******',
        'debug': True
    }

    print(conf)

    auth = server.SSHUserPassController(username=conf['username'],
                                        password=conf['password'])
    s = SystemServer(conf['port'], conf['host_key'], auth, conf['debug'])

    loop = asyncio.get_event_loop()
    q = queue.Queue()
    #loop.run_forever()

    while True:
        try:
            q.put('hello heweiwei')
            q.put('hello maonini')
            while q.empty() == False:
                loop.run_until_complete(run(loop, q.get()))
            time.sleep(5)
        except Exception as e:
            time.sleep(5)
Exemplo n.º 16
0
    def __init__(self, config_file=''):
        """
        :param config_file: server config file path
        """

        # Set up logger
        global logger
        logger = logging.getLogger('publisher')
        logger.setLevel(logging.DEBUG)

        # create file handler which logs all messages
        fh = logging.FileHandler('publisher_debug.log')
        fh.setLevel(logging.DEBUG)

        ch_level = logging.DEBUG if cfg.debug else logging.INFO
        # create console handler with a higher log level
        ch = logging.StreamHandler()
        ch.setLevel(ch_level)

        formatter = logging.Formatter(
            '%(asctime)s %(name)s %(threadName)s %(levelname)s: %(message)s')
        fh.setFormatter(formatter)
        ch.setFormatter(formatter)

        logger.addHandler(fh)
        logger.addHandler(ch)

        self.subscriptions = {}
        self.last_subscription_id = 0
        self.port = cfg.port
        self.debug = cfg.debug
        self._storage_file_lock = Lock()

        self.datasource = None

        try:
            self.datasource = MongoDataSource(cfg.mongo_host, cfg.mongo_port,
                                              cfg.mongo_db,
                                              cfg.mongo_collection)
        except Exception as e:
            logger.error(f"MongoDB error: {e}")
            raise e

        if not os.path.isabs(cfg.ssh_host_key_path):
            cfg.ssh_host_key_path = os.path.join(os.path.dirname(config_file),
                                                 cfg.ssh_host_key_path)

        # Authentication
        #
        # There are two available authentication methods:
        #    1. User and password (used now), allowing only one user (no way to establish access rules)
        #    2. SSH authorized keys. A list of the allowed clients public keys
        auth_controller = server.SSHUserPassController(username=cfg.username,
                                                       password=cfg.password)

        server.NetconfSSHServer(server_ctl=auth_controller,
                                server_methods=self,
                                port=cfg.port,
                                host_key=cfg.ssh_host_key_path,
                                debug=cfg.debug)

        logger.info(f"Server started on port {self.port}")
Exemplo n.º 17
0
def test_multi_open():
    global nc_server

    print "Create Server "
    logger.info("Create Server")
    server_ctl = server.SSHUserPassController(username=getpass.getuser(),
                                              password="******")
    nc_server = server.NetconfSSHServer(server_ctl=server_ctl,
                                        server_methods=NetconfMethods(),
                                        port=NC_PORT,
                                        host_key="host_key",
                                        debug=SERVER_DEBUG)
    port = nc_server.port

    print "the port is ", port, nc_server.port

    logger.info("Open sessions")
    sessions = [
        client.NetconfSSHSession("127.0.0.1",
                                 password="******",
                                 port=port,
                                 debug=CLIENT_DEBUG)
        for unused in range(0, 25)
    ]

    logger.info("Close sessions")
    for session in sessions:
        session.close()

    test_get()
    test_get_config()

    #####HS CLOSE TEST##########

    logger.info("Reopening")
    sessions = [
        client.NetconfSSHSession("127.0.0.1",
                                 password="******",
                                 port=port,
                                 debug=CLIENT_DEBUG)
        for unused in range(0, 25)
    ]

    logger.info("Closeing")
    for session in sessions:
        session.close()

    logger.info("Reopening")
    sessions = [
        client.NetconfSSHSession("127.0.0.1",
                                 password="******",
                                 port=port,
                                 debug=CLIENT_DEBUG)
        for unused in range(0, 25)
    ]
    logger.info("Reclosing")
    for session in sessions:
        session.close()

    # Close down the server and join it to make sure it's closed
    logger.info("Closing server")
    nc_server.close()
    logger.info("Joining server")
    nc_server.join()

    # Delete the server so that we don't end up with a bunch of logging going on on exit.
    del nc_server
    del server_ctl
Exemplo n.º 18
0
 def __init__(self, user, pw):
     controller = server.SSHUserPassController(username=user, password=pw)
     self.server = server.NetconfSSHServer(server_ctl=controller,
                                           server_methods=self)
Exemplo n.º 19
0
    def __init__(self,
                 username=None,
                 password=None,
                 port=830,
                 system_status=None,
                 host_key=None):
        '''
        Constructor
        '''
        self.nc_server = None
        self.que_events = Queue.Queue(10)
        self.stop_event = threading.Event()
        self.started = True
        self.__rpc_error_message = """
<rpc-error>
<error-type>application</error-type>
<error-tag>operation-failed</error-tag>
<error-severity>error</error-severity>
<error-message xml:lang="en">dummy</error-message>
<error-info>
    <operator-mediation>false</operator-mediation>
</error-info>
</rpc-error>
"""
        self._response_plugin = None

        if system_status is None:
            GlobalModule.EMSYSCOMUTILDB.write_system_status(
                "UPDATE", EmSysCommonUtilityDB.STATE_STOP,
                EmSysCommonUtilityDB.GET_DATA_TYPE_BOTH)
            GlobalModule.EM_LOGGER.info(
                "102009 EM Status Transition[%s -> %s]", "UNKNOWN", "STOP")
            raise IOError("system_status is not set")

        self.stop_state = GlobalModule.COM_STOP_NORMAL

        (ret, lo_status) = GlobalModule.EMSYSCOMUTILDB.read_system_status(
            EmSysCommonUtilityDB.GET_DATA_TYPE_MEMORY)

        if lo_status != EmSysCommonUtilityDB.STATE_STOP:
            raise RuntimeError("Detect start request other than stop status")

        if system_status != EmSysCommonUtilityDB.STATE_CHANGE_OVER:
            GlobalModule.EMSYSCOMUTILDB.write_system_status(
                "UPDATE", EmSysCommonUtilityDB.STATE_READY_TO_START,
                EmSysCommonUtilityDB.GET_DATA_TYPE_BOTH)
            GlobalModule.EM_LOGGER.info(
                "102009 EM Status Transition[%s -> %s]", "STOP",
                "READY_TO_START")
        else:
            GlobalModule.EMSYSCOMUTILDB.write_system_status(
                "UPDATE", EmSysCommonUtilityDB.STATE_CHANGE_OVER,
                EmSysCommonUtilityDB.GET_DATA_TYPE_MEMORY)
            GlobalModule.EM_LOGGER.info(
                "102009 EM Status Transition[%s -> %s]", "STOP", "CHG_OVER")

        try:
            if username is None:
                raise IOError("username is not set")
            if password is None:
                raise IOError("password is not set")
            result, conf_log_level = (
                GlobalModule.EM_CONFIG.read_sys_common_conf("Em_log_level"))
            if not result:
                raise IOError("failed to get config Em_log_level")
            debug_flg = bool(conf_log_level == "DEBUG")
            self._response_plugin = self._load_response_plugin()
        except Exception as ex:
            GlobalModule.EM_LOGGER.debug(ex.message)
            GlobalModule.EM_LOGGER.debug("traceback:%s",
                                         traceback.format_exc())
            GlobalModule.EMSYSCOMUTILDB.write_system_status(
                "UPDATE", EmSysCommonUtilityDB.STATE_STOP,
                EmSysCommonUtilityDB.GET_DATA_TYPE_BOTH)
            GlobalModule.EM_LOGGER.info(
                "102009 EM Status Transition[%s -> %s]", "READY_TO_START",
                "STOP")
            raise

        server_ctl = server.SSHUserPassController(username=username,
                                                  password=password)

        try:
            self.nc_server = EmNetconfServer(server_ctl=server_ctl,
                                             server_methods=NetconfMethods(),
                                             port=port,
                                             host_key=host_key,
                                             debug=debug_flg)
        except Exception as exception:
            GlobalModule.EM_LOGGER.debug("Connect Error:%s",
                                         str(type(exception)))
            GlobalModule.EMSYSCOMUTILDB.write_system_status(
                "UPDATE", EmSysCommonUtilityDB.STATE_STOP,
                EmSysCommonUtilityDB.GET_DATA_TYPE_BOTH)
            GlobalModule.EM_LOGGER.info(
                "102009 EM Status Transition[%s -> %s]", "READY_TO_START",
                "STOP")
            raise

        self.stop_mon_thread = threading.Thread(target=self._stop_monitoring)
        self.stop_mon_thread.daemon = True
        self.stop_mon_thread.start()

        self.wait_order_thread = threading.Thread(target=self._wait_order_resp)
        self.wait_order_thread.daemon = True
        self.wait_order_thread.start()