mirror of
https://gitea.0xace.cc/ansible-galaxy/network.git
synced 2024-11-24 22:36:38 +00:00
add network
This commit is contained in:
commit
3ef3e332ab
48
README.md
Normal file
48
README.md
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
Configure interfaces and pbr for RHEL and its derivatives
|
||||||
|
Supported iterface types for network-scripts:
|
||||||
|
- ethernet (default)
|
||||||
|
- loopback
|
||||||
|
|
||||||
|
For RHEL8 use:
|
||||||
|
|
||||||
|
network:
|
||||||
|
network_manager:
|
||||||
|
iface:
|
||||||
|
- conn_name: ens256
|
||||||
|
ip4:
|
||||||
|
- "100.127.2.2/29"
|
||||||
|
- conn_name: dummy0
|
||||||
|
type: dummy
|
||||||
|
ip4:
|
||||||
|
- "18.12.3.1/32"
|
||||||
|
routes4:
|
||||||
|
- 0.0.0.0/0 100.127.2.6 table=200
|
||||||
|
- 100.127.2.0/29 100.127.2.2 table=200
|
||||||
|
routes_rule4:
|
||||||
|
- priority 5 from 100.127.2.2 table 200
|
||||||
|
- priority 5 from 18.12.3.1 table 200
|
||||||
|
|
||||||
|
For RHEL7 use:
|
||||||
|
|
||||||
|
network:
|
||||||
|
network_scripts:
|
||||||
|
iface:
|
||||||
|
- name: ens256
|
||||||
|
ip:
|
||||||
|
- ipaddr: "100.127.2.2"
|
||||||
|
prefix: "/29"
|
||||||
|
- name: lo
|
||||||
|
type: loopback
|
||||||
|
ip:
|
||||||
|
- ipaddr: "18.12.3.1"
|
||||||
|
prefix: "/32"
|
||||||
|
route:
|
||||||
|
- default table 200 via 100.127.2.6
|
||||||
|
- 100.127.2.0/29 table 200 via 100.127.2.2
|
||||||
|
rule:
|
||||||
|
- from 100.127.2.2 table 200
|
||||||
|
- from 18.12.3.1 table 200
|
||||||
|
pbr:
|
||||||
|
table:
|
||||||
|
- number: 200
|
||||||
|
name: "prod"
|
0
defaults/main.yaml
Normal file
0
defaults/main.yaml
Normal file
9
handlers/main.yml
Normal file
9
handlers/main.yml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
- name: Up interface
|
||||||
|
shell: |
|
||||||
|
ifup {{ item.name }}
|
||||||
|
loop: "{{ network.network_scripts.iface }}"
|
||||||
|
|
||||||
|
- name: Reload interface with nmcli
|
||||||
|
command: nmcli conn up {{ item.conn_name }}
|
||||||
|
loop: "{{ network.network_manager.iface }}"
|
1
meta/main.yml
Normal file
1
meta/main.yml
Normal file
@ -0,0 +1 @@
|
|||||||
|
dependencies: []
|
20
tasks/RedHat/7.yaml
Normal file
20
tasks/RedHat/7.yaml
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
- block:
|
||||||
|
- include_tasks: network_scripts.yaml
|
||||||
|
|
||||||
|
when: network.network_scripts is defined
|
||||||
|
|
||||||
|
- block:
|
||||||
|
- name: Install NetworkManager-dispatcher-routing-rules
|
||||||
|
package:
|
||||||
|
name:
|
||||||
|
- NetworkManager-dispatcher-routing-rules
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Configure interfaces and routes with nmcli
|
||||||
|
include: network_manager.yaml iface={{ item }}
|
||||||
|
loop: "{{ network.network_manager.iface }}"
|
||||||
|
|
||||||
|
when: network.network_manager is defined
|
||||||
|
|
||||||
|
|
15
tasks/RedHat/8.yaml
Normal file
15
tasks/RedHat/8.yaml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
- block:
|
||||||
|
- name: Install network scripts
|
||||||
|
package:
|
||||||
|
name: network-scripts
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- include_tasks: network_scripts.yaml
|
||||||
|
|
||||||
|
when: network.network_scripts is defined
|
||||||
|
|
||||||
|
- name: Configure interfaces and routes with nmcli
|
||||||
|
include: network_manager.yaml iface={{ item }}
|
||||||
|
when: network.network_manager is defined
|
||||||
|
loop: "{{ network.network_manager.iface }}"
|
54
tasks/RedHat/network_manager.yaml
Normal file
54
tasks/RedHat/network_manager.yaml
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
---
|
||||||
|
- block:
|
||||||
|
- name: Configure interfaces with nmcli
|
||||||
|
community.general.nmcli:
|
||||||
|
conn_name: "{{ iface.conn_name }}"
|
||||||
|
type: "{{ iface.type | default('ethernet') }}"
|
||||||
|
ip4: "{{ omit if iface.ip4 is not defined else (iface.ip4|join(', ')) }}"
|
||||||
|
ip6: "{{ omit if iface.ip6 is not defined else (iface.ip6|join(', ')) }}"
|
||||||
|
gw4: "{{ iface.gw4 | default(omit) }}"
|
||||||
|
gw6: "{{ iface.gw6 | default(omit) }}"
|
||||||
|
never_default4: "{{ iface.never_default4 | default('yes') }}"
|
||||||
|
vlanid: "{{ iface.vlanid | default(omit) }}"
|
||||||
|
mtu: "{{ iface.mtu | default(0) }}"
|
||||||
|
zone: "{{ iface.zone | default(omit) }}"
|
||||||
|
state: present
|
||||||
|
notify:
|
||||||
|
- Reload interface with nmcli
|
||||||
|
|
||||||
|
- name: Get existing routes
|
||||||
|
shell: nmcli -g ipv4.routes connection show {{ iface.conn_name }}
|
||||||
|
register: existing_routes4_res
|
||||||
|
changed_when: False
|
||||||
|
|
||||||
|
- name: Set fact about existing and new routes
|
||||||
|
set_fact:
|
||||||
|
existing_routes4: "{{ existing_routes4_res.stdout | hash('sha256') }}"
|
||||||
|
new_routes4: "{{ '' if iface.routes4 is not defined else (iface.routes4|join(', ') | hash('sha256')) }}"
|
||||||
|
|
||||||
|
#- debug:
|
||||||
|
# msg: "{{ existing_routes4_res.stdout | hash('sha256') }}"
|
||||||
|
|
||||||
|
#- debug:
|
||||||
|
# msg: "{{ '' if iface.routes4 is not defined else (iface.routes4|join(', ') | hash('sha256')) }}"
|
||||||
|
|
||||||
|
- name: Add routes and rules with nmcli
|
||||||
|
community.general.nmcli:
|
||||||
|
conn_name: "{{ iface.conn_name }}"
|
||||||
|
type: "{{ iface.type | default('ethernet') }}"
|
||||||
|
ip4: "{{ omit if iface.ip4 is not defined else (iface.ip4|join(', ')) }}"
|
||||||
|
ip6: "{{ omit if iface.ip6 is not defined else (iface.ip6|join(', ')) }}"
|
||||||
|
gw4: "{{ iface.gw4 | default(omit) }}"
|
||||||
|
gw6: "{{ iface.gw6 | default(omit) }}"
|
||||||
|
never_default4: "{{ iface.never_default4 | default('yes') }}"
|
||||||
|
vlanid: "{{ iface.vlanid | default(omit) }}"
|
||||||
|
routes4: "{{ iface.routes4 | default(omit) }}"
|
||||||
|
routing_rules4: "{{ iface.routing_rules4 | default(omit) }}"
|
||||||
|
routes6: "{{ iface.routes6 | default(omit) }}"
|
||||||
|
routing_rules6: "{{ iface.routing_rules6 | default(omit) }}"
|
||||||
|
mtu: "{{ iface.mtu | default(0) }}"
|
||||||
|
zone: "{{ iface.zone | default(omit) }}"
|
||||||
|
state: present
|
||||||
|
when: existing_routes4 != new_routes4
|
||||||
|
notify:
|
||||||
|
- Reload interface with nmcli
|
34
tasks/RedHat/network_scripts.yaml
Normal file
34
tasks/RedHat/network_scripts.yaml
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
---
|
||||||
|
- block:
|
||||||
|
- name: Create interfaces config files
|
||||||
|
template:
|
||||||
|
src: "ifcfg-{{ item.type | default('ethernet') }}.j2"
|
||||||
|
dest: "/etc/sysconfig/network-scripts/ifcfg-{{ item.name }}"
|
||||||
|
notify:
|
||||||
|
- Up interface
|
||||||
|
loop: "{{ network.network_scripts.iface }}"
|
||||||
|
|
||||||
|
- name: Create routing table in rt_tables
|
||||||
|
template:
|
||||||
|
src: rt_tables.j2
|
||||||
|
dest: /etc/iproute2/rt_tables
|
||||||
|
notify:
|
||||||
|
- Up interface
|
||||||
|
|
||||||
|
- name: Create routing rules for interfaces
|
||||||
|
template:
|
||||||
|
src: rule.j2
|
||||||
|
dest: "/etc/sysconfig/network-scripts/rule-{{ item.name }}"
|
||||||
|
notify:
|
||||||
|
- Up interface
|
||||||
|
loop: "{{ network.network_scripts.iface }}"
|
||||||
|
|
||||||
|
- name: Create routes for interfaces
|
||||||
|
template:
|
||||||
|
src: route.j2
|
||||||
|
dest: "/etc/sysconfig/network-scripts/route-{{ item.name }}"
|
||||||
|
notify:
|
||||||
|
- Up interface
|
||||||
|
loop: "{{ network.network_scripts.iface }}"
|
||||||
|
|
||||||
|
when: network.network_scripts is defined
|
3
tasks/main.yml
Normal file
3
tasks/main.yml
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
---
|
||||||
|
- name: Include interfaces configuration tasks
|
||||||
|
include: "{{ ansible_os_family }}/{{ ansible_distribution_version }}.yaml"
|
27
templates/ifcfg-ethernet.j2
Normal file
27
templates/ifcfg-ethernet.j2
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
DEVICE="{{ item.name }}"
|
||||||
|
USERCTL="{{ item.userctl | default('no') }}"
|
||||||
|
NM_CONTROLLED="{{ item.nm_controlled | default('no') }}"
|
||||||
|
{% if ite.bootproto is defined %}
|
||||||
|
BOOTPROTO="{{ item.bootproto }}"
|
||||||
|
{% endif %}
|
||||||
|
ONBOOT="{{ item.onboot | default('yes') }}"
|
||||||
|
{% if item.mtu is defined %}
|
||||||
|
MTU="{{ item.mtu }}"
|
||||||
|
{% endif %}
|
||||||
|
{% if item.slave is defined %}
|
||||||
|
MASTER="{{ item.master }}"
|
||||||
|
SLAVE="yes"
|
||||||
|
{% endif %}
|
||||||
|
{% if item.gateway is defined %}
|
||||||
|
GATEWAY="{{ item.gateway }}"
|
||||||
|
{% endif %}
|
||||||
|
{% for network in item.ip %}
|
||||||
|
{% if network.ipaddr is defined %}
|
||||||
|
IPADDR{{ loop.index }}="{{ network.ipaddr }}"
|
||||||
|
{% endif %}
|
||||||
|
{% if network.netmask is defined %}
|
||||||
|
NETMASK{{ loop.index }}="{{ network.netmask }}"
|
||||||
|
{% elif network.prefix is defined %}
|
||||||
|
PREFIX{{ loop.index }}="{{ network.prefix }}"
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
17
templates/ifcfg-loopback.j2
Normal file
17
templates/ifcfg-loopback.j2
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
DEVICE=lo
|
||||||
|
IPADDR=127.0.0.1
|
||||||
|
NETMASK=255.0.0.0
|
||||||
|
NETWORK=127.0.0.0
|
||||||
|
# If you're having problems with gated making 127.0.0.0/8 a martian,
|
||||||
|
# you can change this to something else (255.255.255.255, for example)
|
||||||
|
BROADCAST=127.255.255.255
|
||||||
|
{% for network in item.ip %}
|
||||||
|
IPADDR{{ loop.index }}={{ network.ipaddr }}
|
||||||
|
{% if network.netmask is defined %}
|
||||||
|
NETMASK{{ loop.index }}={{ network.netmask }}
|
||||||
|
{% elif network.prefix is defined %}
|
||||||
|
PREFIX{{ loop.index }}={{ network.prefix }}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
ONBOOT=yes
|
||||||
|
NAME=loopback
|
3
templates/route.j2
Normal file
3
templates/route.j2
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{% for route in item.route %}
|
||||||
|
{{ route }}
|
||||||
|
{% endfor %}
|
14
templates/rt_tables.j2
Normal file
14
templates/rt_tables.j2
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#
|
||||||
|
# reserved values
|
||||||
|
#
|
||||||
|
255 local
|
||||||
|
254 main
|
||||||
|
253 default
|
||||||
|
0 unspec
|
||||||
|
#
|
||||||
|
# local
|
||||||
|
#
|
||||||
|
#1 inr.ruhep
|
||||||
|
{% for table in network.network_scripts.pbr.table %}
|
||||||
|
{{ table.number }} {{ table.name }}
|
||||||
|
{% endfor %}
|
3
templates/rule.j2
Normal file
3
templates/rule.j2
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{% for rule in item.rule %}
|
||||||
|
{{ rule }}
|
||||||
|
{% endfor %}
|
Loading…
Reference in New Issue
Block a user