Add 'teardown' action to veth-pair role

This commit is contained in:
Will Miller 2018-09-10 13:52:30 +00:00
parent 56b0019258
commit 24f47ca36a
5 changed files with 77 additions and 28 deletions

View File

@ -2,7 +2,11 @@ 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.
bridge and, optionally, can plug the other end into a source Linux bridge. If
`veth_pair_state` is `absent`, it will ensure the veth pair is not plugged into
the OVS bridge; if `veth_pair_plug_into_source` is enabled, it will ensure the
veth pair is not plugged into the source bridge; finally, it will ensure the
veth pair itself does not exist.
Requirements
------------
@ -24,3 +28,5 @@ Role Variables
- `veth_pair_plug_into_source`: Whether or not to plug the source end of the
veth pair into a Linux bridge. If enabled, `veth_pair_source_bridge` must
also be specified. Default is `false`.
- `veth_pair_state`: Whether or not the veth pair should exist. Choose from
`present` or `absent`. Default is `present`.

View File

@ -1,3 +1,5 @@
---
# Whether or not to plug the source end of the veth pair into a Linux bridge.
veth_pair_plug_into_source: false
# Whether the veth pair should be present or absent.
veth_pair_state: present

View File

@ -0,0 +1,33 @@
---
- name: Unplug veth from OVS bridge
openvswitch_port:
bridge: "{{ veth_pair_ovs_bridge }}"
port: "{{ veth_pair_ovs_link_name }}"
state: absent
become: true
- name: Unplug veth from source bridge
command: >-
brctl delif {{ veth_pair_source_bridge }}
{{ veth_pair_source_link_name }}
register: res
failed_when:
- res.rc != 0
# Case where veth is already unplugged.
- not (res.rc == 1 and 'does not exist' in res.stderr)
changed_when: res.rc == 0
when: veth_pair_plug_into_source | bool
become: true
- name: Delete veth pair
command: >-
ip link del dev {{ veth_pair_ovs_link_name }}
type veth
peer name {{ veth_pair_source_link_name }}
register: res
failed_when:
- res.rc != 0
# Case where veth pair is already absent.
- not (res.rc == 1 and 'Cannot find device' in res.stderr)
changed_when: res.rc == 0
become: true

View File

@ -1,29 +1,8 @@
---
- 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: Ensure veth pair is absent
include_tasks: absent.yml
when: veth_pair_state == 'absent'
- 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
- name: Ensure veth pair is present
include_tasks: present.yml
when: veth_pair_state != 'absent'

View File

@ -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