network: Playbook to configure networking

The `network.yml` playbook is used to configure the network interfaces
on a managed node. Currently, it only supports the Red Hat configuration
style (i.e. `/etc/sysconfig/network-scripts/ifcfg-*` files).
jenkins-master
Dustin 2018-03-13 23:20:11 -05:00
parent 7de51f4bc5
commit 2a5b257943
5 changed files with 82 additions and 0 deletions

3
network.yml Normal file
View File

@ -0,0 +1,3 @@
- hosts: RedHat
roles:
- rhel-network

View File

@ -0,0 +1,2 @@
default_bond_opts:
miimon: 100

View File

@ -0,0 +1,5 @@
- name: restart network
service:
name=network
state=restarted
when: not no_restart_network|d|bool

View File

@ -0,0 +1,13 @@
- name: ensure network devices are configured
template:
src=ifcfg.j2
dest=/etc/sysconfig/network-scripts/ifcfg-{{ item.ifname }}
mode=0644
with_items: '{{ network.interfaces }}'
notify: restart network
- name: ensure ignored devices are not configured
file:
path=/etc/sysconfig/network-scripts/ifcfg-{{ item }}
state=absent
with_items: '{{ network.ignore_interfaces|d(()) }}'

View File

@ -0,0 +1,59 @@
{#- vim: set ft=jinja : -#}
DEVICE="{{ item.ifname }}"
{% if item.enabled %}
ONBOOT="yes"
{% else %}
ONBOOT="no"
{% endif %}
{% if item.mode == "auto" %}
BOOTPROTO="dhcp"
{% elif item.mode == "manual" %}
BOOTPROTO="none"
IPADDR="{{ item.addr }}"
{% if item.mask is defined %}
NETMASK="{{ item.mask }}"
{% else %}
PREFIX={{ item.prefix|d(24) }}
{% endif %}
{% if item.gateway is defined %}
GATEWAY="{{ item.gateway }}"
{% endif %}
{% for dns in item.dns|d(()) %}
DNS{{ loop.index }}="{{ dns }}"
{% endfor %}
{% if item.addr6 is defined %}
IPV6ADDR="{{ item.addr6 }}"
{% endif %}
{% else %}
BOOTPROTO="none"
{% endif %}
{% if item.dhcpv6 is defined %}
{% if item.dhcpv6.enabled|d(True) %}
DHCPV6C="yes"
{% if item.dhcpv6.stateless|d(False) %}
DHCPV6C_OPTIONS="-S"
{% elif item.dhcpv6.temporary|d(False) %}
DHCPV6C_OPTIONS="-T"
{% elif item.dhcpv6.pd|d(False) %}
DHCPV6C_OPTIONS="-P"
{% endif %}
{% endif %}
{% endif %}
{% if item.master|d %}
SLAVE=yes
MASTER={{ item.master }}
{% endif %}
{% if item.bond_opts|d %}
BONDING_OPTS="{% for key, value in default_bond_opts|combine(item.bond_opts)|dictsort %}{{ key }}={{ value }}{% if not loop.last %} {% endif %}{% endfor %}"
{% endif %}
{% if item.vlan_id|d %}
VLAN=yes
VID={{ item.vlan_id }}
{% if item.physdev|d %}
PHYSDEV={{ item.physdev }}
{% endif %}
{% endif %}