Update cleanup process and set a file prefix

The interface cleanup was generating a script that could be used to run
a cleanup whenever required. While this worked it would rapidly become
out of date, especially when multiple roles are calling this role. This
change adds a prefix which deployer can use to ensure the network
interface files are marked which will ensure we're limiting the
possibility of collisions.

The cleanup process will now use this prefix to search for and remove
any network interface file that matches the given prefix.

Change-Id: Ife5c179d27925cd2e71d3d086a731e6c13b12965
Signed-off-by: Kevin Carter <kevin.carter@rackspace.com>
This commit is contained in:
Kevin Carter 2018-05-18 23:18:55 -05:00 committed by Kevin Carter (cloudnull)
parent b6a4cfe946
commit b0395c727e
4 changed files with 88 additions and 33 deletions

View File

@ -13,15 +13,23 @@
# See the License for the specific language governing permissions and
# limitations under the License.
# Cleanup all known network interfaces
# Cleanup all known network interfaces. When this option is enabled the role
# will search for and remove all network interface files that match the prefix.
systemd_interface_cleanup: false
# Prefix for all networkd files created by this role. This prefix allows
# deployers to set specific file names reducing the chance of a collision
# and simplifies the network interface file cleanup operation should it ever
# be needed. By default, the prefix is "general" however this can be changed
# to meet the needs of the deployer.
systemd_networkd_prefix: "general"
# Enable systemd-networkd and (re)start the service
systemd_run_networkd: false
# Default filename formatting
systemd_networkd_netdev_filename: "{{ item.0 }}-{{ item.1.NetDev.Name }}.netdev"
systemd_networkd_network_filename: "{{ item.0 }}-{{ item.1.interface }}.network"
systemd_networkd_netdev_filename: "{{ item.0 }}-{{ systemd_networkd_prefix }}-{{ item.1.NetDev.Name }}.netdev"
systemd_networkd_network_filename: "{{ item.0 }}-{{ systemd_networkd_prefix }}-{{ item.1.interface }}.network"
# The `systemd_link_config_overrides` option can be used on the default link.
# See the following link for all available options:

View File

@ -61,18 +61,6 @@
tags:
- systemd-networkd
- name: Create systemd-networkd interface cleanup script
template:
src: "interface-cleanup.sh.j2"
dest: "/usr/local/bin/interface-cleanup"
owner: "root"
group: "root"
mode: "0750"
when:
- systemd_interface_cleanup | bool
tags:
- systemd-networkd
- name: Create systemd-resolved config
template:
src: "systemd-resolved.conf.j2"
@ -87,14 +75,28 @@
tags:
- systemd-resolved
- name: Run interface cleanup script
command: "/usr/local/bin/interface-cleanup"
failed_when: false
- name: Find prefixed netdev and network files
find:
paths: "/etc/systemd/network"
patterns: "*{{ systemd_networkd_prefix }}*.netdev,*{{ systemd_networkd_prefix }}*.network"
register: networkd_files
when:
- systemd_interface_cleanup | bool
tags:
- systemd-networkd
- name: Remove prefixed network files
file:
path: "{{ item.path }}"
state: absent
with_items: "{{ networkd_files.files }}"
when:
- systemd_interface_cleanup | bool
notify:
- Restart systemd-networkd
tags:
- systemd-networkd
- name: Create systemd-networkd network device(s)
template:
src: "systemd-netdev.j2"

View File

@ -1,15 +0,0 @@
#!/usr/bin/env bash
# {{ ansible_managed }}
{% for item in systemd_netdevs %}
if [[ -f "/etc/systemd/network/{{ loop.index }}-{{ item.NetDev.Name }}.netdev" ]]; then
rm -f "/etc/systemd/network/{{ loop.index }}-{{ item.NetDev.Name }}.netdev"
fi
{% endfor %}
{% for item in systemd_networks %}
if [[ -f "/etc/systemd/network/{{ loop.index }}-{{ item.interface }}.network" ]]; then
rm -f "/etc/systemd/network/{{ loop.index }}-{{ item.interface }}.network"
fi
{% endfor %}

View File

@ -50,6 +50,12 @@
- NetDev:
Name: br-dummy
Kind: bridge
- NetDev:
Name: dummy2
Kind: dummy
- NetDev:
Name: br-test
Kind: bridge
systemd_networks:
- interface: "dummy0"
bond: "bond0"
@ -72,6 +78,12 @@
config_overrides:
Network:
ConfigureWithoutCarrier: true
- interface: "dummy2"
bridge: "br-test"
- interface: "br-test"
address: "10.1.0.1"
netmask: "255.255.255.0"
- name: Test networkd
hosts: localhost
@ -88,6 +100,8 @@
- ansible_dummy1['active'] == true
- ansible_dummy1['type'] == 'ether'
- ansible_dummy1['mtu'] == 9000
- ansible_dummy2['active'] == true
- ansible_dummy2['type'] == 'ether'
- name: Bond check
assert:
that:
@ -101,3 +115,49 @@
- ansible_br_dummy['type'] == 'bridge'
- ansible_br_dummy['ipv4']['address'] == '10.0.0.100'
- ansible_br_dummy['ipv4']['netmask'] == '255.255.255.0'
- name: Bridge check
assert:
that:
- ansible_br_test['active'] == true
- ansible_br_test['type'] == 'bridge'
- ansible_br_test['ipv4']['address'] == '10.1.0.1'
- ansible_br_test['ipv4']['netmask'] == '255.255.255.0'
- name: Playbook for role testing with cleanup
hosts: localhost
connection: local
become: true
gather_facts: true
roles:
- role: "systemd_networkd"
post_tasks:
- name: Interface check
assert:
that:
- ansible_br_test is defined
- ansible_dummy2['active'] == true
- ansible_dummy2['type'] == 'ether'
- name: Bridge check
assert:
that:
- ansible_br_test['active'] == true
- ansible_br_test['type'] == 'bridge'
- ansible_br_test['ipv4']['address'] == '10.1.0.1'
- ansible_br_test['ipv4']['netmask'] == '255.255.255.0'
vars:
systemd_interface_cleanup: true
systemd_run_networkd: yes
systemd_netdevs:
- NetDev:
Name: dummy2
Kind: dummy
- NetDev:
Name: br-test
Kind: bridge
systemd_networks:
- interface: "dummyX"
bridge: "br-test"
- interface: "br-test"
address: "10.1.0.1"
netmask: "255.255.255.0"