Currently, CLI/file configration option are defined in each application,
but in this case, if that application is not loaded before the
initialization in "ryu/cmd/manager.py" (ryu-manager), the application's
option is NOT enabled.
For example, "ovsdb-timeout" option which defined in
"ryu/lib/ovsdb/bridge.py" is not loaded in ryu-manager, so this option
is not shown in ryu-manager CLI option.

This patch moves the option definitions into flags.py and avoids this
problem.

Signed-off-by: IWASE Yusuke <iwase.yusu...@gmail.com>
---
 ryu/app/wsgi.py                            |  13 ----
 ryu/cmd/manager.py                         |   4 +-
 ryu/controller/controller.py               |  29 -------
 ryu/flags.py                               | 119 ++++++++++++++++++++++++++++-
 ryu/lib/ovs/bridge.py                      |   6 --
 ryu/services/protocols/ovsdb/manager.py    |  31 +-------
 ryu/services/protocols/vrrp/rpc_manager.py |  10 +--
 ryu/topology/switches.py                   |  14 ----
 8 files changed, 123 insertions(+), 103 deletions(-)

diff --git a/ryu/app/wsgi.py b/ryu/app/wsgi.py
index 0b98df9..5eead67 100644
--- a/ryu/app/wsgi.py
+++ b/ryu/app/wsgi.py
@@ -31,21 +31,8 @@ import webob.exc
 from webob.request import Request as webob_Request
 from webob.response import Response as webob_Response
 
-from ryu import cfg
 from ryu.lib import hub
 
-DEFAULT_WSGI_HOST = '0.0.0.0'
-DEFAULT_WSGI_PORT = 8080
-
-CONF = cfg.CONF
-CONF.register_cli_opts([
-    cfg.StrOpt(
-        'wsapi-host', default=DEFAULT_WSGI_HOST,
-        help='webapp listen host (default %s)' % DEFAULT_WSGI_HOST),
-    cfg.IntOpt(
-        'wsapi-port', default=DEFAULT_WSGI_PORT,
-        help='webapp listen port (default %s)' % DEFAULT_WSGI_PORT),
-])
 
 HEX_PATTERN = r'0x[0-9a-z]+'
 DIGIT_PATTERN = r'[1-9][0-9]*'
diff --git a/ryu/cmd/manager.py b/ryu/cmd/manager.py
index 797d8d5..c801131 100755
--- a/ryu/cmd/manager.py
+++ b/ryu/cmd/manager.py
@@ -28,12 +28,10 @@ import logging
 from ryu import log
 log.early_init_log(logging.DEBUG)
 
-from ryu import flags
+from ryu import flags  # to load registered option definitions
 from ryu import version
 from ryu.app import wsgi
 from ryu.base.app_manager import AppManager
-from ryu.controller import controller
-from ryu.topology import switches
 
 
 CONF = cfg.CONF
diff --git a/ryu/controller/controller.py b/ryu/controller/controller.py
index 62bca5f..0c6cef9 100644
--- a/ryu/controller/controller.py
+++ b/ryu/controller/controller.py
@@ -27,11 +27,9 @@ from ryu import cfg
 import logging
 from ryu.lib import hub
 from ryu.lib.hub import StreamServer
-import traceback
 import random
 import ssl
 from socket import IPPROTO_TCP, TCP_NODELAY, SHUT_RDWR, timeout as 
SocketTimeout
-import warnings
 
 import ryu.base.app_manager
 
@@ -48,34 +46,7 @@ from ryu.lib.dpid import dpid_to_str
 
 LOG = logging.getLogger('ryu.controller.controller')
 
-DEFAULT_OFP_HOST = '0.0.0.0'
-
 CONF = cfg.CONF
