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>
This commit is contained in:
FUJITA Tomonori 2014-08-13 16:41:17 +09:00
parent c637147484
commit afbf024447
4 changed files with 38 additions and 35 deletions

View File

@ -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,

View File

@ -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.
# =============================================================================

View File

@ -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:

View File

@ -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()