Move noop flag to provider base-class

Moving this flag makes it easier to implement additional functions
which work differently depending on noop mode being set, vs passing
it into every function like apply()

Change-Id: I796792aece3e40322523e910a3b87f7ab9a451dd
This commit is contained in:
Steven Hardy
2015-01-22 11:33:38 +00:00
parent a4ad189558
commit 70c235d30a
4 changed files with 20 additions and 16 deletions

View File

@@ -24,6 +24,9 @@ class NotImplemented(Exception):
class NetConfig(object):
"""Configure network interfaces using the ifcfg format."""
def __init__(self, noop=False):
self.noop = noop
def add_object(self, obj):
"""Convenience method to add any type of object to the network config.
See objects.py.
@@ -71,10 +74,9 @@ class NetConfig(object):
"""
raise NotImplemented("add_bond is not implemented.")
def apply(self, noop=False, cleanup=False):
def apply(self, cleanup=False):
"""Apply the network configuration.
:param noop: A boolean which indicates whether this is a no-op.
:param cleanup: A boolean which indicates whether any undefined
(existing but not present in the object model) interfaces
should be disabled and deleted.

View File

@@ -112,19 +112,19 @@ def main(argv=sys.argv):
provider = None
if opts.provider:
if opts.provider == 'ifcfg':
provider = impl_ifcfg.IfcfgNetConfig()
provider = impl_ifcfg.IfcfgNetConfig(noop=opts.noop)
elif opts.provider == 'eni':
provider = impl_eni.ENINetConfig()
provider = impl_eni.ENINetConfig(noop=opts.noop)
elif opts.provider == 'iproute':
provider = impl_iproute.IPRouteNetConfig()
provider = impl_iproute.IPRouteNetConfig(noop=opts.noop)
else:
logger.error('Invalid provider specified.')
return 1
else:
if os.path.exists('/etc/sysconfig/network-scripts/'):
provider = impl_ifcfg.IfcfgNetConfig()
provider = impl_ifcfg.IfcfgNetConfig(noop=opts.noop)
elif os.path.exists('/etc/network/'):
provider = impl_eni.ENINetConfig()
provider = impl_eni.ENINetConfig(noop=opts.noop)
else:
logger.error('Unable to set provider for this operating system.')
return 1
@@ -161,7 +161,7 @@ def main(argv=sys.argv):
iface_json.update({'persist_mapping': persist_mapping})
obj = objects.object_from_json(iface_json)
provider.add_object(obj)
files_changed = provider.apply(noop=opts.noop, cleanup=opts.cleanup)
files_changed = provider.apply(cleanup=opts.cleanup)
if opts.noop:
for location, data in files_changed.iteritems():
print "File: %s\n" % location

View File

@@ -39,7 +39,8 @@ class ENINetConfig(os_net_config.NetConfig):
/etc/network/interfaces format.
"""
def __init__(self):
def __init__(self, noop=False):
super(ENINetConfig, self).__init__(noop)
self.interfaces = {}
self.routes = {}
self.bridges = {}
@@ -188,13 +189,13 @@ class ENINetConfig(os_net_config.NetConfig):
self.routes[interface_name] = data
logger.debug('route data: %s' % self.routes[interface_name])
def apply(self, noop=False, cleanup=False):
def apply(self, cleanup=False):
"""Apply the network configuration.
:param noop: A boolean which indicates whether this is a no-op.
:returns: a dict of the format: filename/data which contains info
for each file that was changed (or would be changed if in --noop
mode).
Note the noop mode is set via the constructor noop boolean
"""
new_config = ""
@@ -211,7 +212,7 @@ class ENINetConfig(os_net_config.NetConfig):
new_config += iface_data
if (utils.diff(_network_config_path(), new_config)):
if noop:
if self.noop:
return {"/etc/network/interfaces": new_config}
for interface in self.interfaces.keys():
logger.info('running ifdown on interface: %s' % interface)

View File

@@ -49,7 +49,8 @@ def cleanup_pattern():
class IfcfgNetConfig(os_net_config.NetConfig):
"""Configure network interfaces using the ifcfg format."""
def __init__(self):
def __init__(self, noop=False):
super(IfcfgNetConfig, self).__init__(noop)
self.interface_data = {}
self.route_data = {}
self.bridge_data = {}
@@ -211,16 +212,16 @@ class IfcfgNetConfig(os_net_config.NetConfig):
if bond.routes:
self._add_routes(bond.name, bond.routes)
def apply(self, noop=False, cleanup=False):
def apply(self, cleanup=False):
"""Apply the network configuration.
:param noop: A boolean which indicates whether this is a no-op.
:param cleanup: A boolean which indicates whether any undefined
(existing but not present in the object model) interface
should be disabled and deleted.
:returns: a dict of the format: filename/data which contains info
for each file that was changed (or would be changed if in --noop
mode).
Note the noop mode is set via the constructor noop boolean
"""
logger.info('applying network configs...')
restart_interfaces = []
@@ -257,7 +258,7 @@ class IfcfgNetConfig(os_net_config.NetConfig):
update_files[bridge_route_path] = route_data
logger.info('No changes required for bridge: %s' % bridge_name)
if noop:
if self.noop:
return update_files
if cleanup: