aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Hardy <shardy@redhat.com>2015-01-22 12:17:44 +0000
committerSteven Hardy <shardy@redhat.com>2015-02-24 09:21:11 +0000
commitafed9e751c9eb70ea696436e07a535fc7c15783d (patch)
tree059f74155bf867153016d1edb431bb5fe11c20b4
parentc86a76e13ea07005e31890695c220081b0ed816d (diff)
Refactor noop to enable logging of disabled operations
Currently we only output the config file contents in noop mode, but it's very useful to see what would be done in terms of taking interfaces up and down, and especially what will be removed when --cleanup mode is specified So this refactors the operations skipped by noop into the base-class so we can conveniently log what they would do when --noop is selected. Change-Id: Ia9cfa9a05b2df02c165a2ff992765ab63e55ae6b
-rw-r--r--os_net_config/__init__.py32
-rw-r--r--os_net_config/impl_eni.py29
-rw-r--r--os_net_config/impl_ifcfg.py37
3 files changed, 58 insertions, 40 deletions
diff --git a/os_net_config/__init__.py b/os_net_config/__init__.py
index 3b01b71..8d241af 100644
--- a/os_net_config/__init__.py
+++ b/os_net_config/__init__.py
@@ -14,7 +14,16 @@
# License for the specific language governing permissions and limitations
# under the License.
+import logging
+import os
+
+from oslo_concurrency import processutils
+
from os_net_config import objects
+from os_net_config import utils
+
+
+logger = logging.getLogger(__name__)
class NotImplemented(Exception):
@@ -26,6 +35,7 @@ class NetConfig(object):
def __init__(self, noop=False):
self.noop = noop
+ self.log_prefix = "NOOP: " if noop else ""
def add_object(self, obj):
"""Convenience method to add any type of object to the network config.
@@ -85,3 +95,25 @@ class NetConfig(object):
mode).
"""
raise NotImplemented("apply is not implemented.")
+
+ def execute(self, msg, cmd, *args, **kwargs):
+ """Print a message and run a command.
+
+ Print a message and run a command with processutils
+ in noop mode, this just prints a message.
+ """
+ logger.info('%s%s' % (self.log_prefix, msg))
+ if not self.noop:
+ processutils.execute(cmd, *args, **kwargs)
+
+ def write_config(self, filename, data, msg=None):
+ msg = msg or "Writing config %s" % filename
+ logger.info('%s%s' % (self.log_prefix, msg))
+ if not self.noop:
+ utils.write_config(filename, data)
+
+ def remove_config(self, filename, msg=None):
+ msg = msg or "Removing config %s" % filename
+ logger.info('%s%s' % (self.log_prefix, msg))
+ if not self.noop:
+ os.remove(filename)
diff --git a/os_net_config/impl_eni.py b/os_net_config/impl_eni.py
index 93aa7db..880c4e4 100644
--- a/os_net_config/impl_eni.py
+++ b/os_net_config/impl_eni.py
@@ -21,8 +21,6 @@ import os_net_config
from os_net_config import objects
from os_net_config import utils
-from oslo_concurrency import processutils
-
logger = logging.getLogger(__name__)
@@ -212,27 +210,26 @@ class ENINetConfig(os_net_config.NetConfig):
new_config += iface_data
if (utils.diff(_network_config_path(), new_config)):
- if self.noop:
- return {"/etc/network/interfaces": new_config}
for interface in self.interfaces.keys():
- logger.info('running ifdown on interface: %s' % interface)
- processutils.execute('/sbin/ifdown', interface,
- check_exit_code=False)
+ msg = 'running ifdown on interface: %s' % interface
+ self.execute(msg, '/sbin/ifdown', interface,
+ check_exit_code=False)
for bridge in self.bridges.keys():
- logger.info('running ifdown on bridge: %s' % bridge)
- processutils.execute('/sbin/ifdown', bridge,
- check_exit_code=False)
+ msg = 'running ifdown on bridge: %s' % bridge
+ self.execute(msg, '/sbin/ifdown', bridge,
+ check_exit_code=False)
- logger.info('writing config file')
- utils.write_config(_network_config_path(), new_config)
+ self.write_config(_network_config_path(), new_config)
for bridge in self.bridges.keys():
- logger.info('running ifup on bridge: %s' % bridge)
- processutils.execute('/sbin/ifup', bridge)
+ msg = 'running ifup on bridge: %s' % bridge
+ self.execute(msg, '/sbin/ifup', bridge)
for interface in self.interfaces.keys():
- logger.info('running ifup on interface: %s' % interface)
- processutils.execute('/sbin/ifup', interface)
+ msg = 'running ifup on interface: %s' % interface
+ self.execute(msg, '/sbin/ifup', interface)
else:
logger.info('No interface changes are required.')
+
+ return {"/etc/network/interfaces": new_config}
diff --git a/os_net_config/impl_ifcfg.py b/os_net_config/impl_ifcfg.py
index 0c23630..56a0e47 100644
--- a/os_net_config/impl_ifcfg.py
+++ b/os_net_config/impl_ifcfg.py
@@ -16,16 +16,12 @@
import glob
import logging
-import os
import os_net_config
from os_net_config import objects
from os_net_config import utils
-from oslo_concurrency import processutils
-
-
logger = logging.getLogger(__name__)
@@ -258,40 +254,33 @@ class IfcfgNetConfig(os_net_config.NetConfig):
update_files[bridge_route_path] = route_data
logger.info('No changes required for bridge: %s' % bridge_name)
- if self.noop:
- return update_files
-
if cleanup:
for ifcfg_file in glob.iglob(cleanup_pattern()):
if ifcfg_file not in all_file_names:
interface_name = ifcfg_file[len(cleanup_pattern()) - 1:]
if interface_name != 'lo':
- logger.info('cleaning up interface: %s' %
- interface_name)
- processutils.execute('/sbin/ifdown', interface_name,
- check_exit_code=False)
- os.remove(ifcfg_file)
+ msg = 'cleaning up interface: %s' % interface_name
+ self.execute(msg, '/sbin/ifdown', interface_name,
+ check_exit_code=False)
+ self.remove_config(ifcfg_file)
for interface in restart_interfaces:
- logger.info('running ifdown on interface: %s' % interface)
- processutils.execute('/sbin/ifdown', interface,
- check_exit_code=False)
+ msg = 'running ifdown on interface: %s' % interface
+ self.execute(msg, '/sbin/ifdown', interface, check_exit_code=False)
for bridge in restart_bridges:
- logger.info('running ifdown on bridge: %s' % bridge)
- processutils.execute('/sbin/ifdown', bridge,
- check_exit_code=False)
+ msg = 'running ifdown on bridge: %s' % bridge
+ self.execute(msg, '/sbin/ifdown', bridge, check_exit_code=False)
for location, data in update_files.iteritems():
- logger.info('writing config file: %s' % location)
- utils.write_config(location, data)
+ self.write_config(location, data)
for bridge in restart_bridges:
- logger.info('running ifup on bridge: %s' % bridge)
- processutils.execute('/sbin/ifup', bridge)
+ msg = 'running ifup on bridge: %s' % bridge
+ self.execute(msg, '/sbin/ifup', bridge)
for interface in restart_interfaces:
- logger.info('running ifup on interface: %s' % interface)
- processutils.execute('/sbin/ifup', interface)
+ msg = 'running ifup on interface: %s' % interface
+ self.execute(msg, '/sbin/ifup', interface)
return update_files