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:
parent
b6a4cfe946
commit
b0395c727e
@ -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:
|
||||
|
@ -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"
|
||||
|
@ -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 %}
|
@ -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"
|
||||
|
Loading…
x
Reference in New Issue
Block a user