diff --git a/network.yml b/network.yml new file mode 100644 index 0000000..4d1233a --- /dev/null +++ b/network.yml @@ -0,0 +1,3 @@ +- hosts: RedHat + roles: + - rhel-network diff --git a/roles/rhel-network/defaults/main.yml b/roles/rhel-network/defaults/main.yml new file mode 100644 index 0000000..e8fcc3c --- /dev/null +++ b/roles/rhel-network/defaults/main.yml @@ -0,0 +1,2 @@ +default_bond_opts: + miimon: 100 diff --git a/roles/rhel-network/handlers/main.yml b/roles/rhel-network/handlers/main.yml new file mode 100644 index 0000000..c38de47 --- /dev/null +++ b/roles/rhel-network/handlers/main.yml @@ -0,0 +1,5 @@ +- name: restart network + service: + name=network + state=restarted + when: not no_restart_network|d|bool diff --git a/roles/rhel-network/tasks/main.yml b/roles/rhel-network/tasks/main.yml new file mode 100644 index 0000000..5cd599e --- /dev/null +++ b/roles/rhel-network/tasks/main.yml @@ -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(()) }}' diff --git a/roles/rhel-network/templates/ifcfg.j2 b/roles/rhel-network/templates/ifcfg.j2 new file mode 100644 index 0000000..12f3375 --- /dev/null +++ b/roles/rhel-network/templates/ifcfg.j2 @@ -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 %}