# License for the specific language governing permissions and limitations
# under the License.
+import os
+
from oslo.config import cfg
from quantum.common import config
]
+def get_log_args(conf, log_file_name):
+ cmd_args = []
+ if conf.debug:
+ cmd_args.append('--debug')
+ if conf.verbose:
+ cmd_args.append('--verbose')
+ if (conf.log_dir or conf.log_file):
+ cmd_args.append('--log-file=%s' % log_file_name)
+ log_dir = None
+ if conf.log_dir and conf.log_file:
+ log_dir = os.path.dirname(
+ os.path.join(conf.log_dir, conf.log_file))
+ elif conf.log_dir:
+ log_dir = conf.log_dir
+ elif conf.log_file:
+ log_dir = os.path.dirname(conf.log_file)
+ if log_dir:
+ cmd_args.append('--log-dir=%s' % log_dir)
+ return cmd_args
+
+
def register_root_helper(conf):
# The first call is to ensure backward compatibility
conf.register_opts(ROOT_HELPER_OPTS)
router_ports[0].device_id)
def callback(pid_file):
- return ['quantum-ns-metadata-proxy',
- '--pid_file=%s' % pid_file,
- quantum_lookup_param,
- '--state_path=%s' % self.conf.state_path,
- '--metadata_port=%d' % METADATA_PORT]
+ proxy_cmd = ['quantum-ns-metadata-proxy',
+ '--pid_file=%s' % pid_file,
+ quantum_lookup_param,
+ '--state_path=%s' % self.conf.state_path,
+ '--metadata_port=%d' % METADATA_PORT]
+ proxy_cmd.extend(config.get_log_args(
+ cfg.CONF, 'quantum-ns-metadata-proxy%s.log' % network.id))
+ return proxy_cmd
+
pm = external_process.ProcessManager(
self.conf,
network.id,
def _spawn_metadata_proxy(self, router_info):
def callback(pid_file):
- return ['quantum-ns-metadata-proxy',
- '--pid_file=%s' % pid_file,
- '--router_id=%s' % router_info.router_id,
- '--state_path=%s' % self.conf.state_path]
+ proxy_cmd = ['quantum-ns-metadata-proxy',
+ '--pid_file=%s' % pid_file,
+ '--router_id=%s' % router_info.router_id,
+ '--state_path=%s' % self.conf.state_path]
+ proxy_cmd.extend(config.get_log_args(
+ cfg.CONF, 'quantum-ns-metadata-proxy%s.log' %
+ router_info.router_id))
+ return proxy_cmd
pm = external_process.ProcessManager(
self.conf,
config.register_root_helper(conf)
conf.register_opts(interface.OPTS)
conf.register_opts(external_process.OPTS)
- conf()
+ conf(project='quantum')
config.setup_logging(conf)
server = quantum_service.Service.create(
binary='quantum-l3-agent',
import webob
from quantum.common import config
+from quantum.common import utils
from quantum.openstack.common import log as logging
from quantum import wsgi
cfg.CONF.register_opts(MetadataProxyHandler.OPTS)
cfg.CONF(project='quantum')
config.setup_logging(cfg.CONF)
-
+ utils.log_opt_values(LOG)
proxy = UnixDomainMetadataProxy(cfg.CONF)
proxy.run()
from quantum.agent.linux import daemon
from quantum.common import config
+from quantum.common import utils
from quantum.openstack.common import log as logging
from quantum import wsgi
]
cfg.CONF.register_cli_opts(opts)
- cfg.CONF(project='quantum')
+ # Don't get the default configuration file
+ cfg.CONF(project='quantum', default_config_files=[])
config.setup_logging(cfg.CONF)
-
+ utils.log_opt_values(LOG)
proxy = ProxyDaemon(cfg.CONF.pid_file,
cfg.CONF.metadata_port,
network_id=cfg.CONF.network_id,
"""Utilities and helper functions."""
+import logging as std_logging
import os
import signal
import socket
def is_extension_supported(plugin, ext_alias):
return ext_alias in getattr(
plugin, "supported_extension_aliases", [])
+
+
+def log_opt_values(log):
+ cfg.CONF.log_opt_values(log, std_logging.DEBUG)
self.assertFalse(dhcp.needs_resync)
+class TestLogArgs(base.BaseTestCase):
+
+ def test_log_args_without_log_dir_and_file(self):
+ conf_dict = {'debug': True,
+ 'verbose': False,
+ 'log_dir': None,
+ 'log_file': None}
+ conf = dhcp_agent.DictModel(conf_dict)
+ expected_args = ['--debug']
+ args = config.get_log_args(conf, 'log_file_name')
+ self.assertEqual(expected_args, args)
+
+ def test_log_args_without_log_file(self):
+ conf_dict = {'debug': True,
+ 'verbose': True,
+ 'log_dir': '/etc/tests',
+ 'log_file': None}
+ conf = dhcp_agent.DictModel(conf_dict)
+ expected_args = ['--debug', '--verbose',
+ '--log-file=log_file_name',
+ '--log-dir=/etc/tests']
+ args = config.get_log_args(conf, 'log_file_name')
+ self.assertEqual(expected_args, args)
+
+ def test_log_args_with_log_dir_and_file(self):
+ conf_dict = {'debug': True,
+ 'verbose': False,
+ 'log_dir': '/etc/tests',
+ 'log_file': 'tests/filelog'}
+ conf = dhcp_agent.DictModel(conf_dict)
+ expected_args = ['--debug',
+ '--log-file=log_file_name',
+ '--log-dir=/etc/tests/tests']
+ args = config.get_log_args(conf, 'log_file_name')
+ self.assertEqual(expected_args, args)
+
+ def test_log_args_without_log_dir(self):
+ conf_dict = {'debug': True,
+ 'verbose': False,
+ 'log_file': 'tests/filelog',
+ 'log_dir': None}
+ conf = dhcp_agent.DictModel(conf_dict)
+ expected_args = ['--debug',
+ '--log-file=log_file_name',
+ '--log-dir=tests']
+ args = config.get_log_args(conf, 'log_file_name')
+ self.assertEqual(expected_args, args)
+
+
class TestDhcpAgentEventHandler(base.BaseTestCase):
def setUp(self):
super(TestDhcpAgentEventHandler, self).setUp()
self.call_driver_p.stop()
self.cache_p.stop()
self.plugin_p.stop()
+ cfg.CONF.reset()
super(TestDhcpAgentEventHandler, self).tearDown()
def test_enable_dhcp_helper(self):
def test_enable_isolated_metadata_proxy_with_metadata_network(self):
cfg.CONF.set_override('enable_metadata_network', True)
+ cfg.CONF.set_override('debug', True)
+ cfg.CONF.set_override('log_file', 'test.log')
class_path = 'quantum.agent.linux.ip_lib.IPWrapper'
self.external_process_p.stop()
# Ensure the mock is restored if this test fail
ip_wrapper.assert_has_calls([mock.call(
'sudo',
'qdhcp-12345678-1234-5678-1234567890ab'),
- mock.call().netns.execute(['quantum-ns-metadata-proxy',
- mock.ANY,
- '--router_id=forzanapoli',
- mock.ANY,
- mock.ANY])
+ mock.call().netns.execute([
+ 'quantum-ns-metadata-proxy',
+ mock.ANY,
+ '--router_id=forzanapoli',
+ mock.ANY,
+ mock.ANY,
+ '--debug',
+ ('--log-file=quantum-ns-metadata-proxy%s.log' %
+ fake_meta_network.id)])
])
finally:
self.external_process_p.start()
- cfg.CONF.set_override('enable_metadata_network', False)
def test_network_create_end(self):
payload = dict(network=dict(id=fake_network.id))
from quantum.agent.metadata import agent
from quantum.tests import base
+from quantum.common import utils
class FakeConf(object):
with mock.patch('eventlet.monkey_patch') as eventlet:
with mock.patch.object(agent, 'config') as config:
with mock.patch.object(agent, 'cfg') as cfg:
- agent.main()
-
- self.assertTrue(eventlet.called)
- self.assertTrue(config.setup_logging.called)
- proxy.assert_has_calls([
- mock.call(cfg.CONF),
- mock.call().run()]
- )
+ with mock.patch.object(utils, 'cfg') as utils_cfg:
+ agent.main()
+
+ self.assertTrue(eventlet.called)
+ self.assertTrue(config.setup_logging.called)
+ proxy.assert_has_calls([
+ mock.call(cfg.CONF),
+ mock.call().run()]
+ )
from quantum.agent.metadata import namespace_proxy as ns_proxy
from quantum.tests import base
+from quantum.common import utils
class FakeConf(object):
with mock.patch('eventlet.monkey_patch') as eventlet:
with mock.patch.object(ns_proxy, 'config') as config:
with mock.patch.object(ns_proxy, 'cfg') as cfg:
- cfg.CONF.router_id = 'router_id'
- cfg.CONF.network_id = None
- cfg.CONF.metadata_port = 9697
- cfg.CONF.pid_file = 'pidfile'
- cfg.CONF.daemonize = True
- ns_proxy.main()
-
- self.assertTrue(eventlet.called)
- self.assertTrue(config.setup_logging.called)
- daemon.assert_has_calls([
- mock.call('pidfile', 9697, router_id='router_id',
- network_id=None),
- mock.call().start()]
- )
+ with mock.patch.object(utils, 'cfg') as utils_cfg:
+ cfg.CONF.router_id = 'router_id'
+ cfg.CONF.network_id = None
+ cfg.CONF.metadata_port = 9697
+ cfg.CONF.pid_file = 'pidfile'
+ cfg.CONF.daemonize = True
+ utils_cfg.CONF.log_opt_values.return_value = None
+ ns_proxy.main()
+
+ self.assertTrue(eventlet.called)
+ self.assertTrue(config.setup_logging.called)
+ daemon.assert_has_calls([
+ mock.call('pidfile', 9697,
+ router_id='router_id',
+ network_id=None),
+ mock.call().start()]
+ )
def test_main_dont_fork(self):
with mock.patch.object(ns_proxy, 'ProxyDaemon') as daemon:
with mock.patch('eventlet.monkey_patch') as eventlet:
with mock.patch.object(ns_proxy, 'config') as config:
with mock.patch.object(ns_proxy, 'cfg') as cfg:
- cfg.CONF.router_id = 'router_id'
- cfg.CONF.network_id = None
- cfg.CONF.metadata_port = 9697
- cfg.CONF.pid_file = 'pidfile'
- cfg.CONF.daemonize = False
- ns_proxy.main()
-
- self.assertTrue(eventlet.called)
- self.assertTrue(config.setup_logging.called)
- daemon.assert_has_calls([
- mock.call('pidfile', 9697, router_id='router_id',
- network_id=None),
- mock.call().run()]
- )
+ with mock.patch.object(utils, 'cfg') as utils_cfg:
+ cfg.CONF.router_id = 'router_id'
+ cfg.CONF.network_id = None
+ cfg.CONF.metadata_port = 9697
+ cfg.CONF.pid_file = 'pidfile'
+ cfg.CONF.daemonize = False
+ utils_cfg.CONF.log_opt_values.return_value = None
+ ns_proxy.main()
+
+ self.assertTrue(eventlet.called)
+ self.assertTrue(config.setup_logging.called)
+ daemon.assert_has_calls([
+ mock.call('pidfile', 9697,
+ router_id='router_id',
+ network_id=None),
+ mock.call().run()]
+ )