summaryrefslogtreecommitdiff
path: root/roles/vm/guest/network
diff options
context:
space:
mode:
Diffstat (limited to 'roles/vm/guest/network')
-rw-r--r--roles/vm/guest/network/handlers/main.yml3
-rw-r--r--roles/vm/guest/network/tasks/main.yml40
-rw-r--r--roles/vm/guest/network/templates/interfaces.j256
-rw-r--r--roles/vm/guest/network/templates/resolv.conf.j24
-rw-r--r--roles/vm/guest/network/templates/systemd.link.j25
5 files changed, 108 insertions, 0 deletions
diff --git a/roles/vm/guest/network/handlers/main.yml b/roles/vm/guest/network/handlers/main.yml
new file mode 100644
index 00000000..f967fa86
--- /dev/null
+++ b/roles/vm/guest/network/handlers/main.yml
@@ -0,0 +1,3 @@
+---
+- name: rebuild initramfs
+ command: update-initramfs -u
diff --git a/roles/vm/guest/network/tasks/main.yml b/roles/vm/guest/network/tasks/main.yml
new file mode 100644
index 00000000..27a7682a
--- /dev/null
+++ b/roles/vm/guest/network/tasks/main.yml
@@ -0,0 +1,40 @@
+---
+- name: configure systemd link units
+ when: network_cooked.systemd_link is defined
+ block:
+ - name: remove legacy systemd.link units
+ loop:
+ - 50-virtio-kernel-names.link
+ - 99-default.link
+ file:
+ name: "/etc/systemd/network/{{ item }}"
+ state: absent
+
+ - name: install systemd network link units
+ loop: "{{ network_cooked.systemd_link.interfaces }}"
+ loop_control:
+ label: "{{ item.name }}"
+ index_var: interface_index
+ template:
+ src: systemd.link.j2
+ dest: "/etc/systemd/network/{{ '%02d' | format(interface_index + 11) }}-{{ item.name }}.link"
+ notify: rebuild initramfs
+
+
+- name: install basic interface config
+ template:
+ src: interfaces.j2
+ dest: /etc/network/interfaces
+ mode: 0644
+
+- name: remove resolvconf package
+ apt:
+ name: resolvconf
+ state: absent
+ force_apt_get: yes
+ purge: yes
+
+- name: generate resolv.conf
+ template:
+ src: resolv.conf.j2
+ dest: /etc/resolv.conf
diff --git a/roles/vm/guest/network/templates/interfaces.j2 b/roles/vm/guest/network/templates/interfaces.j2
new file mode 100644
index 00000000..8c288669
--- /dev/null
+++ b/roles/vm/guest/network/templates/interfaces.j2
@@ -0,0 +1,56 @@
+# This file describes the network interfaces available on your system
+# and how to activate them. For more information, see interfaces(5).
+
+source /etc/network/interfaces.d/*
+
+# The loopback network interface
+auto lo
+iface lo inet loopback
+{% for interface in network_cooked.interfaces %}
+
+
+auto {{ interface.name }}
+iface {{ interface.name }} inet static
+ pre-up echo 0 > /proc/sys/net/ipv6/conf/$IFACE/accept_ra
+ pre-up echo 0 > /proc/sys/net/ipv6/conf/$IFACE/autoconf
+ address {{ interface.address | ipaddr('address') }}
+ netmask {{ interface.address | ipaddr('netmask') }}
+{% if 'overlay' in interface %}
+ up /bin/ip addr add dev $IFACE {{ interface.overlay }}/32
+{% for route in interface.static_routes | default([]) %}
+ up /bin/ip route add {{ route.destination }} via {{ route.gateway }} src {{ interface.overlay }}
+{% endfor %}
+{% if 'gateway' in interface %}
+ up /bin/ip route add default via {{ interface.gateway }} src {{ interface.overlay }}
+ down /bin/ip route del default via {{ interface.gateway }} src {{ interface.overlay }}
+{% for route in interface.static_routes | default([]) | reverse %}
+ down /bin/ip route del {{ route.destination }} via {{ route.gateway }} src {{ interface.overlay }}
+{% endfor %}
+{% endif %}
+ down /bin/ip addr del dev $IFACE {{ interface.overlay }}/32
+{% else %}
+{% if 'gateway' in interface %}
+ gateway {{ interface.gateway }}
+{% endif %}
+{% for route in interface.static_routes | default([]) %}
+ up /bin/ip route add {{ route.destination }} via {{ route.gateway }}
+{% endfor %}
+{% for route in interface.static_routes | default([]) | reverse %}
+ down /bin/ip route del {{ route.destination }} via {{ route.gateway }}
+{% endfor %}
+{% endif %}
+{% if 'address6' in interface %}
+
+iface {{ interface.name }} inet6 static
+ address {{ interface.address6 }}
+{% if 'gateway6' in interface %}
+ gateway {{ interface.gateway6 }}
+{% endif %}
+{% for route in interface.static_routes6 | default([]) %}
+ up /bin/ip -6 route add {{ route.destination }} via {{ route.gateway }}
+{% endfor %}
+{% for route in interface.static_routes6 | default([]) | reverse %}
+ down /bin/ip -6 route del {{ route.destination }} via {{ route.gateway }}
+{% endfor %}
+{% endif %}
+{% endfor %}
diff --git a/roles/vm/guest/network/templates/resolv.conf.j2 b/roles/vm/guest/network/templates/resolv.conf.j2
new file mode 100644
index 00000000..00aaafe3
--- /dev/null
+++ b/roles/vm/guest/network/templates/resolv.conf.j2
@@ -0,0 +1,4 @@
+{% for nsrv in network_cooked.nameservers %}
+nameserver {{ nsrv }}
+{% endfor %}
+search {{ network_cooked.domain }}
diff --git a/roles/vm/guest/network/templates/systemd.link.j2 b/roles/vm/guest/network/templates/systemd.link.j2
new file mode 100644
index 00000000..7093e164
--- /dev/null
+++ b/roles/vm/guest/network/templates/systemd.link.j2
@@ -0,0 +1,5 @@
+[Match]
+Path=*pci-0000:01:{{ "%02d" | format(interface_index + 1) }}.0
+
+[Link]
+Name={{ item.name }}