From 4c79cfa10b24296c84b95c84d101d79e64ab3022 Mon Sep 17 00:00:00 2001 From: Will Miller Date: Wed, 22 Aug 2018 16:56:36 +0000 Subject: [PATCH] Add veth-pair role This role configures a veth pair between an OVS bridge and another device. --- ansible/roles/veth-pair/README.md | 26 ++++++++++++++++++++ ansible/roles/veth-pair/defaults/main.yml | 3 +++ ansible/roles/veth-pair/tasks/main.yml | 29 +++++++++++++++++++++++ 3 files changed, 58 insertions(+) create mode 100644 ansible/roles/veth-pair/README.md create mode 100644 ansible/roles/veth-pair/defaults/main.yml create mode 100644 ansible/roles/veth-pair/tasks/main.yml diff --git a/ansible/roles/veth-pair/README.md b/ansible/roles/veth-pair/README.md new file mode 100644 index 0000000..20fa351 --- /dev/null +++ b/ansible/roles/veth-pair/README.md @@ -0,0 +1,26 @@ +Veth Pair +========= + +This role creates a veth pair. It will plug one end into the specified OVS +bridge and, optionally, can plug the other end into a source Linux bridge. + +Requirements +------------ + +The host should have the `ip` and `ovs-vsctl` commands accessible. If +`veth_pair_plug_into_source` is enabled, the command `brctl` must also be +accessible. + +Role Variables +-------------- + +- `veth_pair_ovs_link_name`: The name to give the veth link that plugs into the + OVS bridge. +- `veth_pair_ovs_bridge`: The name of the OVS bridge to plug into. +- `veth_pair_source_link_name`: The name to give the veth link that plugs into + the source device. +- `veth_pair_source_bridge`: The name of the source Linux bridge to plug into. Must be + specified if and only if `plug_into_source` is enabled. +- `plug_into_source`: Whether or not to plug the source end of the veth pair + into a Linux bridge. If enabled, `source_bridge`, `source_bridge` must also + be specified. Default is `false`. diff --git a/ansible/roles/veth-pair/defaults/main.yml b/ansible/roles/veth-pair/defaults/main.yml new file mode 100644 index 0000000..0010742 --- /dev/null +++ b/ansible/roles/veth-pair/defaults/main.yml @@ -0,0 +1,3 @@ +--- +# Whether or not to plug the source end of the veth pair into a Linux bridge. +veth_pair_plug_into_source: false diff --git a/ansible/roles/veth-pair/tasks/main.yml b/ansible/roles/veth-pair/tasks/main.yml new file mode 100644 index 0000000..dd4ba1e --- /dev/null +++ b/ansible/roles/veth-pair/tasks/main.yml @@ -0,0 +1,29 @@ +--- +- name: Create veth pair + command: > + ip link add dev {{ veth_pair_ovs_link_name }} + type veth + peer name {{ veth_pair_source_link_name }} + register: res + changed_when: res.rc == 0 + # Return code 2 means the veth pair already exists + failed_when: res.rc not in [0, 2] + become: true + +- name: Plug veth into OVS bridge + openvswitch_port: + bridge: "{{ veth_pair_ovs_bridge }}" + port: "{{ veth_pair_ovs_link_name }}" + become: true + +- name: Plug veth into source bridge + command: > + brctl addif {{ veth_pair_source_bridge }} + {{ veth_pair_source_link_name }} + register: res + failed_when: + - res.rc != 0 + - "'already a member of a bridge' not in res.stderr" + changed_when: "'already a member of a bridge' not in res.stderr" + when: veth_pair_plug_into_source | bool + become: true