-CONF.register_cli_opts([
-    cfg.StrOpt('ofp-listen-host', default=DEFAULT_OFP_HOST,
-               help='openflow listen host (default %s)' % DEFAULT_OFP_HOST),
-    cfg.IntOpt('ofp-tcp-listen-port', default=None,
-               help='openflow tcp listen port '
-                    '(default: %d)' % ofproto_common.OFP_TCP_PORT),
-    cfg.IntOpt('ofp-ssl-listen-port', default=None,
-               help='openflow ssl listen port '
-                    '(default: %d)' % ofproto_common.OFP_SSL_PORT),
-    cfg.StrOpt('ctl-privkey', default=None, help='controller private key'),
-    cfg.StrOpt('ctl-cert', default=None, help='controller certificate'),
-    cfg.StrOpt('ca-certs', default=None, help='CA certificates')
-])
-CONF.register_opts([
-    cfg.FloatOpt('socket-timeout',
-                 default=5.0,
-                 help='Time, in seconds, to await completion of socket 
operations.'),
-    cfg.FloatOpt('echo-request-interval',
-                 default=15.0,
-                 help='Time, in seconds, between sending echo requests to a 
datapath.'),
-    cfg.IntOpt('maximum-unreplied-echo-requests',
-               default=0,
-               min=0,
-               help='Maximum number of unreplied echo requests before datapath 
is disconnected.')
-])
 
 
 class OpenFlowController(object):
diff --git a/ryu/flags.py b/ryu/flags.py
index 69eb3d2..40dc724 100644
--- a/ryu/flags.py
+++ b/ryu/flags.py
@@ -18,9 +18,74 @@ global flags
 """
 
 from ryu import cfg
+from ryu.ofproto import ofproto_common
 
 CONF = cfg.CONF
 
+DEFAULT_OFP_HOST = '0.0.0.0'
+
+CONF.register_cli_opts([
+    cfg.StrOpt(
+        'ofp-listen-host', default=DEFAULT_OFP_HOST,
+        help='openflow listen host (default %s)' % DEFAULT_OFP_HOST),
+    cfg.IntOpt(
+        'ofp-tcp-listen-port', default=None,
+        help='openflow tcp listen port'
+             ' (default: %d)' % ofproto_common.OFP_TCP_PORT),
+    cfg.IntOpt(
+        'ofp-ssl-listen-port', default=None,
+        help='openflow ssl listen port'
+             ' (default: %d)' % ofproto_common.OFP_SSL_PORT),
+    cfg.StrOpt(
+        'ctl-privkey', default=None,
+        help='controller private key'),
+    cfg.StrOpt(
+        'ctl-cert', default=None,
+        help='controller certificate'),
+    cfg.StrOpt(
+        'ca-certs', default=None,
+        help='CA certificates'),
+    cfg.BoolOpt(
+        'observe-links', default=False,
+        help='observe link discovery events.'),
+    cfg.BoolOpt(
+        'install-lldp-flow', default=True,
+        help='link discovery: explicitly install flow entry'
+             ' to send lldp packet to controller'),
+    cfg.BoolOpt(
+        'explicit-drop', default=True,
+        help='link discovery: explicitly drop lldp packet in'),
+])  # group='default'
+
+# Note: The following option should not be exposed to CLI, because these
+# options are supposed not to be normally configured by command line.
+CONF.register_opts([
+    cfg.FloatOpt(
+        'socket-timeout', default=5.0,
+        help='Time, in seconds, to await completion of socket operations.'),
+    cfg.FloatOpt(
+        'echo-request-interval', default=15.0,
+        help='Time, in seconds, between sending echo requests to a datapath.'),
+    cfg.IntOpt(
+        'maximum-unreplied-echo-requests', default=0, min=0,
+        help='Maximum number of unreplied echo requests'
+             ' before datapath is disconnected.'),
+])  # group='default'
+
+
+DEFAULT_WSGI_HOST = '0.0.0.0'
+DEFAULT_WSGI_PORT = 8080
+
+CONF.register_cli_opts([
+    cfg.StrOpt(
+        'host', default=DEFAULT_WSGI_HOST,
+        help='webapp listen host (default %s)' % DEFAULT_WSGI_HOST),
+    cfg.IntOpt(
+        'port', default=DEFAULT_WSGI_PORT,
+        help='webapp listen port (default %s)' % DEFAULT_WSGI_PORT),
+], group='wsapi')
+
+
 CONF.register_cli_opts([
     # tests/switch/tester
     cfg.StrOpt('target', default='0000000000000001', help='target sw dp-id'),
@@ -59,6 +124,49 @@ CONF.register_cli_opts([
 ], group='test-switch')
 
 
+DEFAULT_OVSDB_TIMEOUT = 2
+
+CONF.register_cli_opts([
+    cfg.IntOpt(
+        'timeout', default=DEFAULT_OVSDB_TIMEOUT,
+        help='ovsdb timeout'),
+    cfg.StrOpt(
+        'address', default='0.0.0.0',
+        help='OVSDB address'),
+    cfg.IntOpt(
+        'port', default=6640,
+        help='OVSDB port'),
+    cfg.IntOpt(
+        'probe-interval',
+        help='OVSDB reconnect probe interval'),
+    cfg.IntOpt(
+        'min-backoff',
+        help='OVSDB reconnect minimum milliseconds'
+             ' between connection attempts'),
+    cfg.IntOpt(
+        'max-backoff',
+        help='OVSDB reconnect maximum milliseconds'
+             ' between connection attempts'),
+    cfg.StrOpt(
+        'mngr-privkey', default=None,
+        help='manager private key'),
+    cfg.StrOpt(
+        'mngr-cert', default=None,
+        help='manager certificate'),
+    cfg.ListOpt(
+        'whitelist', default=[],
+        help='Whitelist of address to allow to connect'),
+    cfg.ListOpt(
+        'schema-tables', default=[],
+        help='Tables in the OVSDB schema to configure'),
+    cfg.ListOpt(
+        'schema-exclude-columns', default=[],
+        help='Table columns in the OVSDB schema to filter out.'
+             ' Values should be in the format: <table>.<column>.'
+             ' Ex: Bridge.netflow,Interface.statistics'),
+], group='ovsdb')
+
+
 DEFAULT_RPC_PORT = 50002
 DEFAULT_RPC_HOST = '0.0.0.0'
 
@@ -69,10 +177,19 @@ CONF.register_cli_opts([
                help='IP for RPC server (default: %s)' % DEFAULT_RPC_HOST),
     cfg.StrOpt('config-file', default=None,
                help='The config file formatted in Python source file. '
-                    'Please refer to "bgp_sample_conf.py" for details.')
+                    'Please refer to "bgp_sample_conf.py" for details.'),
 ], group='bgp-app')
 
 
+DEFAULT_VRRP_RPC_PORT = 50004  # should be random
+
+CONF.register_cli_opts([
+    cfg.IntOpt(
+        'rpc-port', default=DEFAULT_VRRP_RPC_PORT,
+        help='port for vrrp rpc interface'),
+], group='vrrp')
+
+
 DEFAULT_ZSERV_HOST = '/var/run/quagga/zserv.api'
 DEFAULT_ZSERV_PORT = 2600
 DEFAULT_ZSERV_VERSION = 2  # Version of Ubuntu 16.04 LTS packaged Quagga
diff --git a/ryu/lib/ovs/bridge.py b/ryu/lib/ovs/bridge.py
index 337867e..55eb37e 100644
--- a/ryu/lib/ovs/bridge.py
+++ b/ryu/lib/ovs/bridge.py
@@ -21,18 +21,12 @@ slimmed down version of OVSBridge in quantum agent
 import functools
 import logging
 
-from ryu import cfg
 import ryu.exception as ryu_exc
 import ryu.lib.dpid as dpid_lib
 import ryu.lib.ovs.vsctl as ovs_vsctl
 
 LOG = logging.getLogger(__name__)
 
-CONF = cfg.CONF
-CONF.register_opts([
-    cfg.IntOpt('ovsdb-timeout', default=2, help='ovsdb timeout')
-])
-
 
 class OVSBridgeNotFound(ryu_exc.RyuException):
     message = 'no bridge for datapath_id %(datapath_id)s'
diff --git a/ryu/services/protocols/ovsdb/manager.py 
b/ryu/services/protocols/ovsdb/manager.py
index 9822503..6c52df3 100644
--- a/ryu/services/protocols/ovsdb/manager.py
+++ b/ryu/services/protocols/ovsdb/manager.py
@@ -16,7 +16,6 @@
 import ssl
 import socket
 
-from ryu import cfg
 from ryu.base import app_manager
 from ryu.lib import hub
 from ryu.services.protocols.ovsdb import client
@@ -24,30 +23,6 @@ from ryu.services.protocols.ovsdb import event
 from ryu.controller import handler
 
 
-opts = (cfg.StrOpt('address', default='0.0.0.0', help='OVSDB address'),
-        cfg.IntOpt('port', default=6640, help='OVSDB port'),
-        cfg.IntOpt('probe-interval', help='OVSDB reconnect probe interval'),
-        cfg.IntOpt('min-backoff',
-                   help=('OVSDB reconnect minimum milliseconds between '
-                         'connection attemps')),
-        cfg.IntOpt('max-backoff',
-                   help=('OVSDB reconnect maximum milliseconds between '
-                         'connection attemps')),
-        cfg.StrOpt('mngr-privkey', default=None, help='manager private key'),
-        cfg.StrOpt('mngr-cert', default=None, help='manager certificate'),
-        cfg.ListOpt('whitelist', default=[],
-                    help='Whitelist of address to allow to connect'),
-        cfg.ListOpt('schema-tables', default=[],
-                    help='Tables in the OVSDB schema to configure'),
-        cfg.ListOpt('schema-exclude-columns', default=[],
-                    help='Table columns in the OVSDB schema to filter out.  '
-                         'Values should be in the format: <table>.<column>.'
-                         'Ex: Bridge.netflow,Interface.statistics')
-        )
-
-cfg.CONF.register_opts(opts, 'ovsdb')
-
-
 class OVSDB(app_manager.RyuApp):
     _EVENTS = [event.EventNewOVSDBConnection,
                event.EventModifyRequest,
@@ -126,10 +101,10 @@ class OVSDB(app_manager.RyuApp):
         return self.send_event(client_name, ev)
 
     def _start_remote(self, sock, client_address):
-        schema_tables = cfg.CONF.ovsdb.schema_tables
+        schema_tables = self.CONF.ovsdb.schema_tables
         schema_ex_col = {}
-        if cfg.CONF.ovsdb.schema_exclude_columns:
-            for c in cfg.CONF.ovsdb.schema_exclude_columns:
+        if self.CONF.ovsdb.schema_exclude_columns:
+            for c in self.CONF.ovsdb.schema_exclude_columns:
                 tbl, col = c.split('.')
                 if tbl in schema_ex_col:
                     schema_ex_col[tbl].append(col)
diff --git a/ryu/services/protocols/vrrp/rpc_manager.py 
b/ryu/services/protocols/vrrp/rpc_manager.py
index 6ac07b1..f78dd48 100644
--- a/ryu/services/protocols/vrrp/rpc_manager.py
+++ b/ryu/services/protocols/vrrp/rpc_manager.py
@@ -13,10 +13,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from ryu import cfg
-import socket
-
 import netaddr
+
 from ryu.base import app_manager
 from ryu.controller import handler
 from ryu.services.protocols.vrrp import event as vrrp_event
@@ -25,8 +23,6 @@ from ryu.lib import rpc
 from ryu.lib import hub
 from ryu.lib import mac
 
-VRRP_RPC_PORT = 50004  # random
-
 
 class RPCError(Exception):
     pass
@@ -44,10 +40,6 @@ class Peer(object):
 class RpcVRRPManager(app_manager.RyuApp):
     def __init__(self, *args, **kwargs):
         super(RpcVRRPManager, self).__init__(*args, **kwargs)
-        self.CONF.register_opts([
-            cfg.IntOpt('vrrp-rpc-port', default=VRRP_RPC_PORT,
-                       help='port for vrrp rpc interface')])
-
         self._args = args
         self._kwargs = kwargs
         self._peers = []
diff --git a/ryu/topology/switches.py b/ryu/topology/switches.py
index 644a1fe..f0995e9 100644
--- a/ryu/topology/switches.py
+++ b/ryu/topology/switches.py
@@ -17,7 +17,6 @@ import logging
 import six
 import struct
 import time
-from ryu import cfg
 
 from ryu.topology import event
 from ryu.base import app_manager
@@ -43,19 +42,6 @@ from ryu.ofproto import ofproto_v1_4
 LOG = logging.getLogger(__name__)
 
 
-CONF = cfg.CONF
-
-CONF.register_cli_opts([
-    cfg.BoolOpt('observe-links', default=False,
-                help='observe link discovery events.'),
-    cfg.BoolOpt('install-lldp-flow', default=True,
-                help='link discovery: explicitly install flow entry '
-                     'to send lldp packet to controller'),
-    cfg.BoolOpt('explicit-drop', default=True,
-                help='link discovery: explicitly drop lldp packet in')
-])
-
-
 class Port(object):
     # This is data class passed by EventPortXXX
     def __init__(self, dpid, ofproto, ofpport):
-- 
2.7.4


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Ryu-devel mailing list
Ryu-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to