summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThierry Carrez <thierry@openstack.org>2011-08-09 12:21:28 +0100
committerThierry Carrez <thierry@openstack.org>2011-08-09 12:21:28 +0100
commit7e810e1f266daaa63167ea8412dc0416e88f688f (patch)
treee2c1a9908fce2965c9f5b98a1e76a5930b9d0954
parented9ea0848e4c8e8220a7f3bc175d7855c88c84d0 (diff)
downloadnova-7e810e1f266daaa63167ea8412dc0416e88f688f.tar.gz
nova-7e810e1f266daaa63167ea8412dc0416e88f688f.tar.xz
nova-7e810e1f266daaa63167ea8412dc0416e88f688f.zip
Fix usage of sudo -E and addl_env in dnsmasq/radvd calls, remove addl_env support, fix fake_execute allowed kwargs
-rw-r--r--nova/network/linux_net.py63
-rw-r--r--nova/tests/fake_utils.py12
-rw-r--r--nova/utils.py8
3 files changed, 35 insertions, 48 deletions
diff --git a/nova/network/linux_net.py b/nova/network/linux_net.py
index 3c62c75cd..a8af4af57 100644
--- a/nova/network/linux_net.py
+++ b/nova/network/linux_net.py
@@ -617,11 +617,26 @@ def update_dhcp(context, network_ref):
else:
LOG.debug(_('Pid %d is stale, relaunching dnsmasq'), pid)
- # FLAGFILE and DNSMASQ_INTERFACE in env
- env = {'FLAGFILE': FLAGS.dhcpbridge_flagfile,
- 'DNSMASQ_INTERFACE': network_ref['bridge']}
- command = _dnsmasq_cmd(network_ref)
- _execute(*command, addl_env=env)
+ cmd = ['FLAGFILE="%s"' % FLAGS.dhcpbridge_flagfile,
+ 'DNSMASQ_INTERFACE="%s"' % network_ref['bridge'],
+ 'dnsmasq',
+ '--strict-order',
+ '--bind-interfaces',
+ '--interface=%s' % network_ref['bridge'],
+ '--conf-file=%s' % FLAGS.dnsmasq_config_file,
+ '--domain=%s' % FLAGS.dhcp_domain,
+ '--pid-file=%s' % _dhcp_file(network_ref['bridge'], 'pid'),
+ '--listen-address=%s' % network_ref['dhcp_server'],
+ '--except-interface=lo',
+ '--dhcp-range=%s,static,120s' % network_ref['dhcp_start'],
+ '--dhcp-lease-max=%s' % len(netaddr.IPNetwork(network_ref['cidr'])),
+ '--dhcp-hostsfile=%s' % _dhcp_file(network_ref['bridge'], 'conf'),
+ '--dhcp-script=%s' % FLAGS.dhcpbridge,
+ '--leasefile-ro']
+ if FLAGS.dns_server:
+ cmd += ['-h', '-R', '--server=%s' % FLAGS.dns_server]
+
+ _execute(*cmd, run_as_root=True)
@utils.synchronized('radvd_start')
@@ -659,8 +674,12 @@ interface %s
LOG.debug(_('killing radvd threw %s'), exc)
else:
LOG.debug(_('Pid %d is stale, relaunching radvd'), pid)
- command = _ra_cmd(network_ref)
- _execute(*command)
+
+ cmd = ['radvd',
+ '-C', '%s' % _ra_file(network_ref['bridge'], 'conf'),
+ '-p', '%s' % _ra_file(network_ref['bridge'], 'pid')]
+
+ _execute(*cmd, run_as_root=True)
def _host_lease(fixed_ip_ref):
@@ -704,36 +723,6 @@ def _device_exists(device):
return not err
-def _dnsmasq_cmd(net):
- """Builds dnsmasq command."""
- cmd = ['sudo', '-E', 'dnsmasq',
- '--strict-order',
- '--bind-interfaces',
- '--interface=%s' % net['bridge'],
- '--conf-file=%s' % FLAGS.dnsmasq_config_file,
- '--domain=%s' % FLAGS.dhcp_domain,
- '--pid-file=%s' % _dhcp_file(net['bridge'], 'pid'),
- '--listen-address=%s' % net['dhcp_server'],
- '--except-interface=lo',
- '--dhcp-range=%s,static,120s' % net['dhcp_start'],
- '--dhcp-lease-max=%s' % len(netaddr.IPNetwork(net['cidr'])),
- '--dhcp-hostsfile=%s' % _dhcp_file(net['bridge'], 'conf'),
- '--dhcp-script=%s' % FLAGS.dhcpbridge,
- '--leasefile-ro']
- if FLAGS.dns_server:
- cmd += ['-h', '-R', '--server=%s' % FLAGS.dns_server]
- return cmd
-
-
-def _ra_cmd(net):
- """Builds radvd command."""
- cmd = ['sudo', '-E', 'radvd',
-# '-u', 'nobody',
- '-C', '%s' % _ra_file(net['bridge'], 'conf'),
- '-p', '%s' % _ra_file(net['bridge'], 'pid')]
- return cmd
-
-
def _stop_dnsmasq(network):
"""Stops the dnsmasq instance for a given network."""
pid = _dnsmasq_pid_for(network)
diff --git a/nova/tests/fake_utils.py b/nova/tests/fake_utils.py
index be59970c9..72f79921e 100644
--- a/nova/tests/fake_utils.py
+++ b/nova/tests/fake_utils.py
@@ -63,9 +63,11 @@ def fake_execute(*cmd_parts, **kwargs):
"""
global _fake_execute_repliers
- process_input = kwargs.get('process_input', None)
- addl_env = kwargs.get('addl_env', None)
- check_exit_code = kwargs.get('check_exit_code', 0)
+ process_input = kwargs.pop('process_input', None)
+ check_exit_code = kwargs.pop('check_exit_code', 0)
+ delay_on_retry = kwargs.pop('delay_on_retry', True)
+ attempts = kwargs.pop('attempts', 1)
+ run_as_root = kwargs.pop('run_as_root', False)
cmd_str = ' '.join(str(part) for part in cmd_parts)
LOG.debug(_("Faking execution of cmd (subprocess): %s"), cmd_str)
@@ -87,7 +89,9 @@ def fake_execute(*cmd_parts, **kwargs):
# Alternative is a function, so call it
reply = reply_handler(cmd_parts,
process_input=process_input,
- addl_env=addl_env,
+ delay_on_retry=delay_on_retry,
+ attempts=attempts,
+ run_as_root=run_as_root,
check_exit_code=check_exit_code)
except exception.ProcessExecutionError as e:
LOG.debug(_('Faked command raised an exception %s' % str(e)))
diff --git a/nova/utils.py b/nova/utils.py
index d691481f8..dc81abdb9 100644
--- a/nova/utils.py
+++ b/nova/utils.py
@@ -132,7 +132,6 @@ def execute(*cmd, **kwargs):
:cmd Passed to subprocess.Popen.
:process_input Send to opened process.
- :addl_env Added to the processes env.
:check_exit_code Defaults to 0. Raise exception.ProcessExecutionError
unless program exits with this code.
:delay_on_retry True | False. Defaults to True. If set to True, wait a
@@ -147,7 +146,6 @@ def execute(*cmd, **kwargs):
"""
process_input = kwargs.pop('process_input', None)
- addl_env = kwargs.pop('addl_env', None)
check_exit_code = kwargs.pop('check_exit_code', 0)
delay_on_retry = kwargs.pop('delay_on_retry', True)
attempts = kwargs.pop('attempts', 1)
@@ -164,16 +162,12 @@ def execute(*cmd, **kwargs):
attempts -= 1
try:
LOG.debug(_('Running cmd (subprocess): %s'), ' '.join(cmd))
- env = os.environ.copy()
- if addl_env:
- env.update(addl_env)
_PIPE = subprocess.PIPE # pylint: disable=E1101
obj = subprocess.Popen(cmd,
stdin=_PIPE,
stdout=_PIPE,
stderr=_PIPE,
- close_fds=True,
- env=env)
+ close_fds=True)
result = None
if process_input is not None:
result = obj.communicate(process_input)