virt_net: idempotency of create/stop actions (#53276)

Currently, if we try to stop or start a network two time in a row, the
second call will fail. With this patch:

- we don't recreate a network, if it exists
- we only stop a network if it's active, and so we avoid an exception
  saying the network is not active

* test: mock libvirt

* add integration tests for virt_net

* test: enable virt_net test on RedHat 7 and 8

* ci: use the unsupported alias

* tests that require privileged mode are run in VM

* virt_net/create raise unexpected libvirt exception

* import mock from units.compat

* virt_net: do not call create() on "active" network

* virt_net func test: only clean up the libvirt packages

* test: virt_net: don't use assert_called()

* virt_net: add the destructive alias

* move the test in virt_net dir

* test/virt_net: clean up the network at the end
This commit is contained in:
Gonéri Le Bouder
2019-03-28 12:12:35 -04:00
committed by Abhijeet Kasurde
parent 56418cc274
commit fc3064471b
16 changed files with 268 additions and 29 deletions

View File

@@ -0,0 +1,5 @@
shippable/posix/group1
skip/freebsd
skip/osx
needs/privileged
destructive

View File

@@ -0,0 +1,9 @@
<network>
<name>foobar</name>
<forward mode='nat'/>
<ip address='192.168.125.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.125.2' end='192.168.125.254'/>
</dhcp>
</ip>
</network>

View File

@@ -0,0 +1,78 @@
---
- include_vars: '{{ item }}'
with_first_found:
- "{{ ansible_distribution }}-{{ ansible_distribution_version}}.yml"
- "{{ ansible_distribution }}-{{ ansible_distribution_major_version}}.yml"
- "{{ ansible_distribution }}.yml"
- "default.yml"
- block:
- name: Install libvirt packages
package:
name: "{{ virt_net_packages }}"
- name: Start libvirt
service:
name: libvirtd
state: started
- name: Define the foobar network
virt_net:
command: define
name: foobar
xml: '{{ lookup("file", "foobar.xml") }}'
- name: Define the foobar network (again)
virt_net:
command: define
name: foobar
xml: '{{ lookup("file", "foobar.xml") }}'
register: second_virt_net_define
- name: Start the default network
virt_net:
uri: qemu:///system
command: start
name: foobar
- name: Start the default network (again)
virt_net:
uri: qemu:///system
command: start
name: foobar
register: second_virt_net_start
- name: Destroy the foobar network
virt_net:
command: destroy
name: foobar
- name: Undefine the foobar network
virt_net:
command: undefine
name: foobar
register: second_virt_net_define
- name: Undefine the foobar network (again)
virt_net:
command: undefine
name: foobar
register: second_virt_net_undefine
- name: Ensure the second calls return "unchanged"
assert:
that:
- "second_virt_net_start is not changed"
- "second_virt_net_define is not changed"
- "second_virt_net_undefine is not changed"
always:
- name: Stop libvirt
service:
name: libvirtd
state: stopped
- name: Remove only the libvirt packages
package:
name: "{{ virt_net_packages|select('match', '.*libvirt.*')|list }}"
state: absent

View File

@@ -0,0 +1,6 @@
---
virt_net_packages:
- libvirt-daemon
- libvirt-daemon-system
- python-libvirt
- python-lxml

View File

@@ -0,0 +1,6 @@
---
virt_net_packages:
- libvirt
- libvirt-daemon
- python3-libvirt
- python3-lxml

View File

@@ -0,0 +1,6 @@
---
virt_net_packages:
- libvirt
- libvirt-daemon
- libvirt-python
- python-lxml

View File

@@ -0,0 +1,6 @@
---
virt_net_packages:
- libvirt
- libvirt-daemon
- python3-libvirt
- python3-lxml

View File

@@ -0,0 +1,5 @@
---
virt_net_packages:
- libvirt-daemon
- python-libvirt
- python-lxml

View File

@@ -0,0 +1,5 @@
---
virt_net_packages:
- libvirt-daemon
- python-libvirt
- python-lxml

View File

@@ -0,0 +1,6 @@
---
virt_net_packages:
- libvirt-daemon
- libvirt-daemon-system
- python-libvirt
- python-lxml

View File

@@ -0,0 +1,5 @@
---
virt_net_packages:
- libvirt-daemon
- python-libvirt
- python-lxml