e644e3dda9
Neutron has support[1] to set the guaranteed MTU for networks and network segments so that this is exposed to plug-ins. In interest of supporting the use of plug-ins to configure network devices in the future this change adds MTU property on neutron networks. The new (optional) property 'mtu' in the network defenitions in 'network_data.yaml' is used to control the MTU settings. By default the mtu is '1500'. We already configure the MTU on the ctlplane neutron networks, this adds the MTU to composable networks. Also update the nic-config sample templates to include mtu settings. A heat value resource is added to nic-config templates to get the required minimum viable MTU value for bridges, bonds and member interfaces to ensure the MTU is large enough to allow the largest configured MTU to traverse the path. Closes-Bug: #1790537 Change-Id: I11e38f82eb9040f77412fe8ad200fcc48031e2f8
251 lines
9.3 KiB
YAML
251 lines
9.3 KiB
YAML
heat_template_version: rocky
|
|
|
|
description: >
|
|
Software Config to drive os-net-config for a simple bridge configured
|
|
with a static IP address for the ctlplane network.
|
|
|
|
parameters:
|
|
ControlPlaneIp:
|
|
default: ''
|
|
description: IP address/subnet on the ctlplane network
|
|
type: string
|
|
ControlPlaneSubnetCidr:
|
|
default: ''
|
|
description: >
|
|
The subnet CIDR of the control plane network. (The parameter is
|
|
automatically resolved from the ctlplane subnet's cidr attribute.)
|
|
type: string
|
|
ControlPlaneDefaultRoute:
|
|
default: ''
|
|
description: The default route of the control plane network. (The parameter
|
|
is automatically resolved from the ctlplane subnet's gateway_ip attribute.)
|
|
type: string
|
|
ControlPlaneStaticRoutes:
|
|
default: []
|
|
description: >
|
|
Routes for the ctlplane network traffic.
|
|
JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}]
|
|
Unless the default is changed, the parameter is automatically resolved
|
|
from the subnet host_routes attribute.
|
|
type: json
|
|
ControlPlaneMtu:
|
|
default: 1500
|
|
description: The maximum transmission unit (MTU) size(in bytes) that is
|
|
guaranteed to pass through the data path of the segments in the network.
|
|
(The parameter is automatically resolved from the ctlplane network's mtu attribute.)
|
|
type: number
|
|
ExternalIpSubnet:
|
|
default: ''
|
|
description: IP address/subnet on the external network
|
|
type: string
|
|
ExternalInterfaceRoutes:
|
|
default: []
|
|
description: >
|
|
Routes for the external network traffic.
|
|
JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}]
|
|
Unless the default is changed, the parameter is automatically resolved
|
|
from the subnet host_routes attribute.
|
|
type: json
|
|
ExternalMtu:
|
|
default: 1500
|
|
description: The maximum transmission unit (MTU) size(in bytes) that is
|
|
guaranteed to pass through the data path of the segments in the
|
|
External network.
|
|
type: number
|
|
InternalApiIpSubnet:
|
|
default: ''
|
|
description: IP address/subnet on the internal_api network
|
|
type: string
|
|
InternalApiInterfaceRoutes:
|
|
default: []
|
|
description: >
|
|
Routes for the internal_api network traffic.
|
|
JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}]
|
|
Unless the default is changed, the parameter is automatically resolved
|
|
from the subnet host_routes attribute.
|
|
type: json
|
|
InternalApiMtu:
|
|
default: 1500
|
|
description: The maximum transmission unit (MTU) size(in bytes) that is
|
|
guaranteed to pass through the data path of the segments in the
|
|
InternalApi network.
|
|
type: number
|
|
StorageIpSubnet:
|
|
default: ''
|
|
description: IP address/subnet on the storage network
|
|
type: string
|
|
StorageInterfaceRoutes:
|
|
default: []
|
|
description: >
|
|
Routes for the storage network traffic.
|
|
JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}]
|
|
Unless the default is changed, the parameter is automatically resolved
|
|
from the subnet host_routes attribute.
|
|
type: json
|
|
StorageMtu:
|
|
default: 1500
|
|
description: The maximum transmission unit (MTU) size(in bytes) that is
|
|
guaranteed to pass through the data path of the segments in the
|
|
Storage network.
|
|
type: number
|
|
StorageMgmtIpSubnet:
|
|
default: ''
|
|
description: IP address/subnet on the storage_mgmt network
|
|
type: string
|
|
StorageMgmtInterfaceRoutes:
|
|
default: []
|
|
description: >
|
|
Routes for the storage_mgmt network traffic.
|
|
JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}]
|
|
Unless the default is changed, the parameter is automatically resolved
|
|
from the subnet host_routes attribute.
|
|
type: json
|
|
StorageMgmtMtu:
|
|
default: 1500
|
|
description: The maximum transmission unit (MTU) size(in bytes) that is
|
|
guaranteed to pass through the data path of the segments in the
|
|
StorageMgmt network.
|
|
type: number
|
|
StorageNFSIpSubnet:
|
|
default: ''
|
|
description: IP address/subnet on the storage_nfs network
|
|
type: string
|
|
StorageNFSRoutes:
|
|
default: []
|
|
description: >
|
|
Routes for the storage_nfs network traffic.
|
|
JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}]
|
|
Unless the default is changed, the parameter is automatically resolved
|
|
from the subnet host_routes attribute.
|
|
type: json
|
|
TenantIpSubnet:
|
|
default: ''
|
|
description: IP address/subnet on the tenant network
|
|
type: string
|
|
TenantInterfaceRoutes:
|
|
default: []
|
|
description: >
|
|
Routes for the tenant network traffic.
|
|
JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}]
|
|
Unless the default is changed, the parameter is automatically resolved
|
|
from the subnet host_routes attribute.
|
|
type: json
|
|
TenantMtu:
|
|
default: 1500
|
|
description: The maximum transmission unit (MTU) size(in bytes) that is
|
|
guaranteed to pass through the data path of the segments in the
|
|
Tenant network.
|
|
type: number
|
|
ManagementIpSubnet:
|
|
default: ''
|
|
description: IP address/subnet on the management network
|
|
type: string
|
|
ManagementInterfaceRoutes:
|
|
default: []
|
|
description: >
|
|
Routes for the management network traffic.
|
|
JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}]
|
|
Unless the default is changed, the parameter is automatically resolved
|
|
from the subnet host_routes attribute.
|
|
type: json
|
|
ManagementMtu:
|
|
default: 1500
|
|
description: The maximum transmission unit (MTU) size(in bytes) that is
|
|
guaranteed to pass through the data path of the segments in the
|
|
Management network.
|
|
type: number
|
|
OvSBridgeMtu:
|
|
default: 1300
|
|
description: The mtu of the OvS bridge
|
|
type: number
|
|
DnsServers: # Override this via parameter_defaults
|
|
default: []
|
|
description: >
|
|
DNS servers to use for the Overcloud (2 max for some implementations).
|
|
If not set the nameservers configured in the ctlplane subnet's
|
|
dns_nameservers attribute will be used.
|
|
type: comma_delimited_list
|
|
EC2MetadataIp:
|
|
default: ''
|
|
description: The IP address of the EC2 metadata server. (The parameter
|
|
is automatically resolved from the ctlplane subnet's host_routes attribute.)
|
|
type: string
|
|
|
|
resources:
|
|
|
|
OsNetConfigImpl:
|
|
type: OS::Heat::SoftwareConfig
|
|
properties:
|
|
group: script
|
|
config:
|
|
list_join:
|
|
- ''
|
|
- - |
|
|
#!/bin/bash
|
|
function network_config_hook {
|
|
primary_private_ip=$(cat /etc/nodepool/primary_node_private)
|
|
sed -i "s/primary_private_ip/$primary_private_ip/" /etc/os-net-config/config.json
|
|
subnode_private_ip=$(cat /etc/nodepool/node_private)
|
|
sed -i "s/subnode_private_ip/$subnode_private_ip/" /etc/os-net-config/config.json
|
|
# We start with an arbitrarily high vni key so that we don't
|
|
# overlap with Neutron created values. These will also match the
|
|
# values that we've been using previously from the devstack-gate
|
|
# code.
|
|
vni=1000002
|
|
subnode_index=$(grep -n $(cat /etc/nodepool/node_private) /etc/nodepool/sub_nodes_private | cut -d: -f1)
|
|
let vni+=$subnode_index
|
|
sed -i "s/vni/$vni/" /etc/os-net-config/config.json
|
|
export interface_name="br-ex_$primary_private_ip"
|
|
|
|
# Until we are fully migrated to os-net-config we need
|
|
# to clean up the old bridge first created by
|
|
# devstack-gate. However, if $interface_name is already
|
|
# present in `ovs-vsctl show`, assume our br-ex is
|
|
# already configured. (Mainly for upgrade job, to avoid
|
|
# deleting br-ex during upgrade.)
|
|
if ! ovs-vsctl show | grep $interface_name &> /dev/null; then
|
|
ovs-vsctl del-br br-ex
|
|
fi
|
|
}
|
|
|
|
-
|
|
str_replace:
|
|
template:
|
|
get_file: ../../network/scripts/run-os-net-config.sh
|
|
params:
|
|
$network_config:
|
|
network_config:
|
|
- type: ovs_bridge
|
|
name: bridge_name
|
|
mtu:
|
|
get_param: OvSBridgeMtu
|
|
use_dhcp: false
|
|
addresses:
|
|
- ip_netmask:
|
|
list_join:
|
|
- "/"
|
|
- - get_param: ControlPlaneIp
|
|
- get_param: ControlPlaneSubnetCidr
|
|
members:
|
|
- type: ovs_tunnel
|
|
name: interface_name
|
|
tunnel_type: vxlan
|
|
ovs_options:
|
|
- list_join:
|
|
- "="
|
|
- - key
|
|
- vni
|
|
- list_join:
|
|
- "="
|
|
- - remote_ip
|
|
- primary_private_ip
|
|
- list_join:
|
|
- "="
|
|
- - local_ip
|
|
- subnode_private_ip
|
|
|
|
outputs:
|
|
OS::stack_id:
|
|
description: The OsNetConfigImpl resource.
|
|
value: {get_resource: OsNetConfigImpl}
|