- name: Include OS-specific variables include_vars: "{{ zj_distro_os }}" with_first_found: - "{{ ansible_distribution }}.yaml" - "{{ ansible_os_family }}.yaml" - "default.yaml" loop_control: loop_var: zj_distro_os # openvswitch for CentOS is available from the RDO repositories. # We're setting it up manually to prevent centos-release-openstack or rdo-release # from installing repositories we don't need. - name: Install for Redhat when: - ansible_os_family == "RedHat" - ansible_distribution not in ["Fedora", "RedHat"] become: yes block: - name: Set up RDO GPG key copy: src: RPM-GPG-KEY-CentOS-SIG-Cloud dest: /tmp/RPM-GPG-KEY-CentOS-SIG-Cloud mode: 0644 - name: Set up RDO repository template: src: zuul-multi-node-bridge-ovs.repo.j2 dest: /etc/yum.repos.d/zuul-multi-node-bridge-ovs.repo mode: 0644 - name: Set package.use values for OVS on Gentoo become: yes lineinfile: path: /etc/portage/package.use/ovs line: "{{ zj_item.line }}" create: yes mode: 0644 loop: - { line: 'dev-python/twisted conch # for openvswitch' } - { line: 'sys-apps/util-linux caps # for openvswitch' } - { line: 'net-misc/openvswitch -modules # ovs/gre are staticly built' } loop_control: loop_var: zj_item when: - ansible_distribution == 'Gentoo' - name: Install openvswitch become: yes package: name: "{{ ovs_package }}" state: present when: - install_ovs|bool - ansible_distribution != 'Gentoo' - name: Install openvswitch (Gentoo) become: yes package: name: "{{ ovs_package }}" state: present jobs: 8 when: - install_ovs|bool - ansible_distribution == 'Gentoo' - name: Ensure openvswitch is started become: yes service: name: "{{ ovs_service }}" state: started enabled: yes when: - install_ovs|bool - name: Remove RDO repository files become: yes file: path: "{{ zj_rdo }}" state: absent loop: - /tmp/RPM-GPG-KEY-CentOS-SIG-Cloud - /etc/yum.repos.d/zuul-multi-node-bridge-ovs.repo loop_control: loop_var: zj_rdo when: - ansible_os_family == "RedHat" - ansible_distribution != "Fedora" - name: Authorize the multi-node-bridge network become: yes iptables: state: present action: insert chain: INPUT ip_version: ipv4 source: "{{ bridge_address_prefix }}.0/{{ bridge_address_subnet }}" destination: "{{ bridge_address_prefix }}.0/{{ bridge_address_subnet }}" jump: ACCEPT when: - bridge_configure_address | bool - bridge_authorize_internal_traffic | bool - name: Find bridge MTU when: bridge_mtu is not defined block: - name: Determine bridge mtu shell: | # Find all interfaces with a permanent mac address type. # Permanent mac addrs imply "real" hardware and not interfaces we have # created through this system. This makes our MTU determination mostly # idempotent allowing us to create multiple overlays without # perpetually smaller MTUs. # find is used instead of ls as we can select the 'link' type with find # only the link type is needed because files do not have interface # properties and directories are not used for this area of /sys SMALLEST_MTU="" for X in $(find /sys/class/net/ -maxdepth 1 -type l -exec basename {} ';') ; do MAC_TYPE=$(cat "/sys/class/net/${X}/addr_assign_type") if [ "$MAC_TYPE" -ne "0" ] ; then # Type 0 is a permanent address implying a "real" # interface. We ignore other interfaces as that is what we # create here continue fi MTU=$(cat "/sys/class/net/${X}/mtu") if [ -z "$SMALLEST_MTU" ] || [ "$SMALLEST_MTU" -gt "$MTU" ] ; then SMALLEST_MTU=$MTU fi done # 70 byte overhead for vxlan + IPv6, which will also support IPv4 echo $(( SMALLEST_MTU - 70 )) args: executable: /bin/bash environment: PATH: '{{ ansible_env.PATH }}:/bin:/sbin:/usr/sbin' register: mtu_output - name: Set bridge_mtu set_fact: bridge_mtu: "{{ mtu_output.stdout }}"