--- # Copyright 2018, Rackspace US, Inc. # Copyright 2018, Logan Vig # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. - name: Playbook for role testing hosts: localhost connection: local become: true gather_facts: true roles: - role: "systemd_networkd" vars: systemd_networkd_link: MACAddressPolicy: "persistent" NamePolicy: "kernel database onboard slot path" systemd_run_networkd: yes systemd_resolved: DNS: "208.67.222.222" FallbackDNS: "8.8.8.8" Cache: yes systemd_netdevs: - NetDev: Name: dummy0 Kind: dummy - NetDev: Name: dummy1 Kind: dummy - NetDev: Name: bond0 Kind: bond Bond: Mode: 802.3ad TransmitHashPolicy: layer3+4 MIIMonitorSec: 1s LACPTransmitRate: fast - NetDev: Name: br-dummy Kind: bridge - NetDev: Name: dummy2 Kind: dummy - NetDev: Name: br-test Kind: bridge - NetDev: Name: br-test2 Kind: bridge systemd_networks: - interface: "dummy0" bond: "bond0" mtu: 9000 - interface: "dummy1" bond: "bond0" mtu: 9000 - interface: "bond0" bridge: "br-dummy" mtu: 9000 - interface: "br-dummy" address: "10.0.0.100" netmask: "255.255.255.0" gateway: "{{ ansible_facts['default_ipv4']['gateway'] | default('10.0.0.1') }}" mtu: 9000 usedns: true static_routes: - gateway: "10.1.0.1" cidr: "10.1.0.0/24" config_overrides: Network: ConfigureWithoutCarrier: true link_config_overrides: Alias: "dummy-bridge0" - interface: "dummy2" bridge: "br-test" - interface: "br-test" address: "10.1.0.1" netmask: "255.255.255.0" - interface: "br-test2" address: 10.2.0.1 netmask: "255.255.255.0" ipforward: true - name: Test networkd hosts: localhost connection: local become: true gather_facts: true tasks: - name: Interface check assert: that: - ansible_facts['dummy0']['active'] - ansible_facts['dummy0']['type'] == 'ether' - ansible_facts['dummy0']['mtu'] == 9000 - ansible_facts['dummy1']['active'] - ansible_facts['dummy1']['type'] == 'ether' - ansible_facts['dummy1']['mtu'] == 9000 - ansible_facts['dummy2']['active'] - ansible_facts['dummy2']['type'] == 'ether' - name: Bond check assert: that: - ansible_facts['bond0']['active'] - ansible_facts['bond0']['type'] == 'bonding' - ansible_facts['bond0']['mtu'] == 9000 - name: Bridge check assert: that: - ansible_facts['br_dummy']['active'] - ansible_facts['br_dummy']['type'] == 'bridge' - ansible_facts['br_dummy']['ipv4']['address'] == '10.0.0.100' - ansible_facts['br_dummy']['ipv4']['netmask'] == '255.255.255.0' - name: Bridge check assert: that: - ansible_facts['br_test']['active'] - ansible_facts['br_test']['type'] == 'bridge' - ansible_facts['br_test']['ipv4']['address'] == '10.1.0.1' - ansible_facts['br_test']['ipv4']['netmask'] == '255.255.255.0' - name: Check link config overrides shell: 'grep -wo "Alias" /etc/systemd/network/*br-dummy.link' changed_when: false - name: Check general link config shell: 'grep -wo "{{ item }}" /etc/systemd/network/*.link' changed_when: false with_items: - MACAddressPolicy - NamePolicy - name: Check forwarding is enabled shell: 'grep -wo ^1$ /proc/sys/net/{{ item }}' changed_when: false with_items: - "ipv4/ip_forward" - "ipv4/conf/all/forwarding" - "ipv4/conf/br-test2/forwarding" - 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_facts['br_test'] is defined - ansible_facts['dummy2']['active'] - ansible_facts['dummy2']['type'] == 'ether' - name: Bridge check assert: that: - ansible_facts['br_test']['active'] - ansible_facts['br_test']['type'] == 'bridge' - ansible_facts['br_test']['ipv4']['address'] == '10.1.0.1' - ansible_facts['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"