blob: e15170d0acf1f7b8062dc1286d2746208e6aa102 [file] [log] [blame]
---
- name: Ensure Prerequisites
apt:
name: "{{ item }}"
state: present
with_items:
- python-ethtool=0.7*
- name: Gather Interface Information
netinfo:
- name: Establish Interface Lists
set_fact:
reboot_required: false
fabric_iface_list: []
nonfabric_iface_list: []
search_list: "|{{ compute_node.fabric_iface_match }}|"
changed_when: false
- name: Gather Fabric Interfaces
set_fact:
fabric_iface_list: "{{ fabric_iface_list + [item] }}"
with_items:
- "{{ netinfo.keys() | sort }}"
when: netinfo[item]['module'] is defined and search_list.find('|' + netinfo[item]['module'] + '|') != -1 and ( not compute_node.interfaces.external or item != compute_node.interfaces.external )
changed_when: false
- name: Gather Non-Fabric Interfaces
set_fact:
nonfabric_iface_list: "{{ nonfabric_iface_list + [item] }}"
with_items:
- "{{ netinfo.keys() | sort }}"
when: netinfo[item]['module'] is defined and search_list.find('|' + netinfo[item]['module'] + '|') == -1 and ( not compute_node.interfaces.external or item != compute_node.interfaces.external )
changed_when: false
#- name: Ensure Loopback
# netfile:
# src: "{{ compute_node.interfaces.file }}"
# state: present
# name: lo
# config: loopback
# auto: true
# description: "Loopback interface"
# register: net_changed
#- name: Verify Loopback Change
# set_fact:
# reboot_required: "{{ net_changed.changed }}"
- name: Ensure Fabric
netfile:
src: "{{ compute_node.interfaces.file }}"
state: present
name: fabric
config: static
auto: true
address: "{{ compute_node.addresses.fabric }}"
bond-mode: active-backup
bond-miimon: 100
bond-slaves: none
description: "Leaf - Spine bonded fabric interface"
register: net_changed
- name: Verify Network Change
set_fact:
reboot_required: "{{ reboot_required }}"
- name: Gather Primary Fabric Interface
set_fact:
fabric_primary_iface: "{{ fabric_iface_list | sort | first }}"
changed_when: false
when: fabric_iface_list|length > 0
- name: Ensure Primary Fabric Interface
netfile:
src: "{{ compute_node.interfaces.file }}"
state: present
auto: true
name: "{{ fabric_primary_iface }}"
config: manual
bond-master: fabric
bond-primary: "{{ fabric_primary_iface }}"
description: "Primary fabric interface"
register: net_changed
when: fabric_iface_list|length > 0
- name: Verify Primary Fabric Interface Changed
set_fact:
reboot_required: "{{ reboot_required }} or {{ net_changed.changed }}"
- name: Ensure Fabric Interfaces
netfile:
src: "{{ compute_node.interfaces.file }}"
state: present
auto: true
name: "{{ item }}"
config: manual
bond-master: fabric
description: "Fabric interface"
register: net_changed
when: fabric_iface_list|length > 1 and item != fabric_primary_iface
with_items:
- "{{ fabric_iface_list | sort }}"
- name: Verify Fabric Interfaces Changed
set_fact:
reboot_required: "{{ reboot_required }} or {{ net_changed.changed }}"
- name: Ensure Management Bridge DHCP
netfile:
src: "{{ compute_node.interfaces.file }}"
state: present
name: mgmtbr
config: "dhcp"
auto: true
bridge_ports: "{{ nonfabric_iface_list | join(' ') }}"
description: "Internal POD management interface"
register: net_changed
when: compute_node.addresses.management == "dhcp"
- name: Verify Management Bridge DHCP Changed
set_fact:
reboot_required: "{{ reboot_required }} or {{ net_changed.changed }}"
- name: Ensure Management Bridge STATIC
netfile:
src: "{{ compute_node.interfaces.file }}"
state: present
name: mgmtbr
config: static
auto: true
address: "{{ compute_node.addresses.management }}"
gateway: "{{ compute_node.gateway.management | default(omit) }}"
broadcast: "{{ compute_node.broadcast.management | default(omit) }}"
bridge_ports: "{{ nonfabric_iface_list | join(' ') }}"
description: "Internal POD management interface"
register: net_changed
when: compute_node.addresses.management != "dhcp"
- name: Verify Management Bridge STATIC Changed
set_fact:
reboot_required: "{{ reboot_required }} or {{ net_changed.changed }}"
- name: Ensure Management Bridge Interfaces
netfile:
src: "{{ compute_node.interfaces.file }}"
state: present
auto: true
name: "{{ item }}"
config: manual
description: "Management interface"
register: net_changed
with_items:
- "{{ nonfabric_iface_list | sort }}"
- name: Verify Management Bridge Interfaces Changed
set_fact:
reboot_required: "{{ reboot_required }} or {{ net_changed.changed }}"
- name: Ensure External Interface DHCP
netfile:
src: "{{ compute_node.interfaces.file }}"
state: present
auto: true
name: "{{ compute_node.interfaces.external }}"
config: dhcp
description: "External interface from POD to Internet (uplink)"
register: net_changed
when: compute_node.interfaces.external and compute_node.addresses.external == "dhcp"
- name: Verify External Interface DHCP Changed
set_fact:
reboot_required: "{{ reboot_required }} or {{ net_changed.changed }}"
- name: Ensure External Interface STATIC
netfile:
src: "{{ compute_node.interfaces.file }}"
state: present
auto: true
name: "{{ compute_node.interfaces.external }}"
config: static
address: "{{ compute_node.addresses.external }}"
gateway: "{{ compute_node.gateway.external | default(omit) }}"
broadcast: "{{ compute_node.broadcast.external | default(omit) }}"
description: "External interface from POD to Internet (uplink)"
register: net_changed
when: compute_node.interfaces.external and compute_node.addresses.external != "dhcp"
- name: Verify External Interface STATIC Changed
set_fact:
reboot_required: "{{ reboot_required }} or {{ net_changed.changed }}"
- name: Reboot Required
command: /sbin/reboot
async: 0
poll: 0
ignore_errors: true
when: reboot_required
tags:
- interface_config
- reboot
- name: Ensure Port Defined
set_fact:
ansible_ssh_port: 22
when: ansible_ssh_port is not defined
- name: Wait For Restart
local_action: wait_for port={{ ansible_ssh_port }} host={{ inventory_hostname }} search_regex=OpenSSH delay=120 timeout=600 connect_timeout=15
when: reboot_required
tags:
- interface_config
- reboot