Adding support to manage networks on Debian/Ubuntu systems.

This commit is contained in:
Gareth J. Greenaway 2013-12-04 20:34:59 -08:00
parent 7442158364
commit e30bd1673e
9 changed files with 1287 additions and 7 deletions

1206
salt/modules/debian_ip.py Normal file

File diff suppressed because it is too large Load diff

View file

@ -887,7 +887,7 @@ def build_interface(iface, iface_type, enabled, **settings):
return ''
ifcfg = template.render(opts)
if settings['test']:
if 'test' in settings and settings['test']:
return _read_temp(ifcfg)
_write_file_iface(iface, ifcfg, _RH_NETWORK_SCRIPT_DIR, 'ifcfg-{0}')

View file

@ -158,6 +158,9 @@ from salt.loader import _create_loader
# Define the module's virtual name
__virtualname__ = 'network'
# Set up logging
import logging
log = logging.getLogger(__name__)
def __virtual__():
'''
@ -197,13 +200,15 @@ def managed(name, type, enabled=True, **kwargs):
'result': True,
'comment': 'Interface {0} is up to date.'.format(name),
}
kwargs['test'] = __opts__['test']
#kwargs['test'] = __opts__['test']
if not kwargs.has_key('test'):
kwargs['test'] = False
# Build interface
try:
old = __salt__['ip.get_interface'](name)
new = __salt__['ip.build_interface'](name, type, enabled, **kwargs)
if __opts__['test']:
if kwargs['test']:
if old == new:
pass
if not old and new:
@ -218,9 +223,13 @@ def managed(name, type, enabled=True, **kwargs):
ret['changes']['interface'] = ''.join(diff)
else:
if not old and new:
ret['comment'] = 'Interface {0} ' \
'added.'.format(name)
ret['changes']['interface'] = 'Added network interface.'
elif old != new:
diff = difflib.unified_diff(old, new)
ret['comment'] = 'Interface {0} ' \
'updated.'.format(name)
ret['changes']['interface'] = ''.join(diff)
except AttributeError as error:
ret['result'] = False
@ -232,7 +241,7 @@ def managed(name, type, enabled=True, **kwargs):
try:
old = __salt__['ip.get_bond'](name)
new = __salt__['ip.build_bond'](name, **kwargs)
if __opts__['test']:
if kwargs['test']:
if old == new:
pass
if not old and new:
@ -247,9 +256,13 @@ def managed(name, type, enabled=True, **kwargs):
ret['changes']['bond'] = ''.join(diff)
else:
if not old and new:
ret['comment'] = 'Bond interface {0} ' \
'added.'.format(name)
ret['changes']['bond'] = 'Added bond {0}.'.format(name)
elif old != new:
diff = difflib.unified_diff(old, new)
ret['comment'] = 'Bond interface {0} ' \
'updated.'.format(name)
ret['changes']['bond'] = ''.join(diff)
except AttributeError as error:
#TODO Add a way of reversing the interface changes.
@ -257,7 +270,7 @@ def managed(name, type, enabled=True, **kwargs):
ret['comment'] = error.message
return ret
if __opts__['test']:
if kwargs['test']:
return ret
# Bring up/shutdown interface
@ -295,12 +308,15 @@ def routes(name, **kwargs):
'comment': 'Interface {0} routes are up to date.'.format(name),
}
apply_routes = False
kwargs['test'] = __opts__['test']
#kwargs['test'] = __opts__['test']
if not kwargs.has_key('test'):
kwargs['test'] = False
# Build interface routes
try:
old = __salt__['ip.get_routes'](name)
new = __salt__['ip.build_routes'](name, **kwargs)
if __opts__['test']:
if kwargs['test']:
if old == new:
return ret
if not old and new:
@ -315,10 +331,12 @@ def routes(name, **kwargs):
return ret
if not old and new:
apply_routes = True
ret['comment'] = 'Interface {0} routes added.'.format(name)
ret['changes']['network_routes'] = 'Added interface {0} routes.'.format(name)
elif old != new:
diff = difflib.unified_diff(old, new)
apply_routes = True
ret['comment'] = 'Interface {0} routes updated.'.format(name)
ret['changes']['network_routes'] = ''.join(diff)
except AttributeError as error:
ret['result'] = False

View file

@ -0,0 +1,3 @@
alias {{name}} bonding
options {{name}} {% for item in bonding %}{{item}}={{bonding[item]}} {%endfor%}

View file

@ -0,0 +1,28 @@
{% if data.enabled %}auto {{name}}
{%endif%}{% if data.hotplug %}allow-hotplug {{name}}
{%endif%}{% for interface in data.data %}iface {{name}} {{interface.inet_type}} {{interface.proto}}
{% if interface.address %} address {{interface.address}}
{%endif%}{% if interface.netmask %} netmask {{interface.netmask}}
{%endif%}{% if interface.broadcast %} broadcast {{interface.broadcast}}
{%endif%}{% if interface.gateway %} gateway {{interface.gateway}}
{%endif%}{% if interface.addr %} hwaddress {{interface.addr}}
{%endif%}{% if interface.vlan_raw_device %} vlan-raw-device {{interface.vlan_raw_device}}
{%endif%}{%if interface.ethtool %}{%for item in interface.ethtool_keys %} {{item}} {{interface.ethtool[item]}}
{%endfor%}{%endif%}{%if data.bonding %}{%for item in data.bonding %} bond_{{item}} {{data.bonding[item]}}
{%endfor%}{%endif%}{% if interface.bridge_options -%}
{% if interface.bridge_options.ports %} bridge_ports {{interface.bridge_options.ports}}
{%endif-%}
{%endif%}{% if interface.up_cmds %}{% for cmd in interface.up_cmds %} up {{ cmd }}
{%endfor-%}
{%endif%}{% if interface.down_cmds %}{% for cmd in interface.down_cmds %} down {{ cmd }}
{%endfor-%}
{%endif%}{% if interface.pre_up_cmds %}{% for cmd in interface.pre_up_cmds %} pre-up {{ cmd }}
{%endfor-%}
{%endif%}{% if interface.post_up_cmds %}{% for cmd in interface.post_up_cmds %} post-up {{ cmd }}
{%endfor-%}
{%endif%}{% if interface.pre_down_cmds %}{% for cmd in interface.pre_down_cmds %} pre-down {{ cmd }}
{%endfor-%}
{%endif%}{% if interface.post_down_cmds %}{% for cmd in interface.post_down_cmds %} post-down {{ cmd }}
{%endfor-%}
{%endif%}
{%endfor%}

View file

@ -0,0 +1,15 @@
{% for adapter in adapters %}{% if adapters[adapter].enabled %}auto {{adapter}}
{%endif%}{% if adapters[adapter].hotplug %}allow-hotplug {{adapter}}
{%endif%}{% for interface in adapters[adapter]['data'] %}iface {{adapter}} {{interface.inet_type}} {{interface.proto}}
{% if interface.address %} address {{interface.address}}
{%endif%}{% if interface.netmask %} netmask {{interface.netmask}}
{%endif%}{% if interface.broadcast %} brodcast {{interface.broadcast}}
{%endif%}{% if interface.gateway %} gateway {{interface.gateway}}
{%endif%}{% if interface.addr %} hwaddress {{interface.addr}}
{%endif%}{% if interface.up_cmds %} up {{interface.up_cmds}}
{%endif%}{% if interface.down_cmds %} down {{interface.down_cmds}}
{%endif%}{% if interface.pre_up_cmds %} pre-up {{interface.pre_up_cmds}}
{%endif%}{% if interface.pre_down_cmds %} hwaddress {{interface.pre_down_cmds}}
{%endif%}
{%endfor%}
{%endfor%}

View file

@ -0,0 +1,5 @@
#!/bin/sh
# {{route_type}}
{% for route in routes %}{% if route.name %}# {{route.name}}
{%endif%}route {{route_type}} -net {% if route.ipaddr %}{{route.ipaddr}}{%endif%} {% if route.netmask %}netmask {{route.netmask}}{%endif%} {% if route.gateway %}gateway {{route.gateway}}{%endif%}
{% endfor %}

View file

@ -0,0 +1,4 @@
{% for route in routes %}
{% if route.name %}# {{route.name}}
{%endif%}{% if route.ipaddr %}{{route.ipaddr}} {%endif%}{% if route.netmask %}{{route.netmask}} {%endif%}{% if route.gateway %}{{route.gateway}} {%endif%}{% if iface %}{{iface}}{%endif%}
{% endfor %}

View file

@ -433,6 +433,7 @@ SETUP_KWARGS = {'name': NAME,
],
'package_data': {'salt.templates': [
'rh_ip/*.jinja',
'debian_ip/*.jinja',
'virt/*.jinja'
],
},