use openstack.common.cfg instead of gflags

make most of modules use openstack.common.cfg instead of gflags

caveats: no config file compatibility is provided.  (flagfile vs ini file)

Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
This commit is contained in:
YAMAMOTO Takashi 2013-02-12 17:20:57 +09:00 committed by FUJITA Tomonori
parent 6dcfed271e
commit 6be8ef3906
10 changed files with 118 additions and 144 deletions

View File

@ -20,7 +20,7 @@ import gevent
from gevent import monkey
monkey.patch_all()
import gflags
from openstack.common import cfg
import logging
import sys
@ -29,7 +29,6 @@ log.early_init_log(logging.DEBUG)
from ryu import flags
from ryu import version
from ryu import utils
from ryu.app import wsgi
from ryu.base.app_manager import AppManager
from ryu.controller import controller
@ -41,31 +40,26 @@ from ryu.controller import controller
import ryu.contrib
FLAGS = gflags.FLAGS
gflags.DEFINE_bool('version', False, 'output version information and exit')
gflags.DEFINE_multistring('app_lists',
[],
'application module name to run')
CONF = cfg.CONF
CONF.register_cli_opts([
cfg.ListOpt('app_lists', default=[],
help='application module name to run'),
cfg.MultiStrOpt('app', positional=True, default=[],
help='application module name to run')
])
def main():
utils.find_flagfile()
args = FLAGS(sys.argv)
if FLAGS.version:
print 'ryu-manager %s' % version
sys.exit(0)
CONF(project='ryu', version='ryu-manager %s' % version)
log.init_log()
# always enable ofp for now.
FLAGS.app_lists += ['ryu.controller.ofp_handler']
if len(args) > 1:
FLAGS.app_lists += args[1:]
CONF.app_lists += ['ryu.controller.ofp_handler']
CONF.app_lists += CONF.app
app_mgr = AppManager()
app_mgr.load_apps(FLAGS.app_lists)
app_mgr.load_apps(CONF.app_lists)
contexts = app_mgr.create_contexts()
app_mgr.instantiate_apps(**contexts)

View File

@ -14,7 +14,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import gflags
from openstack.common import cfg
import logging
from quantumclient import client as q_client
@ -41,17 +41,17 @@ monkey.patch_all()
LOG = logging.getLogger(__name__)
FLAGS = gflags.FLAGS
CONF = cfg.CONF
def _get_auth_token():
httpclient = q_client.HTTPClient(
username=FLAGS.quantum_admin_username,
tenant_name=FLAGS.quantum_admin_tenant_name,
password=FLAGS.quantum_admin_password,
auth_url=FLAGS.quantum_admin_auth_url,
timeout=FLAGS.quantum_url_timeout,
auth_strategy=FLAGS.quantum_auth_strategy)
username=CONF.quantum_admin_username,
tenant_name=CONF.quantum_admin_tenant_name,
password=CONF.quantum_admin_password,
auth_url=CONF.quantum_admin_auth_url,
timeout=CONF.quantum_url_timeout,
auth_strategy=CONF.quantum_auth_strategy)
try:
httpclient.authenticate()
except (q_exc.Unauthorized, q_exc.Forbidden, q_exc.EndpointNotFound) as e:
@ -64,12 +64,12 @@ def _get_auth_token():
def _get_quantum_client(token):
if token:
my_client = q_clientv2.Client(
endpoint_url=FLAGS.quantum_url,
token=token, timeout=FLAGS.quantum_url_timeout)
endpoint_url=CONF.quantum_url,
token=token, timeout=CONF.quantum_url_timeout)
else:
my_client = q_clientv2.Client(
endpoint_url=FLAGS.quantum_url,
auth_strategy=None, timeout=FLAGS.quantum_url_timeout)
endpoint_url=CONF.quantum_url,
auth_strategy=None, timeout=CONF.quantum_url_timeout)
return my_client
@ -129,7 +129,7 @@ class OVSSwitch(object):
def __init__(self, dpid, nw, ifaces):
# TODO: clean up
token = None
if FLAGS.quantum_auth_strategy:
if CONF.quantum_auth_strategy:
token = _get_auth_token()
q_api = _get_quantum_client(token)
@ -137,7 +137,7 @@ class OVSSwitch(object):
self.network_api = nw
self.ifaces = ifaces
self.q_api = q_api
self.ctrl_addr = FLAGS.quantum_controller_addr
self.ctrl_addr = CONF.quantum_controller_addr
self.ovsdb_addr = None
self.tunnel_ip = None

