@@ -3,12 +3,40 @@ | |||||
- include: setup.yml | - include: setup.yml | ||||
when: not root_target_directory is defined | when: not root_target_directory is defined | ||||
- name: set netifs | |||||
set_fact: | |||||
_netifs: "{{ lookup('template','netifs.json.j2') }}" | |||||
- name: /etc/network directory | - name: /etc/network directory | ||||
file: | file: | ||||
path: "{{ root_target_directory | default('') }}/etc/network" | path: "{{ root_target_directory | default('') }}/etc/network" | ||||
state: directory | state: directory | ||||
- name: network interfaces configuration | |||||
- name: debian network interfaces configuration | |||||
template: | template: | ||||
src: network-interfaces.j2 | |||||
src: network-interfaces-debian.j2 | |||||
dest: "{{ root_target_directory | default('') }}/etc/network/interfaces" | dest: "{{ root_target_directory | default('') }}/etc/network/interfaces" | ||||
when: | |||||
- ( root_target_dist | default('debian') ) == "debian" | |||||
- name: alpine network interfaces configuration | |||||
template: | |||||
src: network-interfaces-alpine.j2 | |||||
dest: "{{ root_target_directory | default('') }}/etc/network/interfaces" | |||||
when: | |||||
- ( root_target_dist | default('debian') ) == "alpine" | |||||
- name: /etc/network/interfaces.d directory | |||||
file: | |||||
path: "{{ root_target_directory | default('') }}/etc/network/interfaces.d" | |||||
state: directory | |||||
when: | |||||
- ( root_target_dist | default('debian') ) == "debian" | |||||
- name: debian network interface configuration | |||||
template: | |||||
src: network-interface-debian.j2 | |||||
dest: "{{ root_target_directory | default('') }}/etc/network/interfaces.d/{{ item }}" | |||||
with_items: "{{ _netifs }}" | |||||
when: | |||||
- ( root_target_dist | default('debian') ) == "debian" |
@@ -0,0 +1,9 @@ | |||||
[ | |||||
{% if netifs is defined %} | |||||
{% for netif in netifs %} | |||||
{% if netifs[netif].type == "ethernet" or netifs[netif].type == "virt" %} | |||||
"{{netif}}", | |||||
{% endif %} | |||||
{% endfor %} | |||||
{% endif %} | |||||
] |
@@ -1,20 +1,11 @@ | |||||
# interfaces(5) file used by ifup(8) and ifdown(8) | |||||
{{ ansible_managed | comment }} | {{ ansible_managed | comment }} | ||||
auto lo | |||||
iface lo inet loopback | |||||
{% if netifs is defined %} | |||||
{% for netif in netifs %} | |||||
{% if netifs[netif].type == "ethernet" or netifs[netif].type == "virt" %} | |||||
{% set netif = item %} | |||||
### netif {{netif}} | ### netif {{netif}} | ||||
{% set dev = netifs[netif].device | default( 'enx' + netifs[netif].mac | regex_replace(':') ) %} | {% set dev = netifs[netif].device | default( 'enx' + netifs[netif].mac | regex_replace(':') ) %} | ||||
auto {{dev}} | auto {{dev}} | ||||
{% if netifs[netif].type == "virt" and hostvars[virt_host].netifs[netifs[netif].virt_host_netif].type == "virt_pointopoint" %} | {% if netifs[netif].type == "virt" and hostvars[virt_host].netifs[netifs[netif].virt_host_netif].type == "virt_pointopoint" %} | ||||
# virt_pointopoint -> {{virt_host}} {{netifs[netif].virt_host_netif}} | # virt_pointopoint -> {{virt_host}} {{netifs[netif].virt_host_netif}} | ||||
{% set ips_ipv4 = netifs[netif] | json_query("ips[].ip") | ipv4("address") %} | {% set ips_ipv4 = netifs[netif] | json_query("ips[].ip") | ipv4("address") %} | ||||
{% set ips_ipv4_first = ips_ipv4 | first %} | {% set ips_ipv4_first = ips_ipv4 | first %} | ||||
@@ -30,7 +21,7 @@ auto {{dev}} | |||||
{% set virt_pointopoint_ips_ipv6 = virt_pointopoint_ips_ipv6 | difference(virt_pointopoint_ips_ipv6_first) %} | {% set virt_pointopoint_ips_ipv6 = virt_pointopoint_ips_ipv6 | difference(virt_pointopoint_ips_ipv6_first) %} | ||||
iface {{ dev }} inet static | iface {{ dev }} inet static | ||||
address {{ ips_ipv4_first }} | address {{ ips_ipv4_first }} | ||||
netmask 32 | |||||
netmask 255.255.255.255 | |||||
pointopoint {{ virt_pointopoint_ips_ipv4_first }} | pointopoint {{ virt_pointopoint_ips_ipv4_first }} | ||||
gateway {{ virt_pointopoint_ips_ipv4_first }} | gateway {{ virt_pointopoint_ips_ipv4_first }} | ||||
{% for ptpip in virt_pointopoint_ips_ipv4 %} | {% for ptpip in virt_pointopoint_ips_ipv4 %} | ||||
@@ -58,8 +49,8 @@ iface {{ dev }} inet6 static | |||||
address {{ ips_ipv6_first }} | address {{ ips_ipv6_first }} | ||||
netmask 128 | netmask 128 | ||||
post-up /sbin/ip -family inet6 route add {{ virt_pointopoint_ips_ipv6_first }} dev {{ dev }} | post-up /sbin/ip -family inet6 route add {{ virt_pointopoint_ips_ipv6_first }} dev {{ dev }} | ||||
post-up /sbin/ip -family inet6 route add default via {{ virt_pointopoint_ips_ipv6_first }} | |||||
pre-down /sbin/ip -family inet6 route del default via {{ virt_pointopoint_ips_ipv6_first }} | |||||
post-up /sbin/ip -family inet6 route add default via {{ virt_pointopoint_ips_ipv6_first }} dev {{ dev }} | |||||
pre-down /sbin/ip -family inet6 route del default via {{ virt_pointopoint_ips_ipv6_first }} dev {{ dev }} | |||||
pre-down /sbin/ip -family inet6 route del {{ virt_pointopoint_ips_ipv6_first }} dev {{ dev }} | pre-down /sbin/ip -family inet6 route del {{ virt_pointopoint_ips_ipv6_first }} dev {{ dev }} | ||||
{% for ptpip in virt_pointopoint_ips_ipv6 %} | {% for ptpip in virt_pointopoint_ips_ipv6 %} | ||||
post-up /sbin/ip -family inet6 route add {{ ptpip }} dev {{ dev }} via {{ virt_pointopoint_ips_ipv6_first }} | post-up /sbin/ip -family inet6 route add {{ ptpip }} dev {{ dev }} via {{ virt_pointopoint_ips_ipv6_first }} | ||||
@@ -90,7 +81,7 @@ iface {{ dev }} inet6 static | |||||
# ipv6 {{ip.ip}} | # ipv6 {{ip.ip}} | ||||
iface {{ dev }} inet6 static | iface {{ dev }} inet6 static | ||||
address {{ ip.ip | ipv6('address') }} | address {{ ip.ip | ipv6('address') }} | ||||
netmask {{ ip.ip | ipv6('prefix') }} | |||||
netmask {{ ip.ip | ipv6('netmask') }} | |||||
{% if netifs[netif].dns_resolvers is defined and netifs[netif].dns_resolvers | ipv6 %} | {% if netifs[netif].dns_resolvers is defined and netifs[netif].dns_resolvers | ipv6 %} | ||||
dns-nameservers {{ netifs[netif].dns_resolvers | ipv6 | join(" ") }} | dns-nameservers {{ netifs[netif].dns_resolvers | ipv6 | join(" ") }} | ||||
{% endif %} | {% endif %} | ||||
@@ -119,10 +110,3 @@ iface {{ dev }} inet static | |||||
{% endfor %} | {% endfor %} | ||||
{% endif %} | {% endif %} | ||||
{% endif %} | |||||
{% endfor %} | |||||
{% endif %} | |||||
# Include files from /etc/network/interfaces.d: | |||||
source-directory /etc/network/interfaces.d |
@@ -0,0 +1,96 @@ | |||||
{{ ansible_managed | comment }} | |||||
{% if netifs is defined %} | |||||
{% for netif in netifs %} | |||||
{% if netifs[netif].type == "ethernet" or netifs[netif].type == "virt" %} | |||||
### netif {{netif}} | |||||
{# TODO list virt_pci_ids of all netifs and pick eth number by index of list #} | |||||
{% set dev = 'eth'+(netifs[netif].virt_pci_id|string) %} | |||||
auto {{dev}} | |||||
{% if netifs[netif].type == "virt" and hostvars[virt_host].netifs[netifs[netif].virt_host_netif].type == "virt_pointopoint" %} | |||||
# virt_pointopoint -> {{virt_host}} {{netifs[netif].virt_host_netif}} | |||||
{% set ips_ipv4 = netifs[netif] | json_query("ips[].ip") | ipv4("address") %} | |||||
{% set ips_ipv4_first = ips_ipv4 | first %} | |||||
{% set ips_ipv4 = ips_ipv4 | difference(ips_ipv4_first) %} | |||||
{% set virt_pointopoint_ips_ipv4 = hostvars[virt_host].netifs[netifs[netif].virt_host_netif] | json_query("ips[].ip") | ipv4("address") %} | |||||
{% set virt_pointopoint_ips_ipv4_first = virt_pointopoint_ips_ipv4 | first %} | |||||
{% set virt_pointopoint_ips_ipv4 = virt_pointopoint_ips_ipv4 | difference(virt_pointopoint_ips_ipv4_first) %} | |||||
{% set ips_ipv6 = netifs[netif] | json_query("ips[].ip") | ipv6("address") %} | |||||
{% set ips_ipv6_first = ips_ipv6 | first %} | |||||
{% set ips_ipv6 = ips_ipv6 | difference(ips_ipv6_first) %} | |||||
{% set virt_pointopoint_ips_ipv6 = hostvars[virt_host].netifs[netifs[netif].virt_host_netif] | json_query("ips[].ip") | ipv6("address") %} | |||||
{% set virt_pointopoint_ips_ipv6_first = virt_pointopoint_ips_ipv6 | first %} | |||||
{% set virt_pointopoint_ips_ipv6 = virt_pointopoint_ips_ipv6 | difference(virt_pointopoint_ips_ipv6_first) %} | |||||
iface {{ dev }} inet manual | |||||
post-up /sbin/ip link set dev {{ dev }} up | |||||
pre-down /sbin/ip link set dev {{ dev }} down | |||||
# ipv4 | |||||
post-up /sbin/ip -family inet address add {{ ips_ipv4_first }} peer {{ virt_pointopoint_ips_ipv4_first }} dev {{ dev }} | |||||
pre-down /sbin/ip -family inet address del {{ ips_ipv4_first }} peer {{ virt_pointopoint_ips_ipv4_first }} dev {{ dev }} | |||||
post-up /sbin/ip -family inet route add default dev {{ dev }} via {{ virt_pointopoint_ips_ipv4_first }} | |||||
pre-down /sbin/ip -family inet route del default dev {{ dev }} via {{ virt_pointopoint_ips_ipv4_first }} | |||||
{% for ptpip in virt_pointopoint_ips_ipv4 %} | |||||
post-up /sbin/ip -family inet route add {{ ptpip }}/32 dev {{ dev }} via {{ virt_pointopoint_ips_ipv4_first }} | |||||
pre-down /sbin/ip -family inet route del {{ ptpip }}/32 dev {{ dev }} via {{ virt_pointopoint_ips_ipv4_first }} | |||||
{% endfor %} | |||||
{% for ip in ips_ipv4 %} | |||||
post-up /sbin/ip -family inet address add {{ ip }}/32 dev {{ dev }} | |||||
pre-down /sbin/ip -family inet address del {{ ip }}/32 dev {{ dev }} | |||||
{% endfor %} | |||||
# ipv6 | |||||
post-up /sbin/ip -family inet6 address add {{ ips_ipv6_first }}/128 dev {{ dev }} | |||||
pre-down /sbin/ip -family inet6 address del {{ ips_ipv6_first }}/128 dev {{ dev }} | |||||
post-up /sbin/ip -family inet6 route add {{ virt_pointopoint_ips_ipv6_first }} dev {{ dev }} | |||||
post-up /sbin/ip -family inet6 route add default via {{ virt_pointopoint_ips_ipv6_first }} dev {{ dev }} | |||||
pre-down /sbin/ip -family inet6 route del default via {{ virt_pointopoint_ips_ipv6_first }} dev {{ dev }} | |||||
pre-down /sbin/ip -family inet6 route del {{ virt_pointopoint_ips_ipv6_first }} dev {{ dev }} | |||||
{% for ptpip in virt_pointopoint_ips_ipv6 %} | |||||
post-up /sbin/ip -family inet6 route add {{ ptpip }} dev {{ dev }} via {{ virt_pointopoint_ips_ipv6_first }} | |||||
pre-down /sbin/ip -family inet6 route del {{ ptpip }} dev {{ dev }} via {{ virt_pointopoint_ips_ipv6_first }} | |||||
{% endfor %} | |||||
{% for ip in ips_ipv6 %} | |||||
post-up /sbin/ip -family inet6 address add {{ ip }}/128 dev {{ dev }} | |||||
pre-down /sbin/ip -family inet6 address del {{ ip }}/128 dev {{ dev }} | |||||
{% endfor %} | |||||
{% else %} | |||||
{% for ip in netifs[netif].ips %} | |||||
{% if ip.ip | ipv6 %} | |||||
# ipv6 {{ip.ip}} | |||||
iface {{ dev }} inet6 static | |||||
address {{ ip.ip | ipv6('address') }} | |||||
netmask {{ ip.ip | ipv6('netmask') }} | |||||
{% if netifs[netif].dns_resolvers is defined and netifs[netif].dns_resolvers | ipv6 %} | |||||
dns-nameservers {{ netifs[netif].dns_resolvers | ipv6 | join(" ") }} | |||||
{% endif %} | |||||
{% if netifs[netif].dns_search is defined %} | |||||
dns-search {{ netifs[netif].dns_search | join(" ") }} | |||||
{% endif %} | |||||
{% endif %} | |||||
{% if ip.ip | ipv4 %} | |||||
# ipv4 {{ip.ip}} | |||||
iface {{ dev }} inet static | |||||
address {{ ip.ip | ipv4('address') }} | |||||
network {{ ip.ip | ipv4('network') }} | |||||
netmask {{ ip.ip | ipv4('prefix') }} | |||||
broadcast {{ ip.ip | ipv4('broadcast') }} | |||||
{% if loop.index == 1 and netifs[netif].routes is defined %} | |||||
{% set default_route = netifs[netif].routes | json_query("[?to=='default']") | first %} | |||||
gateway {{default_route.via}} | |||||
{% endif %} | |||||
{% if netifs[netif].dns_resolvers is defined and netifs[netif].dns_resolvers | ipv4 %} | |||||
dns-nameservers {{ netifs[netif].dns_resolvers | ipv4 | join(" ") }} | |||||
{% endif %} | |||||
{% if netifs[netif].dns_search is defined %} | |||||
dns-search {{ netifs[netif].dns_search | join(" ") }} | |||||
{% endif %} | |||||
{% endif %} | |||||
{% endfor %} | |||||
{% endif %} | |||||
{% endif %} | |||||
{% endfor %} | |||||
{% endif %} |
@@ -0,0 +1,11 @@ | |||||
# interfaces(5) file used by ifup(8) and ifdown(8) | |||||
{{ ansible_managed | comment }} | |||||
{% if not (root_target_dist is defined and root_target_dist == "alpine") %} | |||||
auto lo | |||||
iface lo inet loopback | |||||
{% endif %} | |||||
# Include files from /etc/network/interfaces.d: | |||||
source-directory /etc/network/interfaces.d |