diff options
author | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2014-08-13 16:41:17 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2014-08-13 22:20:27 +0900 |
commit | afbf024447ef0a444b5d3523f19de4becaec600f (patch) | |
tree | dc50319167d1863abc934be2348eaaff1215b4f5 | |
parent | c6371474840f68c8da86976933297f7a85e3b537 (diff) |
bgp: move ssh configuration to bgp config file
You can't pass ssh.py to run command any more. If you need ssh CLI,
update the bgp config file and then:
ryu run —-config-file /path/to/ryu.conf /path/to/ryu/ryu/services/protocols/application.py
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r-- | ryu/services/protocols/bgp/application.py | 3 | ||||
-rw-r--r-- | ryu/services/protocols/bgp/bgp_sample_conf.py | 9 | ||||
-rw-r--r-- | ryu/services/protocols/bgp/bgpspeaker.py | 6 | ||||
-rw-r--r-- | ryu/services/protocols/bgp/operator/ssh.py | 55 |
4 files changed, 38 insertions, 35 deletions
diff --git a/ryu/services/protocols/bgp/application.py b/ryu/services/protocols/bgp/application.py index 786c1edc..43aac8b9 100644 --- a/ryu/services/protocols/bgp/application.py +++ b/ryu/services/protocols/bgp/application.py @@ -47,6 +47,7 @@ from ryu.services.protocols.bgp.rtconf import neighbors from ryu.services.protocols.bgp.rtconf import vrfs from ryu.services.protocols.bgp.utils.dictconfig import dictConfig from ryu.services.protocols.bgp.utils.validation import is_valid_ipv4 +from ryu.services.protocols.bgp.operator import ssh LOG = logging.getLogger('bgpspeaker.application') CONF = cfg.CONF @@ -92,6 +93,8 @@ class RyuBGPSpeaker(RyuApp): if getattr(settings, 'BGP', None): self._start_core(settings) + if getattr(settings, 'SSH', None) is not None: + hub.spawn(ssh.SSH_CLI_CONTROLLER.start, None, **settings.SSH) # Start Network Controller to server RPC peers. t = hub.spawn(net_ctrl.NET_CONTROLLER.start, *[], **{net_ctrl.NC_RPC_BIND_IP: self.bind_ip, diff --git a/ryu/services/protocols/bgp/bgp_sample_conf.py b/ryu/services/protocols/bgp/bgp_sample_conf.py index cf20cce9..b3801563 100644 --- a/ryu/services/protocols/bgp/bgp_sample_conf.py +++ b/ryu/services/protocols/bgp/bgp_sample_conf.py @@ -36,6 +36,15 @@ BGP = { } + +# SSH = { +# 'ssh_port': 4990, +# 'ssh_host': 'localhost', +# 'ssh_hostkey': '/etc/ssh_host_rsa_key', +# 'ssh_username': 'ryu', +# 'ssh_password': 'ryu' +# } + # ============================================================================= # Logging configuration. # ============================================================================= diff --git a/ryu/services/protocols/bgp/bgpspeaker.py b/ryu/services/protocols/bgp/bgpspeaker.py index 8e290150..a2993beb 100644 --- a/ryu/services/protocols/bgp/bgpspeaker.py +++ b/ryu/services/protocols/bgp/bgpspeaker.py @@ -18,7 +18,6 @@ import netaddr from ryu.lib import hub -from ryu.base import app_manager from ryu.services.protocols.bgp.operator import ssh from ryu.services.protocols.bgp.core_manager import CORE_MANAGER @@ -137,11 +136,8 @@ class BGPSpeaker(object): self._core_start(settings) self._init_signal_listeners() self._best_path_change_handler = best_path_change_handler - if ssh_console: - app_mgr = app_manager.AppManager.get_instance() - ssh_cli = app_mgr.instantiate(ssh.Cli) - ssh_cli.start() + hub.spawn(ssh.SSH_CLI_CONTROLLER.start) def _notify_best_path_changed(self, path, is_withdraw): if not path.source: diff --git a/ryu/services/protocols/bgp/operator/ssh.py b/ryu/services/protocols/bgp/operator/ssh.py index 86b233f6..1693b56a 100644 --- a/ryu/services/protocols/bgp/operator/ssh.py +++ b/ryu/services/protocols/bgp/operator/ssh.py @@ -20,31 +20,27 @@ import logging import paramiko import sys from copy import copy -from oslo.config import cfg import os.path +CONF = { + "ssh_port": 4990, + "ssh_host": "localhost", + "ssh_hostkey": None, + "ssh_username": "ryu", + "ssh_password": "ryu", +} + from ryu.lib import hub from ryu import version -from ryu.base import app_manager from ryu.services.protocols.bgp.operator.command import Command from ryu.services.protocols.bgp.operator.command import CommandsResponse from ryu.services.protocols.bgp.operator.commands.root import RootCmd from ryu.services.protocols.bgp.operator.internal_api import InternalApi from ryu.services.protocols.bgp.operator.command import STATUS_OK +from ryu.services.protocols.bgp.base import Activity LOG = logging.getLogger('bgpspeaker.cli') -CONF = cfg.CONF -CONF.register_opts([ - cfg.ListOpt('cli-transports', default=[], help='cli transports to enable'), - cfg.StrOpt('cli-ssh-host', default='localhost', - help='cli ssh listen host'), - cfg.IntOpt('cli-ssh-port', default=4990, help='cli ssh listen port'), - cfg.StrOpt('cli-ssh-hostkey', help='cli ssh host key file'), - cfg.StrOpt('cli-ssh-username', default='ryu', help='cli ssh username'), - cfg.StrOpt('cli-ssh-password', default='ryu', help='cli ssh password') -]) - class SshServer(paramiko.ServerInterface): TERM = "ansi" @@ -86,8 +82,8 @@ Hello, this is Ryu BGP speaker (version %s). transport.start_server(server=self) def _find_ssh_server_key(self): - if CONF.cli_ssh_hostkey: - return paramiko.RSAKey.from_private_key_file(CONF.cli_ssh_hostkey) + if CONF["ssh_hostkey"]: + return paramiko.RSAKey.from_private_key_file(ssh_hostkey) elif os.path.exists("/etc/ssh_host_rsa_key"): # OSX return paramiko.RSAKey.from_private_key_file( @@ -103,8 +99,8 @@ Hello, this is Ryu BGP speaker (version %s). return paramiko.AUTH_SUCCESSFUL def check_auth_password(self, username, password): - if username == CONF.cli_ssh_username and \ - password == CONF.cli_ssh_password: + if username == CONF["ssh_username"] and \ + password == CONF["ssh_password"]: return paramiko.AUTH_SUCCESSFUL return paramiko.AUTH_FAILED @@ -467,21 +463,20 @@ class SshServerFactory(object): SshServer(sock, addr) -class Cli(app_manager.RyuApp): - def __init__(self, *args, **kwargs): - super(Cli, self).__init__(*args, **kwargs) - something_started = False +class Cli(Activity): + def __init__(self): + super(Cli, self).__init__() - def start(self): - LOG.info("starting ssh server at %s:%d", - CONF.cli_ssh_host, CONF.cli_ssh_port) - t = hub.spawn(self._ssh_thread) - something_started = True - return t + def _run(self, *args, **kwargs): + for k, v in kwargs.items(): + if k in CONF: + CONF[k] = v - def _ssh_thread(self): + LOG.info("starting ssh server at %s:%d", CONF["ssh_host"], + CONF["ssh_port"]) factory = SshServerFactory() - server = hub.StreamServer((CONF.cli_ssh_host, - CONF.cli_ssh_port), + server = hub.StreamServer((CONF["ssh_host"], CONF["ssh_port"]), factory.streamserver_handle) server.serve_forever() + +SSH_CLI_CONTROLLER = Cli() |