View File

@ -16,7 +16,7 @@
import collections
import gevent
import gflags
from openstack.common import cfg
import logging
import netaddr
@ -33,8 +33,11 @@ from ryu.lib.ovs import bridge as ovs_bridge
LOG = logging.getLogger(__name__)
FLAGS = gflags.FLAGS
gflags.DEFINE_string('tunnel_type', 'gre', 'tunnel type for ovs tunnel port')
CONF = cfg.CONF
CONF.register_opts([
cfg.StrOpt('tunnel_type', default='gre',
help='tunnel type for ovs tunnel port')
])
_TUNNEL_TYPE_TO_NW_ID = {
'gre': rest_nw_id.NW_ID_VPORT_GRE,
@ -351,7 +354,7 @@ class TunnelPortUpdater(app_manager.RyuApp):
def __init__(self, *args, **kwargs):
super(TunnelPortUpdater, self).__init__(args, kwargs)
self.tunnel_type = FLAGS.tunnel_type
self.tunnel_type = CONF.tunnel_type
self.cs = kwargs['conf_switch']
self.nw = kwargs['network']
self.tunnels = kwargs['tunnels']

View File

@ -14,7 +14,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import gflags
from openstack.common import cfg
import logging
import webob.dec
@ -24,10 +24,11 @@ from routes.util import URLGenerator
LOG = logging.getLogger('ryu.app.wsgi')
FLAGS = gflags.FLAGS
gflags.DEFINE_string('wsapi_host', '', 'webapp listen host')
gflags.DEFINE_integer('wsapi_port', 8080, 'webapp listen port')
CONF = cfg.CONF
CONF.register_cli_opts([
cfg.StrOpt('wsapi_host', default='', help='webapp listen host'),
cfg.IntOpt('wsapi_port', default=8080, help='webapp listen port')
])
HEX_PATTERN = r'0x[0-9a-z]+'
DIGIT_PATTERN = r'[1-9][0-9]*'
@ -87,7 +88,7 @@ class WSGIApplication(object):
class WSGIServer(pywsgi.WSGIServer):
def __init__(self, application, **config):
super(WSGIServer, self).__init__((FLAGS.wsapi_host, FLAGS.wsapi_port),
super(WSGIServer, self).__init__((CONF.wsapi_host, CONF.wsapi_port),
application, **config)
def __call__(self):

View File

@ -15,7 +15,7 @@
# limitations under the License.
import contextlib
import gflags
from openstack.common import cfg
import logging
import gevent
import traceback
@ -42,15 +42,17 @@ from ryu.controller import ofp_event
LOG = logging.getLogger('ryu.controller.controller')
FLAGS = gflags.FLAGS
gflags.DEFINE_string('ofp_listen_host', '', 'openflow listen host')
gflags.DEFINE_integer('ofp_tcp_listen_port', ofproto_common.OFP_TCP_PORT,
'openflow tcp listen port')
gflags.DEFINE_integer('ofp_ssl_listen_port', ofproto_common.OFP_SSL_PORT,
'openflow ssl listen port')
gflags.DEFINE_string('ctl_privkey', None, 'controller private key')
gflags.DEFINE_string('ctl_cert', None, 'controller certificate')
gflags.DEFINE_string('ca_certs', None, 'CA certificates')
CONF = cfg.CONF
CONF.register_cli_opts([
cfg.StrOpt('ofp_listen_host', default='', help='openflow listen host'),
cfg.IntOpt('ofp_tcp_listen_port', default=ofproto_common.OFP_TCP_PORT,
help='openflow tcp listen port'),
cfg.IntOpt('ofp_ssl_listen_port', default=ofproto_common.OFP_SSL_PORT,
help='openflow ssl listen 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')
])
class OpenFlowController(object):
@ -63,26 +65,26 @@ class OpenFlowController(object):
self.server_loop()
def server_loop(self):
if FLAGS.ctl_privkey and FLAGS.ctl_cert is not None:
if FLAGS.ca_certs is not None:
server = StreamServer((FLAGS.ofp_listen_host,
FLAGS.ofp_ssl_listen_port),
if CONF.ctl_privkey and CONF.ctl_cert is not None:
if CONF.ca_certs is not None:
server = StreamServer((CONF.ofp_listen_host,
CONF.ofp_ssl_listen_port),
datapath_connection_factory,
keyfile=FLAGS.ctl_privkey,
certfile=FLAGS.ctl_cert,
keyfile=CONF.ctl_privkey,
certfile=CONF.ctl_cert,
cert_reqs=ssl.CERT_REQUIRED,
ca_certs=FLAGS.ca_certs,
ca_certs=CONF.ca_certs,
ssl_version=ssl.PROTOCOL_TLSv1)
else:
server = StreamServer((FLAGS.ofp_listen_host,
FLAGS.ofp_ssl_listen_port),
server = StreamServer((CONF.ofp_listen_host,
CONF.ofp_ssl_listen_port),
datapath_connection_factory,
keyfile=FLAGS.ctl_privkey,
certfile=FLAGS.ctl_cert,
keyfile=CONF.ctl_privkey,
certfile=CONF.ctl_cert,
ssl_version=ssl.PROTOCOL_TLSv1)
else:
server = StreamServer((FLAGS.ofp_listen_host,
FLAGS.ofp_tcp_listen_port),
server = StreamServer((CONF.ofp_listen_host,
CONF.ofp_tcp_listen_port),
datapath_connection_factory)
#LOG.debug('loop')

View File

@ -17,31 +17,30 @@
global flags
"""
import gflags
from openstack.common import cfg
FLAGS = gflags.FLAGS
CONF = cfg.CONF
# GLOBAL flags
gflags.DEFINE_boolean('monkey_patch', False, 'do monkey patch')
# app/quantum_adapter
gflags.DEFINE_string('quantum_url', 'http://localhost:9696',
'URL for connecting to quantum')
gflags.DEFINE_integer('quantum_url_timeout', 30,
'timeout value for connecting to quantum in seconds')
gflags.DEFINE_string('quantum_admin_username', 'quantum',
'username for connecting to quantum in admin context')
gflags.DEFINE_string('quantum_admin_password', 'service_password',
'password for connecting to quantum in admin context')
gflags.DEFINE_string('quantum_admin_tenant_name', 'service',
'tenant name for connecting to quantum in admin context')
gflags.DEFINE_string('quantum_admin_auth_url', 'http://localhost:5000/v2.0',
'auth url for connecting to quantum in admin context')
gflags.DEFINE_string(
'quantum_auth_strategy',
'keystone',
'auth strategy for connecting to quantum in admin context')
gflags.DEFINE_string('quantum_controller_addr', None,
'openflow mehod:address:port to set controller of'
CONF.register_cli_opts([
# GLOBAL flags
cfg.BoolOpt('monkey_patch', default=False, help='do monkey patch'),
# app/quantum_adapter
cfg.StrOpt('quantum_url', default='http://localhost:9696',
help='URL for connecting to quantum'),
cfg.IntOpt('quantum_url_timeout', default=30,
help='timeout value for connecting to quantum in seconds'),
cfg.StrOpt('quantum_admin_username', default='quantum',
help='username for connecting to quantum in admin context'),
cfg.StrOpt('quantum_admin_password', default='service_password',
help='password for connecting to quantum in admin context'),
cfg.StrOpt('quantum_admin_tenant_name', default='service',
help='tenant name for connecting to quantum in admin context'),
cfg.StrOpt('quantum_admin_auth_url', default='http://localhost:5000/v2.0',
help='auth url for connecting to quantum in admin context'),
cfg.StrOpt('quantum_auth_strategy', default='keystone',
help='auth strategy for connecting to quantum in admin'
'context'),
cfg.StrOpt('quantum_controller_addr', default=None,
help='openflow mehod:address:port to set controller of'
'ovs bridge')
])

View File

@ -19,7 +19,7 @@ slimmed down version of OVSBridge in quantum agent
"""
import functools
import gflags
from openstack.common import cfg
import logging
import ryu.exception as ryu_exc
@ -28,8 +28,10 @@ import ryu.lib.ovs.vsctl as ovs_vsctl
LOG = logging.getLogger(__name__)
FLAGS = gflags.FLAGS
gflags.DEFINE_integer('ovsdb_timeout', 2, 'ovsdb timeout')
CONF = cfg.CONF
CONF.register_opts([
cfg.IntOpt('ovsdb_timeout', default=2, help='ovsdb timeout')
])
class OVSBridgeNotFound(ryu_exc.RyuException):
@ -90,7 +92,7 @@ class OVSBridge(object):
super(OVSBridge, self).__init__()
self.datapath_id = datapath_id
self.vsctl = ovs_vsctl.VSCtl(ovsdb_addr)
self.timeout = timeout or FLAGS.ovsdb_timeout
self.timeout = timeout or CONF.ovsdb_timeout
self.exception = exception
self.br_name = None

View File

@ -14,7 +14,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import gflags
import logging
import os
@ -23,7 +22,6 @@ from ovs import (jsonrpc,
from ovs import util as ovs_util
from ovs.db import schema
FLAGS = gflags.FLAGS
LOG = logging.getLogger(__name__)

View File

@ -14,7 +14,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import gflags
from openstack.common import cfg
import inspect
import logging
import logging.handlers
@ -22,16 +22,18 @@ import os
import sys
FLAGS = gflags.FLAGS
CONF = cfg.CONF
gflags.DEFINE_integer('default_log_level', None, 'default log level')
gflags.DEFINE_bool('verbose', False, 'show debug output')
gflags.DEFINE_bool('use_stderr', True, 'log to standard error')
gflags.DEFINE_string('use_syslog', False, 'output to syslog')
gflags.DEFINE_string('log_dir', None, 'log file directory')
gflags.DEFINE_string('log_file', None, 'log file name')
gflags.DEFINE_string('log_file_mode', '0644', 'default log file permission')
CONF.register_cli_opts([
cfg.IntOpt('default_log_level', default=None, help='default log level'),
cfg.BoolOpt('verbose', default=False, help='show debug output'),
cfg.BoolOpt('use_stderr', default=True, help='log to standard error'),
cfg.StrOpt('use_syslog', default=False, help='output to syslog'),
cfg.StrOpt('log_dir', default=None, help='log file directory'),
cfg.StrOpt('log_file', default=None, help='log file name'),
cfg.StrOpt('log_file_mode', default='0644',
help='default log file permission')
])
_EARLY_LOG_HANDLER = None
@ -48,10 +50,10 @@ def early_init_log(level=None):
def _get_log_file():
if FLAGS.log_file:
return FLAGS.log_file
if FLAGS.log_dir:
return os.path.join(FLAGS.log_dir,
if CONF.log_file:
return CONF.log_file
if CONF.log_dir:
return os.path.join(CONF.log_dir,
os.path.basename(inspect.stack()[-1][1])) + '.log'
return None
@ -60,25 +62,25 @@ def init_log():
global _EARLY_LOG_HANDLER
log = logging.getLogger()
if FLAGS.use_stderr:
if CONF.use_stderr:
log.addHandler(logging.StreamHandler(sys.stderr))
if _EARLY_LOG_HANDLER is not None:
log.removeHandler(_EARLY_LOG_HANDLER)
_EARLY_LOG_HANDLER = None
if FLAGS.use_syslog:
if CONF.use_syslog:
syslog = logging.handlers.SysLogHandler(address='/dev/log')
log.addHandler(syslog)
log_file = _get_log_file()
if log_file is not None:
log.addHandler(logging.handlers.WatchedFileHandler(log_file))
mode = int(FLAGS.log_file_mode, 8)
mode = int(CONF.log_file_mode, 8)
os.chmod(log_file, mode)
if FLAGS.verbose:
if CONF.verbose:
log.setLevel(logging.DEBUG)
elif FLAGS.default_log_level is not None:
log.setLevel(FLAGS.default_log_level)
elif CONF.default_log_level is not None:
log.setLevel(CONF.default_log_level)
else:
log.setLevel(logging.INFO)

View File

@ -37,33 +37,6 @@ def import_module(modname):
return sys.modules[modname]
RYU_DEFAULT_FLAG_FILE = ('ryu.conf', 'etc/ryu/ryu.conf', '/etc/ryu/ryu.conf')
def find_flagfile(default_path=RYU_DEFAULT_FLAG_FILE):
if '--flagfile' in sys.argv:
return
script_dir = os.path.dirname(inspect.stack()[-1][1])
for filename in default_path:
if not os.path.isabs(filename):
if os.path.exists(filename):
# try relative to current path
filename = os.path.abspath(filename)
elif os.path.exists(os.path.join(script_dir, filename)):
# try relative to script dir
filename = os.path.join(script_dir, filename)
if not os.path.exists(filename):
continue
flagfile = '--flagfile=%s' % filename
sys.argv.insert(1, flagfile)
LOG.debug('flagfile = %s', filename)
return
def round_up(x, y):
return ((x + y - 1) / y) * y