From f9b02c8bf5d4cfe8ff29aac6181a38771f267037 Mon Sep 17 00:00:00 2001
From: Mark Goddard <mark@stackhpc.com>
Date: Thu, 7 Jan 2021 13:31:49 +0000
Subject: [PATCH] Ubuntu: support non-persistent veth configuration

Adds support for veth patch pair configuration on Ubuntu. Currently this
is not persistent across reboots. This will need to be addressed once
the network configuration model is chosen for Ubuntu.

Change-Id: I006d46954456cf30ce4e743fcbe9b2862d43dd01
Story: 2004960
Task: 41545
---
 ansible/roles/veth/tasks/Debian.yml | 42 ++++++++++++++++++++++++++++
 ansible/roles/veth/tasks/RedHat.yml | 43 +++++++++++++++++++++++++++++
 ansible/roles/veth/tasks/main.yml   | 43 +----------------------------
 3 files changed, 86 insertions(+), 42 deletions(-)
 create mode 100644 ansible/roles/veth/tasks/Debian.yml
 create mode 100644 ansible/roles/veth/tasks/RedHat.yml

diff --git a/ansible/roles/veth/tasks/Debian.yml b/ansible/roles/veth/tasks/Debian.yml
new file mode 100644
index 00000000..bfd2b6ff
--- /dev/null
+++ b/ansible/roles/veth/tasks/Debian.yml
@@ -0,0 +1,42 @@
+---
+# FIXME: Not persistent!
+- name: Ensure veth pair exists (Debian)
+  command:
+    cmd: "ip link add dev {{ item.device }} type veth peer name {{ item.peer_device }}"
+    creates: "/sys/class/net/{{ item.device }}"
+  become: true
+  with_items: "{{ veth_interfaces }}"
+
+- name: Set veth MTU (Debian)
+  command: "ip link set {{ item.device }} mtu {{ item.mtu }}"
+  become: true
+  with_items: "{{ veth_interfaces }}"
+  when: item.mtu is defined and item.mtu
+
+- name: Set veth peer MTU (Debian)
+  command: "ip link set {{ item.peer_device }} mtu {{ item.peer_mtu }}"
+  become: true
+  with_items: "{{ veth_interfaces }}"
+  when: item.peer_mtu is defined and item.peer_mtu
+
+- name: Plug veth into bridge (Debian)
+  command: "ip link set {{ item.device }} master {{ item.bridge }}"
+  become: true
+  with_items: "{{ veth_interfaces }}"
+  when: item.bridge is defined
+
+- name: Plug veth peer into bridge (Debian)
+  command: "ip link set {{ item.peer_device }} master {{ item.peer_bridge }}"
+  become: true
+  with_items: "{{ veth_interfaces }}"
+  when: item.peer_bridge is defined
+
+- name: Ensure veth is up (Debian)
+  command: "ip link set {{ item.device }} up"
+  with_items: "{{ veth_interfaces }}"
+  become: true
+
+- name: Ensure veth peer is up (Debian)
+  command: "ip link set {{ item.peer_device }} up"
+  with_items: "{{ veth_interfaces }}"
+  become: true
diff --git a/ansible/roles/veth/tasks/RedHat.yml b/ansible/roles/veth/tasks/RedHat.yml
new file mode 100644
index 00000000..e8a5972e
--- /dev/null
+++ b/ansible/roles/veth/tasks/RedHat.yml
@@ -0,0 +1,43 @@
+---
+- name: Ensure veth sysconfig network control scripts exist
+  copy:
+    src: "{{ item }}"
+    dest: "{{ network_scripts_dir }}/{{ item }}"
+    owner: root
+    group: root
+    mode: 0755
+  with_items:
+    - "ifup-veth"
+    - "ifdown-veth"
+  become: True
+  register: ctl_result
+
+- name: Ensure veth sysconfig network interface files exist
+  template:
+    src: ifcfg-veth.j2
+    dest: "{{ network_scripts_dir }}/ifcfg-{{ item.device }}"
+    owner: root
+    group: root
+    mode: 0644
+  with_items: "{{ veth_interfaces }}"
+  become: True
+  register: veth_result
+
+- name: Ensure veth peer sysconfig network interface files exist
+  template:
+    src: ifcfg-peer.j2
+    dest: "{{ network_scripts_dir }}/ifcfg-{{ item.peer_device }}"
+    owner: root
+    group: root
+    mode: 0644
+  with_items: "{{ veth_interfaces }}"
+  become: True
+  register: peer_result
+
+- name: Bounce veth interfaces
+  shell: ifdown {{ item[0].item.device }} ; ifup {{ item[0].item.device }}
+  with_together:
+    - "{{ veth_result.results }}"
+    - "{{ peer_result.results }}"
+  when: ctl_result is changed or item[0] is changed or item[1] is changed
+  become: True
diff --git a/ansible/roles/veth/tasks/main.yml b/ansible/roles/veth/tasks/main.yml
index e8a5972e..2c28f122 100644
--- a/ansible/roles/veth/tasks/main.yml
+++ b/ansible/roles/veth/tasks/main.yml
@@ -1,43 +1,2 @@
 ---
-- name: Ensure veth sysconfig network control scripts exist
-  copy:
-    src: "{{ item }}"
-    dest: "{{ network_scripts_dir }}/{{ item }}"
-    owner: root
-    group: root
-    mode: 0755
-  with_items:
-    - "ifup-veth"
-    - "ifdown-veth"
-  become: True
-  register: ctl_result
-
-- name: Ensure veth sysconfig network interface files exist
-  template:
-    src: ifcfg-veth.j2
-    dest: "{{ network_scripts_dir }}/ifcfg-{{ item.device }}"
-    owner: root
-    group: root
-    mode: 0644
-  with_items: "{{ veth_interfaces }}"
-  become: True
-  register: veth_result
-
-- name: Ensure veth peer sysconfig network interface files exist
-  template:
-    src: ifcfg-peer.j2
-    dest: "{{ network_scripts_dir }}/ifcfg-{{ item.peer_device }}"
-    owner: root
-    group: root
-    mode: 0644
-  with_items: "{{ veth_interfaces }}"
-  become: True
-  register: peer_result
-
-- name: Bounce veth interfaces
-  shell: ifdown {{ item[0].item.device }} ; ifup {{ item[0].item.device }}
-  with_together:
-    - "{{ veth_result.results }}"
-    - "{{ peer_result.results }}"
-  when: ctl_result is changed or item[0] is changed or item[1] is changed
-  become: True
+- include_tasks: "{{ ansible_os_family }}.yml"
-- 
GitLab