mirror of
https://github.com/linux-system-roles/network.git
synced 2026-01-23 02:15:17 +00:00
Ansible 2.20 has deprecated the use of Ansible facts as variables. For example, `ansible_distribution` is now deprecated in favor of `ansible_facts["distribution"]`. This is due to making the default setting `INJECT_FACTS_AS_VARS=false`. For now, this will create WARNING messages, but in Ansible 2.24 it will be an error. See https://docs.ansible.com/projects/ansible/latest/porting_guides/porting_guide_core_2.20.html#inject-facts-as-vars Signed-off-by: Rich Megginson <rmeggins@redhat.com>
145 lines
5.5 KiB
YAML
145 lines
5.5 KiB
YAML
# SPDX-License-Identifier: BSD-3-Clause
|
|
---
|
|
- name: Install dnsmasq
|
|
package:
|
|
name: dnsmasq
|
|
state: present
|
|
use: "{{ (__network_is_ostree | d(false)) |
|
|
ternary('ansible.posix.rhel_rpm_ostree', omit) }}"
|
|
register: __install_status
|
|
# sometimes the rpm download returns a 403 - I think it is when too
|
|
# many parallel jobs attempt the download from the same controller in
|
|
# too short a period of time, so the server throttles additional
|
|
# downloads - use a retry here to mitigate
|
|
until: __install_status is success
|
|
retries: 6
|
|
delay: 10
|
|
|
|
- name: Install pgrep, sysctl
|
|
package:
|
|
name: procps
|
|
state: present
|
|
use: "{{ (__network_is_ostree | d(false)) |
|
|
ternary('ansible.posix.rhel_rpm_ostree', omit) }}"
|
|
when:
|
|
- ansible_facts['os_family'] == 'RedHat'
|
|
- ansible_facts['distribution_major_version'] is version('6', '<=')
|
|
|
|
- name: Install pgrep, sysctl
|
|
package:
|
|
name: procps-ng
|
|
state: present
|
|
use: "{{ (__network_is_ostree | d(false)) |
|
|
ternary('ansible.posix.rhel_rpm_ostree', omit) }}"
|
|
when:
|
|
- ansible_facts['os_family'] == 'RedHat'
|
|
- ansible_facts['distribution_major_version'] is version('7', '>=')
|
|
|
|
- name: Create test interfaces
|
|
shell: |
|
|
set -euxo pipefail
|
|
exec 1>&2
|
|
ip link add {{ dhcp_interface1 }} type veth peer name {{ dhcp_interface1 }}p
|
|
ip link add {{ dhcp_interface2 }} type veth peer name {{ dhcp_interface2 }}p
|
|
if [ -n "$(pgrep NetworkManager)" ];then
|
|
nmcli d set {{ dhcp_interface1 }} managed true
|
|
nmcli d set {{ dhcp_interface2 }} managed true
|
|
# NetworkManager should not manage DHCP server ports
|
|
nmcli d set {{ dhcp_interface1 }}p managed false
|
|
nmcli d set {{ dhcp_interface2 }}p managed false
|
|
fi
|
|
ip link set {{ dhcp_interface1 }}p up
|
|
ip link set {{ dhcp_interface2 }}p up
|
|
|
|
# Create the 'testbr' - providing both 10.x ipv4 and 2620:52:0 ipv6 dhcp
|
|
ip link add name testbr type bridge forward_delay 0
|
|
if [ -n "$(pgrep NetworkManager)" ];then
|
|
# NetworkManager should not manage DHCP server ports
|
|
nmcli d set testbr managed false
|
|
fi
|
|
ip link set testbr up
|
|
timer=0
|
|
# The while loop following is a workaround for the NM bug, which can be
|
|
# tracked in https://bugzilla.redhat.com/show_bug.cgi?id=2079642
|
|
while ! ip addr show testbr | grep -q 'inet [1-9]'
|
|
do
|
|
let "timer+=1"
|
|
if [ $timer -eq 30 ]; then
|
|
echo ERROR - could not add testbr
|
|
ip addr
|
|
exit 1
|
|
fi
|
|
sleep 1
|
|
rc=0
|
|
ip addr add 192.0.2.1/24 dev testbr || rc="$?"
|
|
if [ "$rc" != 0 ]; then
|
|
echo NOTICE - could not add testbr - error code "$rc"
|
|
continue
|
|
fi
|
|
ip -6 addr add 2001:DB8::1/32 dev testbr || rc="$?"
|
|
if [ "$rc" != 0 ]; then
|
|
echo NOTICE - could not add testbr - error code "$rc"
|
|
continue
|
|
fi
|
|
done
|
|
|
|
if grep 'release 6' /etc/redhat-release; then
|
|
# We need bridge-utils and radvd only in rhel6
|
|
if ! rpm -q --quiet radvd; then yum -y install radvd; fi
|
|
if ! rpm -q --quiet bridge-utils; then yum -y install bridge-utils; fi
|
|
|
|
# We need to add iptables rule to allow dhcp request
|
|
iptables -I INPUT -i testbr -p udp --dport 67:68 --sport 67:68 -j ACCEPT
|
|
|
|
# Add {{ dhcp_interface1 }}, {{ dhcp_interface2 }} peers into the testbr
|
|
brctl addif testbr {{ dhcp_interface1 }}p
|
|
brctl addif testbr {{ dhcp_interface2 }}p
|
|
|
|
# in RHEL6 /run is not present
|
|
mkdir -p /run
|
|
|
|
# and dnsmasq does not support ipv6
|
|
dnsmasq \
|
|
--pid-file=/run/dhcp_testbr.pid \
|
|
--dhcp-leasefile=/run/dhcp_testbr.lease \
|
|
--dhcp-range=192.0.2.1,192.0.2.254,240 \
|
|
--interface=testbr --bind-interfaces
|
|
|
|
# start radvd for ipv6
|
|
echo 'interface testbr {' > /etc/radvd.conf
|
|
echo ' AdvSendAdvert on;' >> /etc/radvd.conf
|
|
echo ' prefix 2001:DB8::/64 { ' >> /etc/radvd.conf
|
|
echo ' AdvOnLink on; }; ' >> /etc/radvd.conf
|
|
echo ' }; ' >> /etc/radvd.conf
|
|
|
|
# enable ipv6 forwarding
|
|
sysctl -w net.ipv6.conf.all.forwarding=1
|
|
service radvd restart
|
|
|
|
else
|
|
ip link set {{ dhcp_interface1 }}p master testbr
|
|
ip link set {{ dhcp_interface2 }}p master testbr
|
|
# Run joint DHCP4/DHCP6 server with RA enabled in veth namespace
|
|
if systemctl is-active firewalld; then
|
|
for service in dhcp dhcpv6 dhcpv6-client; do
|
|
if ! firewall-cmd --query-service="$service"; then
|
|
firewall-cmd --add-service "$service"
|
|
fi
|
|
done
|
|
fi
|
|
# NOTE: When running tests with a qemu managed node, the dhcp
|
|
# used by qemu interferes with the dhcp used in the test, which
|
|
# can cause the test to hang. Exclude the qemu interfaces from
|
|
# using the test dhcp. Note that this only affects the qemu tests -
|
|
# testing farm and other tests with "real" machines will have a
|
|
# different mac address - the mac addresses used below are specific
|
|
# to qemu virtual devices.
|
|
dnsmasq \
|
|
--pid-file=/run/dhcp_testbr.pid \
|
|
--dhcp-leasefile=/run/dhcp_testbr.lease \
|
|
--dhcp-range=192.0.2.1,192.0.2.254,240 \
|
|
--dhcp-range=2001:DB8::10,2001:DB8::1FF,slaac,64,240 \
|
|
--enable-ra --interface=testbr --bind-interfaces \
|
|
--dhcp-host 52:54:00:12:34:56,ignore --dhcp-host 52:54:00:12:34:57,ignore
|
|
fi
|
|
changed_when: false
|