Browse Source
This change adds templates that are used to create network and port definition templates for each network that is defined in network_data.yaml. In order to render the templates, additional fields have been added to the network_data.yaml file. If this optional data is present, it will be used to populate the default parameter values in the network template. The only required parameters in the network_data.yaml file is the network name. If the network will have IPv6 addresses, then ipv6: true must be set on the network. The existing networks have been modeled in the network_data.yaml, but until these templates are removed from the j2_excludes.yaml file they will not be generated on the fly. Any additional networks will have templates generated. This change also removes an unnecessary conditional from the networks.j2.yaml file, since InternalApiNetwork doesn't need to be reformatted as InternalNetwork (it's only used in this one file). A follow-up patch will remove the existing network definitions so all networks are created dynamically. Change-Id: If074f87494a46305c990a0ea332c7b576d3c6ed8 Depends-On: Iab8aca2f1fcaba0c8f109717a4b3068f629c9aab Partially-Implements: blueprint composable-networkschanges/12/475612/22
7 changed files with 337 additions and 17 deletions
@ -0,0 +1,92 @@
|
||||
heat_template_version: pike |
||||
|
||||
description: > |
||||
{{network.name}} network definition (automatically generated). |
||||
|
||||
parameters: |
||||
# the defaults here work for static IP assignment (IPAM) only |
||||
{{network.name}}NetCidr: |
||||
default: {{network.ip_subnet|default("")}} |
||||
description: Cidr for the {{network.name_lower}} network. |
||||
type: string |
||||
{{network.name}}NetValueSpecs: |
||||
default: {'provider:physical_network': '{{network.name_lower}}', 'provider:network_type': 'flat'} |
||||
description: Value specs for the {{network.name_lower}} network. |
||||
type: json |
||||
{{network.name}}NetAdminStateUp: |
||||
default: false |
||||
description: This admin state of the network. |
||||
type: boolean |
||||
{{network.name}}NetEnableDHCP: |
||||
default: false |
||||
description: Whether to enable DHCP on the associated subnet. |
||||
type: boolean |
||||
{{network.name}}NetShared: |
||||
default: false |
||||
description: Whether this network is shared across all tenants. |
||||
type: boolean |
||||
{{network.name}}NetName: |
||||
default: {{network.name_lower}} |
||||
description: The name of the {{network.name_lower}} network. |
||||
type: string |
||||
{{network.name}}SubnetName: |
||||
default: {{network.name_lower}}_subnet |
||||
description: The name of the {{network.name_lower}} subnet in Neutron. |
||||
type: string |
||||
{{network.name}}AllocationPools: |
||||
default: {{network.allocation_pools|default([])}} |
||||
description: Ip allocation pool range for the {{network.name_lower}} network. |
||||
type: json |
||||
{{network.name}}InterfaceDefaultRoute: |
||||
default: {{network.gateway_ip|default("not_defined")}} |
||||
description: default route for the {{network.name_lower}} network |
||||
type: string |
||||
{%- if network.vlan %} |
||||
{{network.name}}NetworkVlanID: |
||||
default: {{network.vlan}} |
||||
description: Vlan ID for the {{network.name}} network traffic. |
||||
type: number |
||||
{%- endif %} |
||||
{%- if network.ipv6 %} |
||||
IPv6AddressMode: |
||||
default: dhcpv6-stateful |
||||
description: Neutron subnet IPv6 address mode |
||||
type: string |
||||
IPv6RAMode: |
||||
default: dhcpv6-stateful |
||||
description: Neutron subnet IPv6 router advertisement mode |
||||
type: string |
||||
{%- endif %} |
||||
|
||||
resources: |
||||
{{network.name}}Network: |
||||
type: OS::Neutron::Net |
||||
properties: |
||||
admin_state_up: {get_param: {{network.name}}NetAdminStateUp} |
||||
name: {get_param: {{network.name}}NetName} |
||||
shared: {get_param: {{network.name}}NetShared} |
||||
value_specs: {get_param: {{network.name}}NetValueSpecs} |
||||
|
||||
{{network.name}}Subnet: |
||||
type: OS::Neutron::Subnet |
||||
properties: |
||||
cidr: {get_param: {{network.name}}NetCidr} |
||||
name: {get_param: {{network.name}}SubnetName} |
||||
network: {get_resource: {{network.name}}Network} |
||||
allocation_pools: {get_param: {{network.name}}AllocationPools} |
||||
gateway_ip: {get_param: {{network.name}}InterfaceDefaultRoute} |
||||
{%- if network.ipv6 %} |
||||
ip_version: 6 |
||||
ipv6_address_mode: {get_param: IPv6AddressMode} |
||||
ipv6_ra_mode: {get_param: IPv6RAMode} |
||||
{%- else %} |
||||
enable_dhcp: {get_param: {{network.name}}NetEnableDHCP} |
||||
{%- endif %} |
||||
|
||||
outputs: |
||||
OS::stack_id: |
||||
description: {{network.name_lower}} network |
||||
value: {get_resource: {{network.name}}Network} |
||||
subnet_cidr: |
||||
value: {get_attr: {{network.name}}Subnet, cidr} |
||||
|
@ -0,0 +1,72 @@
|
||||
heat_template_version: pike |
||||
|
||||
description: > |
||||
Creates a port on the {{network.name}} network. The IP address will be chosen |
||||
automatically if FixedIPs is empty. |
||||
|
||||
parameters: |
||||
{{network.name}}NetName: |
||||
description: Name of the {{network.name_lower}} neutron network |
||||
default: {{network.name_lower|default(network.name|lower)}} |
||||
type: string |
||||
PortName: |
||||
description: Name of the port |
||||
default: '' |
||||
type: string |
||||
ControlPlaneIP: # Here for compatibility with noop.yaml |
||||
description: IP address on the control plane |
||||
default: '' |
||||
type: string |
||||
ControlPlaneNetwork: # Here for compatibility with ctlplane_vip.yaml |
||||
description: The name of the undercloud Neutron control plane |
||||
default: ctlplane |
||||
type: string |
||||
FixedIPs: |
||||
description: > |
||||
Control the IP allocation for the VIP port. E.g. |
||||
[{'ip_address':'1.2.3.4'}] |
||||
default: [] |
||||
type: json |
||||
IPPool: # Here for compatibility with from_pool.yaml |
||||
default: {} |
||||
type: json |
||||
NodeIndex: # Here for compatibility with from_pool.yaml |
||||
default: 0 |
||||
type: number |
||||
|
||||
resources: |
||||
|
||||
{{network.name}}Port: |
||||
type: OS::Neutron::Port |
||||
properties: |
||||
network: {get_param: {{network.name}}NetName} |
||||
name: {get_param: PortName} |
||||
fixed_ips: {get_param: FixedIPs} |
||||
replacement_policy: AUTO |
||||
|
||||
outputs: |
||||
ip_address: |
||||
description: {{network.name}} network IP |
||||
value: {get_attr: [{{network.name}}Port, fixed_ips, 0, ip_address]} |
||||
ip_address_uri: |
||||
{%- if network.ipv6 %} |
||||
description: {{network.name}} network IP (with brackets for IPv6 URLs) |
||||
value: |
||||
list_join: |
||||
- '' |
||||
- - '[' |
||||
- {get_attr: [{{network.name}}Port, fixed_ips, 0, ip_address]} |
||||
- ']' |
||||
{%- else %} |
||||
description: {{network.name}} network IP (for compatibility with IPv6 URLs) |
||||
value: {get_attr: [{{network.name}}Port, fixed_ips, 0, ip_address]} |
||||
{%- endif %} |
||||
ip_subnet: |
||||
description: IP/Subnet CIDR for the {{network.name}} network IP |
||||
value: |
||||
list_join: |
||||
- '' |
||||
- - {get_attr: [{{network.name}}Port, fixed_ips, 0, ip_address]} |
||||
- '/' |
||||
- {str_split: ['/', {get_attr: [{{network.name}}Port, subnets, 0, cidr]}, 1]} |
||||
|
@ -0,0 +1,65 @@
|
||||
heat_template_version: pike |
||||
|
||||
description: > |
||||
Creates a port on the {{network.name}} network, using a map of IPs per role. |
||||
Each role has a map of IPs in <Role>IPs parameters, with a list of IPs by |
||||
network (lower_name or lower case). For example: |
||||
ControllerIPs: |
||||
external: |
||||
- 1.2.3.4 # First controller |
||||
- 1.2.3.5 # Second controller |
||||
|
||||
parameters: |
||||
{{network.name}}NetName: |
||||
description: Name of the {{network.name}} neutron network |
||||
default: {{network.name_lower}} |
||||
type: string |
||||
PortName: |
||||
description: Name of the port |
||||
default: '' |
||||
type: string |
||||
ControlPlaneIP: # Here for compatibility with noop.yaml |
||||
description: IP address on the control plane |
||||
default: '' |
||||
type: string |
||||
ControlPlaneNetwork: # Here for compatibility with ctlplane_vip.yaml |
||||
description: The name of the undercloud Neutron control plane |
||||
default: ctlplane |
||||
type: string |
||||
IPPool: # Set in <Role>IPs map, see environments/ips-from-pool-all.yaml |
||||
default: {} |
||||
type: json |
||||
NodeIndex: # First node in the role will get first IP, and so on... |
||||
default: 0 |
||||
type: number |
||||
{{network.name}}NetCidr: |
||||
default: {{network.ip_subnet}} |
||||
description: Cidr for the {{network.name_lower}} network. |
||||
type: string |
||||
|
||||
outputs: |
||||
ip_address: |
||||
description: {{network.name}} network IP |
||||
value: {get_param: [IPPool, {get_param: {{network.name}}NetName}, {get_param: NodeIndex}]} |
||||
ip_address_uri: |
||||
{%- if network.ipv6 %} |
||||
description: {{network.name}} network IP (with brackets for IPv6 URLs) |
||||
value: |
||||
list_join: |
||||
- '' |
||||
- - '[' |
||||
- {get_param: [IPPool, {get_param: {{network.name}}NetName}, {get_param: NodeIndex}]} |
||||
- ']' |
||||
{%- else %} |
||||
description: {{network.name}} network IP (for compatibility with {{network.name_lower}}_v6.yaml) |
||||
value: {get_param: [IPPool, {get_param: {{network.name}}NetName}, {get_param: NodeIndex}]} |
||||
{%- endif %} |
||||
ip_subnet: |
||||
description: IP/Subnet CIDR for the {{network.name}} network IP |
||||
value: |
||||
list_join: |
||||
- '' |
||||
- - {get_param: [IPPool, {get_param: {{network.name}}NetName}, {get_param: NodeIndex}]} |
||||
- '/' |
||||
- {str_split: ['/', {get_param: {{network.name}}NetCidr}, 1]} |
||||
|
Loading…
Reference in new issue