aboutsummaryrefslogtreecommitdiff
path: root/roles/multi-node-vxlan-overlay
diff options
context:
space:
mode:
authorRadosław Piliszek <radoslaw.piliszek@gmail.com>2020-02-17 18:40:15 +0100
committerRadosław Piliszek <radoslaw.piliszek@gmail.com>2020-02-20 12:24:05 +0100
commitb356762b942690e63ca9b99dcf76cc478284e976 (patch)
tree390a789a3955cccf53bc6bcbddce7a16f2212786 /roles/multi-node-vxlan-overlay
parent35c3f333e9ade47e70fff4c05b4a46102aadfbbf (diff)
downloadkolla-ansible-b356762b942690e63ca9b99dcf76cc478284e976.tar.gz
kolla-ansible-b356762b942690e63ca9b99dcf76cc478284e976.zip
CI: Refactor VXLAN overlay setup
This makes it cleaner, allows reuse and outsourcing to zuul jobs and enables us to create multiple of these overlay networks for testing of more advanced scenarios. Change-Id: Id557c81f68a7f34556854e7d6efc6eddfd2e7216
Diffstat (limited to 'roles/multi-node-vxlan-overlay')
-rw-r--r--roles/multi-node-vxlan-overlay/defaults/main.yml5
-rw-r--r--roles/multi-node-vxlan-overlay/tasks/main.yml50
2 files changed, 55 insertions, 0 deletions
diff --git a/roles/multi-node-vxlan-overlay/defaults/main.yml b/roles/multi-node-vxlan-overlay/defaults/main.yml
new file mode 100644
index 000000000..bf80bf46f
--- /dev/null
+++ b/roles/multi-node-vxlan-overlay/defaults/main.yml
@@ -0,0 +1,5 @@
+---
+# NOTE(yoctozepto): CI VXLAN overlay must use a different port than
+# neutron-openvswitch-agent which defaults to 4789.
+# Hence using port 4790 by default.
+vxlan_dstport: 4790
diff --git a/roles/multi-node-vxlan-overlay/tasks/main.yml b/roles/multi-node-vxlan-overlay/tasks/main.yml
new file mode 100644
index 000000000..bc77a01c5
--- /dev/null
+++ b/roles/multi-node-vxlan-overlay/tasks/main.yml
@@ -0,0 +1,50 @@
+---
+# Not all variables have sensible defaults, let's ensure these are set.
+- name: Ensure mandatory variables are defined
+ assert:
+ that:
+ - vxlan_interface_name is defined
+ - vxlan_vni is defined
+
+# We have had cases where the nodepool private IP address is not assigned,
+# which causes hard to diagnose errors later on. Catch it early.
+- name: Assert that the nodepool private IPv4 address is assigned
+ assert:
+ that: nodepool.private_ipv4 in ansible_all_ipv4_addresses
+ fail_msg: >-
+ The nodepool private IP address {{ nodepool.private_ipv4 }} is not assigned
+
+- name: Set VXLAN interface facts
+ set_fact:
+ tunnel_local_address: "{{ nodepool.private_ipv4 }}"
+
+- name: Create VXLAN interface
+ become: true
+ command: ip link add {{ vxlan_interface_name }} type vxlan id {{ vxlan_vni }} local {{ tunnel_local_address }} dstport {{ vxlan_dstport }}
+
+- name: Set VXLAN interface MTU
+ become: true
+ vars:
+ # Find the parent interface
+ parent_interface: >-
+ {{ ansible_interfaces |
+ map('extract', ansible_facts) |
+ selectattr('ipv4.address', 'defined') |
+ selectattr('ipv4.address', 'equalto', tunnel_local_address) |
+ first }}
+ # Allow 50 bytes overhead for VXLAN headers.
+ mtu: "{{ parent_interface.mtu | int - 50 }}"
+ command: ip link set {{ vxlan_interface_name }} mtu {{ mtu }}
+
+# emulate BUM by multiplicating traffic to unicast targets
+- name: Add fdb entries for BUM traffic
+ become: true
+ vars:
+ dest_ip: "{{ hostvars[item].tunnel_local_address }}"
+ command: bridge fdb append 00:00:00:00:00:00 dev {{ vxlan_interface_name }} dst {{ dest_ip }}
+ with_inventory_hostnames: all
+ when: item != inventory_hostname
+
+- name: Bring VXLAN interface up
+ become: true
+ command: ip link set {{ vxlan_interface_name }} up