diff --git a/bin/neutron-ofswitch-agent b/bin/neutron-ofswitch-agent new file mode 100755 index 00000000..2778b220 --- /dev/null +++ b/bin/neutron-ofswitch-agent @@ -0,0 +1,19 @@ +#!/usr/bin/env python + +# Copyright (C) 2011, 2012 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ryu.cmd.ofs_neutron_agent import main +main() diff --git a/ryu/cmd/ofs_neutron_agent.py b/ryu/cmd/ofs_neutron_agent.py new file mode 100755 index 00000000..b38fefed --- /dev/null +++ b/ryu/cmd/ofs_neutron_agent.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python +# +# Copyright (C) 2014 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2014 VA Linux Systems Japan K.K. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# @author: Fumihiko Kakuma, VA Linux Systems Japan K.K. + +from ryu.lib import hub +hub.patch() + +# TODO: +# Right now, we have our own patched copy of ovs python bindings +# Once our modification is upstreamed and widely deployed, +# use it +# +# NOTE: this modifies sys.path and thus affects the following imports. +# eg. oslo.config.cfg. +import ryu.contrib + +from oslo.config import cfg +import sys + +from neutron.openstack.common import log as os_logging +from neutron.common import config as osn_config + +from ryu import flags +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 + + +LOG = os_logging.getLogger(__name__) +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(): + try: + CONF(project='ryu', version='ofs_neutron_agent %s' % version, + default_config_files=['/usr/local/etc/ryu/ryu.conf']) + except cfg.ConfigFilesNotFoundError: + CONF(project='ryu', version='ofs_neutron_agent %s' % version) + + osn_config.setup_logging(CONF) + + app_lists = CONF.app_lists + CONF.app + if not app_lists: + app_lists = ['ryu.app.ofctl.service', + 'neutron.plugins.ofswitch.agent.ofs_neutron_agent'] + + app_mgr = AppManager.get_instance() + app_mgr.load_apps(app_lists) + contexts = app_mgr.create_contexts() + services = [] + services.extend(app_mgr.instantiate_apps(**contexts)) + + webapp = wsgi.start_service(app_mgr) + if webapp: + thr = hub.spawn(webapp) + services.append(thr) + + try: + hub.joinall(services) + finally: + app_mgr.close() + + +if __name__ == "__main__": + main()