Enable quantum agents to work with global cfg.CONF
This implements blueprint global-config-support A common configuration parse function is used by the service and the agent. In the case of the service, when loading the plugin, the configuration file will be appended to the existing cfg.CONF (this was originally created when quantum.conf was loaded). In the case of the agent a global cfg.CONF will be created. This task is a prerequisite for the RPC integration into Quantum. Change-Id: I24ef4a804578502bcce484f44dc55c8fe2aa913e
This commit is contained in:
parent
dde2388470
commit
e2d0eb6ad8
@ -42,8 +42,12 @@ agent_opts = [
|
||||
|
||||
|
||||
def parse(config_file):
|
||||
conf = cfg.ConfigOpts()
|
||||
conf(args=[], default_config_files=[config_file])
|
||||
conf = cfg.CONF
|
||||
if 'config_file' in conf:
|
||||
conf.config_file.append(config_file)
|
||||
else:
|
||||
conf.config_file = [config_file]
|
||||
conf(args=[], default_config_files=conf.config_file)
|
||||
conf.register_opts(vlan_opts, "VLANS")
|
||||
conf.register_opts(database_opts, "DATABASE")
|
||||
conf.register_opts(bridge_opts, "LINUX_BRIDGE")
|
||||
|
@ -40,8 +40,12 @@ agent_opts = [
|
||||
|
||||
|
||||
def parse(config_file):
|
||||
conf = cfg.ConfigOpts()
|
||||
conf(args=[], default_config_files=[config_file])
|
||||
conf = cfg.CONF
|
||||
if 'config_file' in conf:
|
||||
conf.config_file.append(config_file)
|
||||
else:
|
||||
conf.config_file = [config_file]
|
||||
conf(args=[], default_config_files=conf.config_file)
|
||||
conf.register_opts(database_opts, "DATABASE")
|
||||
conf.register_opts(ovs_opts, "OVS")
|
||||
conf.register_opts(agent_opts, "AGENT")
|
||||
|
@ -35,8 +35,12 @@ agent_opts = [
|
||||
|
||||
|
||||
def parse(config_file):
|
||||
conf = cfg.ConfigOpts()
|
||||
conf(args=[], default_config_files=[config_file])
|
||||
conf = cfg.CONF
|
||||
if 'config_file' in conf:
|
||||
conf.config_file.append(config_file)
|
||||
else:
|
||||
conf.config_file = [config_file]
|
||||
conf(args=[], default_config_files=conf.config_file)
|
||||
conf.register_opts(database_opts, "DATABASE")
|
||||
conf.register_opts(ovs_opts, "OVS")
|
||||
conf.register_opts(agent_opts, "AGENT")
|
||||
|
81
quantum/tests/unit/test_lb_config.py
Normal file
81
quantum/tests/unit/test_lb_config.py
Normal file
@ -0,0 +1,81 @@
|
||||
# Copyright (c) 2012 OpenStack, LLC.
|
||||
#
|
||||
# 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.
|
||||
|
||||
import os
|
||||
import tempfile
|
||||
import unittest
|
||||
|
||||
from quantum.openstack.common import cfg
|
||||
from quantum.plugins.linuxbridge.common import config
|
||||
|
||||
|
||||
class LinuxBridgeConfigTestCase(unittest.TestCase):
|
||||
def test_dummy(self):
|
||||
configs = """[DATABASE]
|
||||
sql_connection = testlink
|
||||
reconnect_interval=100
|
||||
[AGENT]
|
||||
root_helper = mysudo
|
||||
polling_interval=50
|
||||
"""
|
||||
|
||||
(fd, path) = tempfile.mkstemp(prefix='lb_config', suffix='.ini')
|
||||
|
||||
try:
|
||||
os.write(fd, configs)
|
||||
os.close(fd)
|
||||
|
||||
conf = config.parse(path)
|
||||
self.assertEqual('testlink', conf.DATABASE.sql_connection)
|
||||
self.assertEqual(100, conf.DATABASE.reconnect_interval)
|
||||
self.assertEqual(50, conf.AGENT.polling_interval)
|
||||
self.assertEqual('mysudo', conf.AGENT.root_helper)
|
||||
self.assertEqual(conf.AGENT.polling_interval,
|
||||
cfg.CONF.AGENT.polling_interval)
|
||||
finally:
|
||||
os.remove(path)
|
||||
|
||||
def test_defaults(self):
|
||||
configs = """
|
||||
"""
|
||||
|
||||
(fd, path) = tempfile.mkstemp(prefix='lb_config', suffix='.ini')
|
||||
|
||||
try:
|
||||
os.write(fd, configs)
|
||||
os.close(fd)
|
||||
|
||||
conf = config.parse(path)
|
||||
self.assertEqual('sqlite://', conf.DATABASE.sql_connection)
|
||||
self.assertEqual(2, conf.DATABASE.reconnect_interval)
|
||||
self.assertEqual(2, conf.AGENT.polling_interval)
|
||||
self.assertEqual('sudo', conf.AGENT.root_helper)
|
||||
self.assertEqual(1000, conf.VLANS.vlan_start)
|
||||
self.assertEqual(3000, conf.VLANS.vlan_end)
|
||||
self.assertEqual('eth1', conf.LINUX_BRIDGE.physical_interface)
|
||||
self.assertEqual(conf.DATABASE.sql_connection,
|
||||
cfg.CONF.DATABASE.sql_connection)
|
||||
self.assertEqual(conf.AGENT.root_helper,
|
||||
cfg.CONF.AGENT.root_helper)
|
||||
finally:
|
||||
os.remove(path)
|
||||
|
||||
def tearDown(self):
|
||||
"""Clear the test environment"""
|
||||
cfg.CONF.reset()
|
||||
cfg.CONF.unregister_opts(config.vlan_opts, "VLANS")
|
||||
cfg.CONF.unregister_opts(config.database_opts, "DATABASE")
|
||||
cfg.CONF.unregister_opts(config.bridge_opts, "LINUX_BRIDGE")
|
||||
cfg.CONF.unregister_opts(config.agent_opts, "AGENT")
|
@ -21,7 +21,7 @@ import os
|
||||
import tempfile
|
||||
import unittest
|
||||
|
||||
from quantum.openstack.common.cfg import ConfigFileValueError
|
||||
from quantum.openstack.common import cfg
|
||||
from quantum.plugins.openvswitch.common import config
|
||||
|
||||
|
||||
@ -54,6 +54,8 @@ polling_interval=50
|
||||
self.assertEqual(100, conf.DATABASE.reconnect_interval)
|
||||
self.assertEqual(50, conf.AGENT.polling_interval)
|
||||
self.assertEqual('mysudo', conf.AGENT.root_helper)
|
||||
self.assertEqual(conf.OVS.integration_bridge,
|
||||
cfg.CONF.OVS.integration_bridge)
|
||||
finally:
|
||||
os.remove(path)
|
||||
|
||||
@ -75,6 +77,10 @@ polling_interval=50
|
||||
self.assertEqual(2, conf.DATABASE.reconnect_interval)
|
||||
self.assertEqual(2, conf.AGENT.polling_interval)
|
||||
self.assertEqual('sudo', conf.AGENT.root_helper)
|
||||
self.assertEqual(conf.DATABASE.sql_connection,
|
||||
cfg.CONF.DATABASE.sql_connection)
|
||||
self.assertEqual(conf.AGENT.root_helper,
|
||||
cfg.CONF.AGENT.root_helper)
|
||||
finally:
|
||||
os.remove(path)
|
||||
|
||||
@ -106,12 +112,20 @@ enable_tunneling = notbool
|
||||
try:
|
||||
os.write(fd, configs)
|
||||
os.close(fd)
|
||||
|
||||
conf = config.parse(path)
|
||||
exception_raised = False
|
||||
try:
|
||||
tunnel = conf.OVS.enable_tunneling
|
||||
except ConfigFileValueError:
|
||||
except cfg.ConfigFileValueError:
|
||||
exception_raised = True
|
||||
self.assertTrue(exception_raised)
|
||||
finally:
|
||||
os.remove(path)
|
||||
|
||||
def tearDown(self):
|
||||
"""Clear the test environment"""
|
||||
cfg.CONF.reset()
|
||||
cfg.CONF.unregister_opts(config.database_opts, "DATABASE")
|
||||
cfg.CONF.unregister_opts(config.ovs_opts, "OVS")
|
||||
cfg.CONF.unregister_opts(config.agent_opts, "AGENT")
|
||||
|
85
quantum/tests/unit/test_ryu_config.py
Normal file
85
quantum/tests/unit/test_ryu_config.py
Normal file
@ -0,0 +1,85 @@
|
||||
# Copyright (c) 2012 OpenStack, LLC.
|
||||
#
|
||||
# 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.
|
||||
|
||||
import os
|
||||
import tempfile
|
||||
import unittest
|
||||
|
||||
from quantum.openstack.common import cfg
|
||||
from quantum.plugins.ryu.common import config
|
||||
|
||||
|
||||
class RyuConfigTestCase(unittest.TestCase):
|
||||
def test_config(self):
|
||||
configs = """[DATABASE]
|
||||
sql_connection = testlink
|
||||
reconnect_interval=100
|
||||
[OVS]
|
||||
enable_tunneling = True
|
||||
integration_bridge = mybrint
|
||||
local_ip = 10.0.0.3
|
||||
[AGENT]
|
||||
root_helper = mysudo
|
||||
polling_interval=50
|
||||
"""
|
||||
|
||||
(fd, path) = tempfile.mkstemp(prefix='ryu_config', suffix='.ini')
|
||||
|
||||
try:
|
||||
os.write(fd, configs)
|
||||
os.close(fd)
|
||||
|
||||
conf = config.parse(path)
|
||||
self.assertEqual('mybrint', conf.OVS.integration_bridge)
|
||||
self.assertEqual('testlink', conf.DATABASE.sql_connection)
|
||||
self.assertEqual(100, conf.DATABASE.reconnect_interval)
|
||||
self.assertEqual(50, conf.AGENT.polling_interval)
|
||||
self.assertEqual('mysudo', conf.AGENT.root_helper)
|
||||
self.assertEqual(conf.OVS.integration_bridge,
|
||||
cfg.CONF.OVS.integration_bridge)
|
||||
finally:
|
||||
os.remove(path)
|
||||
|
||||
def test_defaults(self):
|
||||
configs = """
|
||||
"""
|
||||
|
||||
(fd, path) = tempfile.mkstemp(prefix='ryu_config', suffix='.ini')
|
||||
|
||||
try:
|
||||
os.write(fd, configs)
|
||||
os.close(fd)
|
||||
|
||||
conf = config.parse(path)
|
||||
self.assertEqual('br-int', conf.OVS.integration_bridge)
|
||||
self.assertEqual('sqlite://', conf.DATABASE.sql_connection)
|
||||
self.assertEqual(2, conf.DATABASE.reconnect_interval)
|
||||
self.assertEqual(2, conf.AGENT.polling_interval)
|
||||
self.assertEqual('sudo', conf.AGENT.root_helper)
|
||||
self.assertEqual('127.0.0.1:6633', conf.OVS.openflow_controller)
|
||||
self.assertEqual('127.0.0.1:8080', conf.OVS.openflow_rest_api)
|
||||
self.assertEqual(conf.DATABASE.sql_connection,
|
||||
cfg.CONF.DATABASE.sql_connection)
|
||||
self.assertEqual(conf.AGENT.root_helper,
|
||||
cfg.CONF.AGENT.root_helper)
|
||||
finally:
|
||||
os.remove(path)
|
||||
|
||||
def tearDown(self):
|
||||
"""Clear the test environment"""
|
||||
cfg.CONF.reset()
|
||||
cfg.CONF.unregister_opts(config.database_opts, "DATABASE")
|
||||
cfg.CONF.unregister_opts(config.ovs_opts, "OVS")
|
||||
cfg.CONF.unregister_opts(config.agent_opts, "AGENT")
|
Loading…
Reference in New Issue
Block a user