L3 routed networks - data + env (1/3)

Render composable network L3 routed subnets in
network-environment yaml files.

Partial: blueprint tripleo-routed-networks-templates
Change-Id: I4ba234ede5b7f243ba41e8fec8f78e1f1cc261c8
This commit is contained in:
Harald Jensås 2018-07-12 10:48:05 +02:00
parent 18d77c1704
commit 91985cfbce
5 changed files with 255 additions and 1 deletions

View File

@ -64,6 +64,26 @@ parameter_defaults:
# protocol overhead from this value.
TenantNetPhysnetMtu: {{network.mtu|default('1500')}}
{%- endif %}
{% for subnet in network.subnets|default({}) if network.subnets[subnet].enabled|default(true) %}
{%- if network.name != 'Tenant' %}
{{network.name}}SubnetCidr_{{subnet}}: {{network.subnets[subnet]['ipv6_subnet']}}
{{network.name}}AllocationPools_{{subnet}}: {{network.subnets[subnet]['ipv6_allocation_pools']}}
{{network.name}}InterfaceDefaultRoute_{{subnet}}: {{network.subnets[subnet]['gateway_ipv6']}}
{%- if network.subnets[subnet][routes_ipv6] %}
{{network.name}}Routes_{{subnet}}: {{network.subnets[subnet]['routes_ipv6']|default([])}}
{%- endif %}
{%- else %}
{{network.name}}SubnetCidr_{{subnet}}: {{network.subnets[subnet]['ip_subnet']}}
{{network.name}}AllocationPools_{{subnet}}: {{network.subnets[subnet]['allocation_pools']}}
{{network.name}}InterfaceDefaultRoute_{{subnet}}: {{network.subnets[subnet]['gateway_ip']}}
{%- if network.subnets[subnet][routes] %}
{{network.name}}Routes_{{subnet}}: {{network.subnets[subnet]['routes']|default([])}}
{%- endif %}
{%- endif %}
{%- if network.subnets[subnet]['vlan'] is defined %}
{{network.name}}NetworkVlanID_{{subnet}}: {{network.subnets[subnet]['vlan']}}
{%- endif %}
{% endfor %}
{% endfor %}
{#- FIXME: These global parameters should be defined in a YAML file, e.g. network_data.yaml. #}
# Define the DNS servers (maximum 2) for the overcloud nodes

View File

@ -62,10 +62,30 @@ parameter_defaults:
# protocol overhead from this value.
TenantNetPhysnetMtu: {{network.mtu|default('1500')}}
{%- endif %}
{% for subnet in network.subnets|default({}) if network.subnets[subnet].enabled|default(true) %}
{%- if network.ipv6|default(false) %}
{{network.name}}SubnetCidr_{{subnet}}: {{network.subnets[subnet]['ipv6_subnet']}}
{{network.name}}AllocationPools_{{subnet}}: {{network.subnets[subnet]['ipv6_allocation_pools']}}
{{network.name}}InterfaceDefaultRoute_{{subnet}}: {{network.subnets[subnet]['gateway_ipv6']}}
{%- if network.subnets[subnet][routes_ipv6] %}
{{network.name}}Routes_{{subnet}}: {{network.subnets[subnet]['routes_ipv6']|default([])}}
{%- endif %}
{%- else %}
{{network.name}}SubnetCidr_{{subnet}}: {{network.subnets[subnet]['ip_subnet']}}
{{network.name}}AllocationPools_{{subnet}}: {{network.subnets[subnet]['allocation_pools']}}
{{network.name}}InterfaceDefaultRoute_{{subnet}}: {{network.subnets[subnet]['gateway_ip']}}
{%- if network.subnets[subnet][routes] %}
{{network.name}}Routes_{{subnet}}: {{network.subnets[subnet]['routes']|default([])}}
{%- endif %}
{%- endif %}
{%- if network.subnets[subnet]['vlan'] is defined %}
{{network.name}}NetworkVlanID_{{subnet}}: {{network.subnets[subnet]['vlan']}}
{%- endif %}
{% endfor %}
{% endfor %}
{#- FIXME: These global parameters should be defined in a YAML file, e.g. network_data.yaml. #}
# Define the DNS servers (maximum 2) for the overcloud nodes
# When the list is no set or empty, the nameservers on the ctlplane subnets will be used.
# When the list is not set or empty, the nameservers on the ctlplane subnets will be used.
# (ctlplane subnets nameservers are controlled by the ``undercloud_nameservers`` option in ``undercloud.conf``)
DnsServers: []
# List of Neutron network types for tenant networks (will be used in order)

View File

@ -23,6 +23,9 @@
# ipv6_allocation_pools: Set default IPv6 allocation pools if IPv4 allocation pools
# are already defined.
# gateway_ipv6: Set an IPv6 gateway if IPv4 gateway already defined.
# routes_ipv6: Optional, list of networks that should be routed via network gateway.
# Example: [{'destination':'fd00:fd00:fd00:3004::/64',
# 'nexthop':'fd00:fd00:fd00:3000::1'}]
# ipv6: If ip_subnet not defined, this specifies that the network is IPv6-only.
# NOTE: IP-related values set parameter defaults in templates, may be overridden,
# either by operators, or e.g in environments/network-isolation-v6.yaml where we
@ -32,6 +35,18 @@
# mtu: Set the maximum transmission unit (MTU) that is guaranteed to pass
# through the data path of the segments in the network.
# (optional, defaults to 1500)
# subnets: A map of additional subnets for the network (optional). The map
# takes the following format:
# {'<subnet name>': {'enabled': '<true|false>',
# 'vlan': '<vlan-id>',
# 'ip_subnet': '<IP/CIDR>',
# 'allocation_pools': '<IP range list>',
# 'gateway_ip': '<gateway IP>',
# 'routes': '<Routes list>',
# 'ipv6_subnet': '<IPv6/CIDR>',
# 'ipv6_allocation_pools': '<IPv6 range list>',
# 'gateway_ipv6': '<IPv6 gateway>',
# 'routes_ipv6': '<Routes list>'}}
#
# Example:
# - name Example

View File

@ -43,6 +43,18 @@
# mtu: Set the maximum transmission unit (MTU) that is guaranteed to pass
# through the data path of the segments in the network.
# (optional, defaults to 1500)
# subnets: A map of additional subnets for the network (optional). The map
# takes the following format:
# {'<subnet name>': {'enabled': '<true|false>',
# 'vlan': '<vlan-id>',
# 'ip_subnet': '<IP/CIDR>',
# 'allocation_pools': '<IP range list>',
# 'gateway_ip': '<gateway IP>',
# 'routes': '<Routes list>',
# 'ipv6_subnet': '<IPv6/CIDR>',
# 'ipv6_allocation_pools': '<IPv6 range list>',
# 'gateway_ipv6': '<IPv6 gateway>',
# 'routes_ipv6': '<Routes list>'}}
#
# Example: # A single 10.0.0.0/16 route works for up to 255 /24 networks
# - name Example1

View File

@ -0,0 +1,187 @@
# List of networks, used for j2 templating of routed networks
#
# Supported values:
#
# name: Name of the network (mandatory)
# name_lower: lowercase version of name used for filenames
# (optional, defaults to name.lower())
# service_net_map_replace: if name_lower is set to a custom name this should be set
# to original default (optional). This field is only necessary when
# changing the default network names, not when adding a new custom network.
# enabled: Is the network enabled (optional, defaults to true)
# NOTE: False will use noop.yaml for unused legacy networks to support upgrades.
# vlan: vlan for the network (optional)
# vip: Enable creation of a virtual IP on this network
# ip_subnet: IP/CIDR, e.g. '192.168.24.0/24' or '2001:db8:fd00:1000::/64'
# (optional, may use parameter defaults instead)
# allocation_pools: IP range list e.g. [{'start':'10.0.0.4', 'end':'10.0.0.250'}]
# gateway_ip: gateway for the network (optional, may use parameter defaults)
# routes: Optional, list of networks that should be routed via network gateway.
# Example: [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}]
# A single /16 supernet route could be used for 255 smaller /24 subnets.
# ipv6_subnet: Optional, sets default IPv6 subnet if IPv4 is already defined.
# ipv6_allocation_pools: Set default IPv6 allocation pools if IPv4 allocation pools
# are already defined.
# ipv6_gateway: Set an IPv6 gateway if IPv4 gateway already defined.
# routes_ipv6: Optional, list of networks that should be routed via network gateway.
# Example: [{'destination':'fd00:fd00:fd00:3004::/64',
# 'nexthop':'fd00:fd00:fd00:3000::1'}]
# ipv6: If ip_subnet not defined, this specifies that the network is IPv6-only.
# NOTE: IP-related values set parameter defaults in templates, may be overridden,
# either by operators, or e.g in environments/network-isolation-v6.yaml where we
# set some default IPv6 addresses.
# compat_name: for existing stack you may need to override the default
# transformation for the resource's name.
# subnets: A map of additional subnets for the network (optional). The map
# takes the following format:
# {'<subnet name>': {'enabled': '<true|false>',
# 'vlan': '<vlan-id>',
# 'ip_subnet': '<IP/CIDR>',
# 'allocation_pools': '<IP range list>',
# 'gateway_ip': '<gateway IP>',
# 'routes': '<Routes list>',
# 'ipv6_subnet': '<IPv6/CIDR>',
# 'ipv6_allocation_pools': '<IPv6 range list>',
# 'gateway_ipv6': '<IPv6 gateway>',
# 'routes_ipv6': '<Routes list>'}}
#
# Example:
# - name Example
# vip: false
# ip_subnet: '10.0.2.0/24'
# allocation_pools: [{'start': '10.0.2.4', 'end': '10.0.2.250'}]
# gateway_ip: '10.0.2.254'
# subnets:
# example_siteB_rack1:
# vlan: 11
# ip_subnet: '172.16.1.64/26'
# allocation_pools: [{'start': '172.16.1.70', 'end': '172.16.1.110'}]
# gateway_ip: '172.16.1.65'
#
# To support backward compatility, two versions of the network definitions will
# be created, network/<network>.yaml and network/<network>_v6.yaml. Only
# one of these files may be used in the deployment at a time, since the
# parameters used for configuration are the same in both files. In the
# future, this behavior may be changed to create only one file for custom
# networks. You may specify IPv6 addresses for ip_subnet, allocation_pools,
# and gateway_ip if no IPv4 addresses are used for a custom network, or set
# ipv6: true, and the network/<network>.yaml file will be configured as IPv6.
#
# For configuring both IPv4 and IPv6 on the same interface, use two separate
# networks, and then assign both IPs to the same interface in a custom NIC
# configuration templates.
#
# The ordering of the networks below will determine the order in which NICs
# are assigned in the network/config/multiple-nics templates, beginning with
# NIC2, Control Plane is always NIC1.
- name: External
vip: true
name_lower: external
vlan: 100
ip_subnet: '10.0.0.0/24'
allocation_pools: [{'start': '10.0.0.4', 'end': '10.0.0.250'}]
gateway_ip: '10.0.0.1'
ipv6_subnet: '2001:db8:fd00:1000::/64'
ipv6_allocation_pools: [{'start': '2001:db8:fd00:1000::10', 'end': '2001:db8:fd00:1000:ffff:ffff:ffff:fffe'}]
gateway_ipv6: '2001:db8:fd00:1000::1'
- name: InternalApi
name_lower: internal_api
vip: true
vlan: 10
ip_subnet: '172.17.0.0/24'
allocation_pools: [{'start': '172.17.0.10', 'end': '172.17.0.250'}]
gateway_ip: '172.17.0.254'
ipv6_subnet: 'fd00:fd00:fd00:1000::/64'
ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:1000::10', 'end': 'fd00:fd00:fd00:1000:ffff:ffff:ffff:fffe'}]
gateway_ipv6: 'fd00:fd00:fd00:1000::1'
subnets:
internal_api_leaf1:
vlan: 11
ip_subnet: '172.17.1.0/24'
allocation_pools: [{'start': '172.17.1.10', 'end': '172.17.1.250'}]
gateway_ip: '172.17.1.254'
ipv6_subnet: 'fd00:fd00:fd00:1001::/64'
ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:1001::10', 'end': 'fd00:fd00:fd00:1001:ffff:ffff:ffff:fffe'}]
gateway_ipv6: 'fd00:fd00:fd00:1001::1'
- name: Storage
vip: true
vlan: 20
name_lower: storage
ip_subnet: '172.18.0.0/24'
allocation_pools: [{'start': '172.18.0.10', 'end': '172.18.0.250'}]
gateway_ip: '172.18.0.254'
ipv6_subnet: 'fd00:fd00:fd00:2000::/64'
ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:2000::10', 'end': 'fd00:fd00:fd00:2000:ffff:ffff:ffff:fffe'}]
gateway_ipv6: 'fd00:fd00:fd00:2000::1'
subnets:
storage_leaf1:
vlan: 21
ip_subnet: '172.18.1.0/24'
allocation_pools: [{'start': '172.18.1.10', 'end': '172.18.1.250'}]
gateway_ip: '172.18.1.254'
ipv6_subnet: 'fd00:fd00:fd00:2001::/64'
ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:2001::10', 'end': 'fd00:fd00:fd00:2001:ffff:ffff:ffff:fffe'}]
gateway_ipv6: 'fd00:fd00:fd00:2001::1'
- name: StorageMgmt
name_lower: storage_mgmt
vip: true
vlan: 30
ip_subnet: '172.19.0.0/24'
allocation_pools: [{'start': '172.19.0.10', 'end': '172.19.0.250'}]
gateway_ip: '172.19.0.254'
ipv6_subnet: 'fd00:fd00:fd00:3000::/64'
ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:3000::10', 'end': 'fd00:fd00:fd00:3000:ffff:ffff:ffff:fffe'}]
gateway_ipv6: 'fd00:fd00:fd00:3000::1'
subnets:
storage_mgmt_leaf1:
vlan: 31
ip_subnet: '172.19.1.0/24'
allocation_pools: [{'start': '172.19.1.10', 'end': '172.19.1.250'}]
gateway_ip: '172.19.1.254'
ipv6_subnet: 'fd00:fd00:fd00:3001::/64'
ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:3001::10', 'end': 'fd00:fd00:fd00:3001:ffff:ffff:ffff:fffe'}]
gateway_ipv6: 'fd00:fd00:fd00:3001::1'
- name: Tenant
vip: false # Tenant network does not use VIPs
name_lower: tenant
vlan: 40
ip_subnet: '172.16.0.0/24'
allocation_pools: [{'start': '172.16.0.10', 'end': '172.16.0.250'}]
gateway_ip: '172.16.0.254'
# Note that tenant tunneling is only compatible with IPv4 addressing at this time.
ipv6_subnet: 'fd00:fd00:fd00:4000::/64'
ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:4000::10', 'end': 'fd00:fd00:fd00:4000:ffff:ffff:ffff:fffe'}]
gateway_ipv6: 'fd00:fd00:fd00:4000::1'
subnets:
tenant_leaf1:
vlan: 41
ip_subnet: '172.16.1.0/24'
allocation_pools: [{'start': '172.16.1.10', 'end': '172.16.1.250'}]
gateway_ip: '172.16.1.254'
ipv6_subnet: 'fd00:fd00:fd00:4001::/64'
ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:4001::10', 'end': 'fd00:fd00:fd00:4001:ffff:ffff:ffff:fffe'}]
gateway_ipv6: 'fd00:fd00:fd00:4001::1'
- name: Management
# Management network is enabled by default for backwards-compatibility, but
# is not included in any roles by default. Add to role definitions to use.
enabled: true
vip: false # Management network does not use VIPs
name_lower: management
vlan: 50
ip_subnet: '172.20.0.0/24'
allocation_pools: [{'start': '172.20.0.10', 'end': '172.20.0.250'}]
gateway_ip: '172.20.0.254'
ipv6_subnet: 'fd00:fd00:fd00:5000::/64'
ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:5000::10', 'end': 'fd00:fd00:fd00:5000:ffff:ffff:ffff:fffe'}]
gateway_ipv6: 'fd00:fd00:fd00:5000::1'
subnets:
management_leaf1:
enabled: true
vlan: 51
ip_subnet: '172.20.1.0/24'
allocation_pools: [{'start': '172.20.1.10', 'end': '172.20.1.250'}]
gateway_ip: '172.20.1.254'
ipv6_subnet: 'fd00:fd00:fd00:5001::/64'
ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:5001::10', 'end': 'fd00:fd00:fd00:5001:ffff:ffff:ffff:fffe'}]
gateway_ipv6: 'fd00:fd00:fd00:5001::1'