For the linuxbridge, openvswitch, nec, and ryu plugin agents,
require the core_plugin configuration option, and throw an
exception, if not present. Note: cannot make this a required
option for all agents, as there are agent that include the
core config options, but do not require core_plugin.
In addition, log (as debug) the configuration options that
have been loaded at start-up for these four agents. This will
help with diagnosing start-up issues related to the
configuraiton settings (or lack of).
Tested that exception thrown, when missing core_plugin
value in config file(s) included, for these four agents.
bug
1059923
Change-Id: I813f0c2a3d0ec01be74a34e56ab085979197a16a
--- /dev/null
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+# Copyright 2013 Cisco Systems, Inc.
+# All Rights Reserved.
+#
+# 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: Paul Michali, Cisco Systems, Inc.
+
+
+def core_config_options(options):
+ '''Validate core configuration options.
+
+ Make sure that core configuration options that are needed are present and,
+ if not, generate warnings/errors, based on the severity. Will be used
+ only by the agents that require the option(s).
+ '''
+
+ if options.core_plugin is None:
+ raise Exception(_('Quantum core_plugin not configured!'))
import time
import eventlet
+import logging as std_logging
import pyudev
from quantum.agent.linux import ip_lib
from quantum.agent.linux import utils
from quantum.agent import rpc as agent_rpc
from quantum.agent import securitygroups_rpc as sg_rpc
+from quantum.agent.common import validate
from quantum.common import config as logging_config
from quantum.common import topics
from quantum.common import utils as q_utils
cfg.CONF(project='quantum')
logging_config.setup_logging(cfg.CONF)
+
+ cfg.CONF.log_opt_values(LOG, std_logging.DEBUG)
+ validate.core_config_options(cfg.CONF)
+
try:
interface_mappings = q_utils.parse_mappings(
cfg.CONF.LINUX_BRIDGE.physical_interface_mappings)
import socket
import sys
import time
+import logging as std_logging
+from quantum.agent.common import validate
from quantum.agent.linux import ovs_lib
from quantum.common import config as logging_config
from quantum.common import topics
logging_config.setup_logging(config.CONF)
+ config.CONF.log_opt_values(LOG, std_logging.DEBUG)
+ validate.core_config_options(config.CONF)
+
# Determine which agent type to use.
integ_br = config.OVS.integration_bridge
root_helper = config.AGENT.root_helper
import time
import eventlet
+import logging as std_logging
+from quantum.agent.common import validate
from quantum.agent.linux import ip_lib
from quantum.agent.linux import ovs_lib
from quantum.agent.linux import utils
cfg.CONF(project='quantum')
logging_config.setup_logging(cfg.CONF)
+ cfg.CONF.log_opt_values(LOG, std_logging.DEBUG)
+ validate.core_config_options(cfg.CONF)
+
try:
agent_config = create_agent_config_map(cfg.CONF)
except ValueError as e:
import socket
import sys
+import logging as std_logging
import netifaces
from ryu.app import client
from ryu.app import conf_switch_key
from ryu.app import rest_nw_id
from sqlalchemy.ext.sqlsoup import SqlSoup
+from quantum.agent.common import validate
from quantum.agent.linux import ovs_lib
from quantum.agent.linux.ovs_lib import VifPort
from quantum.common import config as logging_config
logging_config.setup_logging(cfg.CONF)
+ cfg.CONF.log_opt_values(LOG, std_logging.DEBUG)
+ validate.core_config_options(cfg.CONF)
+
integ_br = cfg.CONF.OVS.integration_bridge
root_helper = cfg.CONF.AGENT.root_helper
options = {"sql_connection": cfg.CONF.DATABASE.sql_connection}
# License for the specific language governing permissions and limitations
# under the License.
+import unittest2 as unittest
+
from quantum.agent.common import config
+from quantum.agent.common import validate
+from quantum.openstack.common import cfg
def test_setup_conf():
conf = config.setup_conf()
assert conf.state_path.endswith('/var/lib/quantum')
+
+
+class TestCoreConfigOptions(unittest.TestCase):
+
+ def setUp(self):
+ self._saved_core_plugin = cfg.CONF.core_plugin
+
+ def tearDown(self):
+ cfg.CONF.set_override('core_plugin', self._saved_core_plugin)
+
+ def test_missing_required_core_option(self):
+ with self.assertRaises(Exception) as ex:
+ validate.core_config_options(cfg.CONF)
+
+ def test_have_required_core_option(self):
+ cfg.CONF.set_override('core_plugin', 'some_core_plugin_option')
+ validate.core_config_options(cfg.CONF)