209 lines
6.7 KiB
Plaintext
209 lines
6.7 KiB
Plaintext
---
|
|
# VLAN Mappings
|
|
_az_vlan_mappings:
|
|
az1:
|
|
management: 10
|
|
storage: 20
|
|
tunnel: 30
|
|
public-api: 400
|
|
az2:
|
|
management: 10
|
|
storage: 21
|
|
tunnel: 31
|
|
public-api: 400
|
|
az3:
|
|
management: 10
|
|
storage: 22
|
|
tunnel: 32
|
|
public-api: 400
|
|
|
|
# Bonding interfaces
|
|
_bond0_interfaces:
|
|
- eth0
|
|
- eth1
|
|
|
|
# NETDEV defenition
|
|
_systemd_networkd_default_devices:
|
|
- NetDev:
|
|
Name: vlan-mgmt
|
|
Kind: vlan
|
|
VLAN:
|
|
Id: "{{ _az_vlan_mappings[az_name]['management'] }}"
|
|
filename: 10-openstack-vlan-mgmt
|
|
- NetDev:
|
|
Name: bond0
|
|
Kind: bond
|
|
Bond:
|
|
Mode: 802.3ad
|
|
TransmitHashPolicy: layer3+4
|
|
LACPTransmitRate: fast
|
|
MIIMonitorSec: 100
|
|
filename: 05-general-bond0
|
|
- NetDev:
|
|
Name: "{{ management_bridge }}"
|
|
Kind: bridge
|
|
Bridge:
|
|
ForwardDelaySec: 0
|
|
HelloTimeSec: 2
|
|
MaxAgeSec: 12
|
|
STP: off
|
|
filename: "11-openstack-{{ management_bridge }}"
|
|
|
|
_systemd_networkd_storage_devices:
|
|
- NetDev:
|
|
Name: vlan-stor
|
|
Kind: vlan
|
|
VLAN:
|
|
Id: "{{ _az_vlan_mappings[az_name]['storage'] }}"
|
|
filename: 12-openstack-vlan-stor
|
|
- NetDev:
|
|
Name: br-storage
|
|
Kind: bridge
|
|
Bridge:
|
|
ForwardDelaySec: 0
|
|
HelloTimeSec: 2
|
|
MaxAgeSec: 12
|
|
STP: off
|
|
filename: 13-openstack-br-storage
|
|
|
|
_systemd_networkd_tunnel_devices:
|
|
- NetDev:
|
|
Name: vlan-tunnel
|
|
Kind: vlan
|
|
VLAN:
|
|
Id: "{{ _az_vlan_mappings[az_name]['tunnel'] }}"
|
|
filename: 16-openstack-vlan-tunnel
|
|
|
|
_systemd_networkd_pub_api_devices:
|
|
- NetDev:
|
|
Name: vlan-public-api
|
|
Kind: vlan
|
|
VLAN:
|
|
Id: "{{ _az_vlan_mappings[az_name]['public-api'] }}"
|
|
filename: 17-openstack-vlan-public-api
|
|
- NetDev:
|
|
Name: br-public-api
|
|
Kind: bridge
|
|
Bridge:
|
|
ForwardDelaySec: 0
|
|
HelloTimeSec: 2
|
|
MaxAgeSec: 12
|
|
STP: off
|
|
filename: 18-openstack-br-public-api
|
|
|
|
openstack_hosts_systemd_networkd_devices: |-
|
|
{% set devices = [] %}
|
|
{% if is_metal %}
|
|
{% set _ = devices.extend(_systemd_networkd_default_devices) %}
|
|
{% if inventory_hostname in (groups['compute_hosts'] + groups['storage_hosts']) %}
|
|
{% set _ = devices.extend(_systemd_networkd_storage_devices) %}
|
|
{% endif %}
|
|
{% if inventory_hostname in (groups[az_name ~ '_ceph_mon_hosts'] + groups[az_name ~ '_ceph_osd_hosts']) %}
|
|
{% set _ = devices.extend(_systemd_networkd_cluster_devices) %}
|
|
{% endif %}
|
|
{% if inventory_hostname in groups['compute_hosts'] %}
|
|
{% set _ = devices.extend(_systemd_networkd_tunnel_devices) %}
|
|
{% endif %}
|
|
{% if inventory_hostname in groups['haproxy_hosts'] %}
|
|
{% set _ = devices.extend(_systemd_networkd_pub_api_devices) %}
|
|
{% endif %}
|
|
{% endif %}
|
|
{{ devices }}
|
|
|
|
# NETWORK definition
|
|
|
|
# NOTE: this can work only in case management network has the same netmask as all other networks
|
|
# while in example manaement is /22 while rest are /24
|
|
# _management_rank: "{{ management_address | ansible.utils.ipsubnet(hostvars[inventory_hostname]['cidr_networks']['management']) }}"
|
|
_management_rank: "{{ (management_address | split('.'))[-1] }}"
|
|
|
|
# NOTE: `05` is prefixed to filename to have precedence over netplan
|
|
_systemd_networkd_bonded_networks: |-
|
|
{% set struct = [] %}
|
|
{% for interface in _bond0_interfaces %}
|
|
{% set interface_data = ansible_facts[interface | replace('-', '_')] %}
|
|
{% set _ = struct.append({
|
|
'interface': interface_data['device'],
|
|
'filename' : '05-general-' ~ interface_data['device'],
|
|
'bond': 'bond0',
|
|
'link_config_overrides': {
|
|
'Match': {
|
|
'MACAddress': interface_data['macaddress']
|
|
}
|
|
}
|
|
})
|
|
%}
|
|
{% endfor %}
|
|
{% set bond_vlans = ['vlan-mgmt'] %}
|
|
{% if inventory_hostname in (groups['compute_hosts'] + groups['storage_hosts']) %}
|
|
{% set _ = bond_vlans.append('vlan-stor') %}
|
|
{% endif %}
|
|
{% if inventory_hostname in groups['haproxy_hosts'] %}
|
|
{% set _ = bond_vlans.append('vlan-public-api') %}
|
|
{% endif %}
|
|
{% if inventory_hostname in groups['compute_hosts'] %}
|
|
{% set _ = bond_vlans.append('vlan-tunnel') %}
|
|
{% endif %}
|
|
{% set _ = struct.append({
|
|
'interface': 'bond0',
|
|
'filename': '05-general-bond0',
|
|
'vlan': bond_vlans
|
|
})
|
|
%}
|
|
{{ struct }}
|
|
|
|
_systemd_networkd_mgmt_networks:
|
|
- interface: "vlan-mgmt"
|
|
bridge: "{{ management_bridge }}"
|
|
filename: 10-openstack-vlan-mgmt
|
|
- interface: "{{ management_bridge }}"
|
|
address: "{{ management_address }}"
|
|
netmask: "{{ cidr_networks['management'] | ansible.utils.ipaddr('netmask') }}"
|
|
filename: "11-openstack-{{ management_bridge }}"
|
|
|
|
_systemd_networkd_storage_networks:
|
|
- interface: "vlan-stor"
|
|
bridge: "br-storage"
|
|
filename: 12-openstack-vlan-stor
|
|
- interface: "br-storage"
|
|
address: "{{ cidr_networks['storage_' ~ az_name] | ansible.utils.ipmath(_management_rank) }}"
|
|
netmask: "{{ cidr_networks['storage_' ~ az_name] | ansible.utils.ipaddr('netmask') }}"
|
|
filename: "13-openstack-br-storage"
|
|
|
|
_systemd_networkd_tunnel_networks:
|
|
- interface: "vlan-tunnel"
|
|
filename: 16-openstack-vlan-tunnel
|
|
address: "{{ cidr_networks['tunnel_' ~ az_name] | ansible.utils.ipmath(_management_rank) }}"
|
|
netmask: "{{ cidr_networks['tunnel_' ~ az_name] | ansible.utils.ipaddr('netmask') }}"
|
|
static_routes: |-
|
|
{% set routes = [] %}
|
|
{% set tunnel_cidrs = cidr_networks | dict2items | selectattr('key', 'match', 'tunnel_az[0-9]') | map(attribute='value') %}
|
|
{% set gateway = cidr_networks['tunnel_' ~ az_name] | ansible.utils.ipaddr('1') | ansible.utils.ipaddr('address') %}
|
|
{% for cidr in tunnel_cidrs | reject('eq', cidr_networks['tunnel_' ~ az_name]) %}
|
|
{% set _ = routes.append({'cidr': cidr, 'gateway': gateway}) %}
|
|
{% endfor %}
|
|
{{ routes }}
|
|
|
|
_systemd_networkd_pub_api_networks:
|
|
- interface: "vlan-public-api"
|
|
bridge: "br-public-api"
|
|
filename: 17-openstack-vlan-public-api
|
|
- interface: "br-public-api"
|
|
filename: "18-openstack-br-public-api"
|
|
|
|
openstack_hosts_systemd_networkd_networks: |-
|
|
{% set networks = [] %}
|
|
{% if is_metal %}
|
|
{% set _ = networks.extend(_systemd_networkd_mgmt_networks + _systemd_networkd_bonded_networks) %}
|
|
{% if inventory_hostname in (groups['compute_hosts'] + groups['storage_hosts']) %}
|
|
{% set _ = networks.extend(_systemd_networkd_storage_networks) %}
|
|
{% endif %}
|
|
{% if inventory_hostname in groups['compute_hosts'] %}
|
|
{% set _ = networks.extend(_systemd_networkd_tunnel_networks) %}
|
|
{% endif %}
|
|
{% if inventory_hostname in groups['haproxy_hosts'] %}
|
|
{% set _ = networks.extend(_systemd_networkd_pub_api_networks) %}
|
|
{% endif %}
|
|
{% endif %}
|
|
{{ networks }}
|