From 91985cfbcedd174f337c0d9daa90727603076291 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Harald=20Jens=C3=A5s?= Date: Thu, 12 Jul 2018 10:48:05 +0200 Subject: [PATCH] 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 --- environments/network-environment-v6.j2.yaml | 20 +++ environments/network-environment.j2.yaml | 22 ++- network_data.yaml | 15 ++ network_data_routed.yaml | 12 ++ network_data_subnets_routed.yaml | 187 ++++++++++++++++++++ 5 files changed, 255 insertions(+), 1 deletion(-) create mode 100644 network_data_subnets_routed.yaml diff --git a/environments/network-environment-v6.j2.yaml b/environments/network-environment-v6.j2.yaml index 4e4e0af62c..4808eee7d4 100644 --- a/environments/network-environment-v6.j2.yaml +++ b/environments/network-environment-v6.j2.yaml @@ -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 diff --git a/environments/network-environment.j2.yaml b/environments/network-environment.j2.yaml index fd423f14aa..6b00b8b550 100644 --- a/environments/network-environment.j2.yaml +++ b/environments/network-environment.j2.yaml @@ -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) diff --git a/network_data.yaml b/network_data.yaml index 9f315b49df..b4f2911b88 100644 --- a/network_data.yaml +++ b/network_data.yaml @@ -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: +# {'': {'enabled': '', +# 'vlan': '', +# 'ip_subnet': '', +# 'allocation_pools': '', +# 'gateway_ip': '', +# 'routes': '', +# 'ipv6_subnet': '', +# 'ipv6_allocation_pools': '', +# 'gateway_ipv6': '', +# 'routes_ipv6': ''}} # # Example: # - name Example diff --git a/network_data_routed.yaml b/network_data_routed.yaml index e699653e6a..4406f65401 100644 --- a/network_data_routed.yaml +++ b/network_data_routed.yaml @@ -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: +# {'': {'enabled': '', +# 'vlan': '', +# 'ip_subnet': '', +# 'allocation_pools': '', +# 'gateway_ip': '', +# 'routes': '', +# 'ipv6_subnet': '', +# 'ipv6_allocation_pools': '', +# 'gateway_ipv6': '', +# 'routes_ipv6': ''}} # # Example: # A single 10.0.0.0/16 route works for up to 255 /24 networks # - name Example1 diff --git a/network_data_subnets_routed.yaml b/network_data_subnets_routed.yaml new file mode 100644 index 0000000000..91d45cc822 --- /dev/null +++ b/network_data_subnets_routed.yaml @@ -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: +# {'': {'enabled': '', +# 'vlan': '', +# 'ip_subnet': '', +# 'allocation_pools': '', +# 'gateway_ip': '', +# 'routes': '', +# 'ipv6_subnet': '', +# 'ipv6_allocation_pools': '', +# 'gateway_ipv6': '', +# 'routes_ipv6': ''}} +# +# 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/.yaml and 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/.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'