| --- |
| # Copyright 2017-present Open Networking Foundation |
| # |
| # 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. |
| |
| # interface-config/tasks/main.yml |
| |
| - name: Configure management network if management_net_ip_cidr is set/valid |
| when: management_net_ip_cidr | ipaddr |
| set_fact: |
| configure_management_interfaces: true |
| |
| - name: Configure fabric network if fabric_net_ip_cidr is set/valid |
| when: fabric_net_ip_cidr | ipaddr |
| set_fact: |
| configure_fabric_interfaces: true |
| |
| - name: Install bridging/bonding utilities |
| apt: |
| name: "{{ item }}" |
| update_cache: yes |
| cache_valid_time: 3600 |
| with_items: |
| - bridge-utils |
| - ifenslave |
| register: task_result |
| until: task_result is success |
| retries: 3 |
| delay: 5 |
| |
| # management network |
| - name: Find management interfaces given management_net_kmods |
| when: ( configure_management_interfaces ) and ( management_net_kmods | length > 0 ) |
| set_fact: |
| management_net_interfaces: "{{ [ hostvars[inventory_hostname]['ansible_' ~ item[0]] ] | selectattr('module', 'defined') | selectattr('module', 'equalto', item[1]) | map(attribute='device') | list | union(management_net_interfaces) }}" # noqa 204 |
| with_nested: |
| - "{{ ansible_interfaces }}" |
| - "{{ management_net_kmods }}" |
| |
| - name: Find management interfaces given management_net_hwaddrs |
| when: ( configure_management_interfaces ) and ( management_net_hwaddrs | length > 0 ) |
| set_fact: |
| management_net_interfaces: "{{ [ hostvars[inventory_hostname]['ansible_' ~ item[0]] ] | selectattr('macaddress', 'defined') | selectattr('macaddress', 'equalto', item[1]) | map(attribute='device') | list | union(management_net_interfaces) }}" # noqa 204 |
| with_nested: |
| - "{{ ansible_interfaces }}" |
| - "{{ management_net_hwaddrs }}" |
| |
| # fabric network |
| - name: Find fabric interfaces given fabric_net_kmods |
| when: ( configure_fabric_interfaces ) and ( fabric_net_kmods | length > 0 ) |
| set_fact: |
| fabric_net_interfaces: "{{ [ hostvars[inventory_hostname]['ansible_' ~ item[0]] ] | selectattr('module', 'defined') | selectattr('module', 'equalto', item[1]) | map(attribute='device') | list | union(fabric_net_interfaces) }}" # noqa 204 |
| with_nested: |
| - "{{ ansible_interfaces }}" |
| - "{{ fabric_net_kmods }}" |
| |
| - name: Find fabric interfaces given fabric_net_hwaddrs |
| when: ( configure_fabric_interfaces ) and ( fabric_net_hwaddrs | length > 0 ) |
| set_fact: |
| fabric_net_interfaces: "{{ [ hostvars[inventory_hostname]['ansible_' ~ item[0]] ] | selectattr('macaddress', 'defined') | selectattr('macaddress', 'equalto', item[1]) | map(attribute='device') | list | union(fabric_net_interfaces) }}" # noqa 204 |
| with_nested: |
| - "{{ ansible_interfaces }}" |
| - "{{ fabric_net_hwaddrs }}" |
| |
| # all interfaces discovered |
| - name: Print lists of interfaces |
| debug: |
| msg: "{{ item }}" |
| with_items: |
| - "Ansible detected interfaces: {{ ansible_interfaces | join(', ') }}" |
| - "Proposed management network interfaces: {{ management_net_interfaces | join(', ') }}" |
| - "Proposed fabric network interfaces: {{ fabric_net_interfaces | join(', ') }}" |
| |
| - name: Make sure all interfaces exist, and aren't shared between lists |
| assert: |
| that: |
| - fabric_net_interfaces | difference(ansible_interfaces) | length == 0 |
| - management_net_interfaces | difference(ansible_interfaces) | length == 0 |
| - management_net_interfaces | intersect(fabric_net_interfaces) | length == 0 |
| |
| - name: Configure management network interfaces |
| when: configure_management_interfaces | default(false) |
| template: |
| src: management.cfg.j2 |
| dest: "/etc/network/interfaces.d/management.cfg" |
| owner: root |
| group: root |
| mode: 0644 |
| register: management_net_config |
| |
| - name: Configure fabric network interfaces |
| when: configure_fabric_interfaces | default(false) |
| template: |
| src: fabric.cfg.j2 |
| dest: "/etc/network/interfaces.d/fabric.cfg" |
| owner: root |
| group: root |
| mode: 0644 |
| register: fabric_net_config |
| |
| - name: Bring up management network interfaces, if reconfigured |
| when: management_net_config.changed |
| command: "ifup {{ item }}" |
| with_flattened: |
| - mgmtbridge |
| - mgmtbond |
| - "{{ management_net_interfaces }}" |
| tags: |
| - skip_ansible_lint # needs to be run before next steps |
| |
| - name: Bring up fabric network interfaces, if reconfigured |
| when: fabric_net_config.changed |
| command: "ifup {{ item }}" |
| with_flattened: |
| - fabricbridge |
| - fabricbond |
| - "{{ fabric_net_interfaces }}" |
| tags: |
| - skip_ansible_lint # needs to be run before next steps |
| |