Heat templates for deploying OpenStack
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

330 lines
13 KiB

heat_template_version: wallaby
description: >
{{network.name}} network definition (automatically generated).
parameters:
# the defaults here work for static IP assignment (IPAM) only
{{network.name}}NetCidr:
{%- if network.ipv6 or ipv6_override %}
default: "{{network.ipv6_subnet|default(network.ip_subnet|default(""))}}"
{%- else %}
default: "{{network.ip_subnet|default("")}}"
{%- endif %}
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}}NetEnableDHCP:
default: false
description: Whether to enable DHCP on the associated subnet.
type: boolean
{{network.name}}NetAdminStateUp:
default: false
description: The admin state of the network.
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:
{%- if ":" in network.ip_subnet or network.ipv6 or ipv6_override %}
default: {{network.ipv6_allocation_pools|default(network.allocation_pools|default([]))}}
{%- else %}
default: {{network.allocation_pools|default([])}}
{%- endif %}
description: Ip allocation pool range for the {{network.name_lower}} network.
type: json
{%- if ":" in network.ip_subnet or network.ipv6 or ipv6_override %}
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 %}
{{network.name}}InterfaceDefaultRoute:
{%- if network.ipv6 or ipv6_override %}
default: "{{network.gateway_ipv6|default(network.gateway_ip|default(''))}}"
{%- else %}
default: "{{network.gateway_ip|default('')}}"
{%- endif %}
description: default route for the {{network.name_lower}} network
type: string
{{network.name}}NetworkVlanID:
default: {{network.vlan|default(1)}}
description: Vlan ID for the {{network.name_lower}} network traffic.
type: number
{{network.name}}Routes:
default: {{network.routes|default([])}}
description: >
Routes for the {{network.name_lower}} network traffic.
JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}]
Routes are added to the host_routes property on the subnet in neutron
when the network and subnet is created.
type: json
{{network.name}}Mtu:
default: {{network.mtu|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.name}} network.
type: number
{%- for subnet in network.subnets|default({}) if network.subnets[subnet].enabled|default(true) %}
{{network.name}}SubnetCidr_{{subnet}}:
{%- if network.ipv6 or ipv6_override %}
default: "{{network.subnets[subnet]['ipv6_subnet']|default(network.subnets[subnet]['ip_subnet']|default(""))}}"
{%- else %}
default: "{{network.subnets[subnet]['ip_subnet']|default("")}}"
{%- endif %}
description: |
Cidr for the {{network.name_lower}} network's {{subnet}} subnet.
type: string
{{network.name}}AllocationPools_{{subnet}}:
{%- if ":" in network.subnets[subnet]['ip_subnet'] or network.ipv6 or ipv6_override %}
default: {{network.subnets[subnet]['ipv6_allocation_pools']|default(network.subnets[subnet]['allocation_pools']|default([]))}}
{%- else %}
default: {{network.subnets[subnet]['allocation_pools']|default([])}}
{%- endif %}
description: |
Ip allocation pool range for the {{network.name_lower}} network's {{subnet}} subnet.
type: json
{{network.name}}InterfaceDefaultRoute_{{subnet}}:
{%- if ":" in network.subnets[subnet]['ip_subnet'] or network.ipv6 or ipv6_override %}
default: "{{network.subnets[subnet]['gateway_ipv6']|default(network.subnets[subnet]['gateway_ip']|default([]))}}"
{%- else %}
default: "{{network.subnets[subnet]['gateway_ip']|default([])}}"
{%- endif %}
description: |
default route for the {{network.name_lower}} network's {{subnet}} subnet.
type: string
{{network.name}}NetworkVlanID_{{subnet}}:
default: {{network.subnets[subnet]['vlan']|default(1)}}
description: |
Vlan ID for the {{network.name_lower}} network's {{subnet}} subnet.
type: number
{{network.name}}Routes_{{subnet}}:
default: {{network.subnets[subnet]['routes']|default([])}}
description: >
Routes for the {{subnet}} subnet on {{network.name_lower}} network
traffic. JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}]
Routes are added to the host_routes property on the subnet in neutron
when the subnet is created.
type: json
{%- endfor %}
ManageNetworks:
default: true
type: boolean
description: >
Manage the network and related resources (subnets and segments) with
either create, update, or delete operations (depending on the stack
operation). Does not apply to ports which will always be managed as
needed. Defaults to true. For multi-stack use cases where the network
related resources have already been managed by a separate stack, this
parameter can be set to false.
CloudDomain:
default: 'localdomain'
type: string
description: >
The DNS domain used for the hosts. This must match the
overcloud_domain_name configured on the undercloud.
NetworkDeletionPolicy:
description: >
Whether to retain or delete network resource on deletion of the stack
type: string
default: delete
constraints:
- allowed_values: [delete, retain]
conditions:
manage_networks: {get_param: ManageNetworks}
is_ipv6:
yaql:
expression: '":" in $.data'
data: {get_param: {{network.name}}NetCidr}
resources:
{{network.name}}Network:
type: OS::Neutron::Net
deletion_policy: {get_param: NetworkDeletionPolicy}
condition: manage_networks
{%- if network.external_resource_network_id|default('') %}
external_id: {{ network.external_resource_network_id }}
{%- endif %}
properties:
admin_state_up: {get_param: {{network.name}}NetAdminStateUp}
name: {get_param: {{network.name}}NetName}
dns_domain:
list_join:
- '.'
- - {{network.name.lower()}}
- {get_param: CloudDomain}
- ''
shared: {get_param: {{network.name}}NetShared}
value_specs:
map_merge:
- {get_param: {{network.name}}NetValueSpecs}
- {'mtu': {get_param: {{network.name}}Mtu}}
tags:
- tripleo_net_idx={{network.idx}}
- tripleo_network_name={{network.name}}
- tripleo_vip={{network.vip|default(false)}}
{%- if network.service_net_map_replace|default('') %}
- tripleo_service_net_map_replace={{network.service_net_map_replace}}
{%- endif %}
{%- if network.ipv6 or ipv6_override %}
- tripleo_ipv6=true
{%- endif %}
{{network.name}}Subnet:
type: OS::Neutron::Subnet
deletion_policy: {get_param: NetworkDeletionPolicy}
condition: manage_networks
{%- if network.external_resource_subnet_id|default('') %}
external_id: {{ network.external_resource_subnet_id }}
{%- endif %}
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}
host_routes: {get_param: {{network.name}}Routes}
# All networks have an implicit network segment when created, map this subnet to that segment.
segment: {get_attr: [{{network.name}}Network, segments, 0, id]}
ip_version: {if: [is_ipv6, 6, 4]}
{%- if ":" in network.ip_subnet or network.ipv6 or ipv6_override %}
ipv6_address_mode: {get_param: IPv6AddressMode}
ipv6_ra_mode: {get_param: IPv6RAMode}
{%- else %}
enable_dhcp: {get_param: {{network.name}}NetEnableDHCP}
{%- endif %}
tags:
- str_replace:
template: tripleo_vlan_id=$vlan_id
params:
$vlan_id: {get_param: {{network.name}}NetworkVlanID}
{% for subnet in network.subnets|default({}) if network.subnets[subnet].enabled|default(true) %}
{{network.name}}Segment_{{subnet}}:
type: OS::Neutron::Segment
deletion_policy: {get_param: NetworkDeletionPolicy}
condition: manage_networks
# NOTE(hjensas): Depends-On here to ensure we always create the base subnet
# first. We can only set the segment for existing subnet if there is only
# one segment and only one existing subnet on the network.
{%- if network.subnets[subnet].external_resource_segment_id|default('') %}
external_id: {{ network.subnets[subnet].external_resource_segment_id }}
{%- else %}
depends_on: {{network.name}}Subnet
{%- endif %}
properties:
name: {{network.name_lower}}_{{subnet}}
network: {get_resource: {{network.name}}Network}
network_type: flat
physical_network: {{network.name_lower}}_{{subnet}}
{{network.name}}Subnet_{{subnet}}:
type: OS::Neutron::Subnet
deletion_policy: {get_param: NetworkDeletionPolicy}
condition: manage_networks
{%- if network.subnets[subnet].external_resource_subnet_id|default('') %}
external_id: {{ network.subnets[subnet].external_resource_subnet_id }}
{%- endif %}
properties:
cidr: {get_param: {{network.name}}SubnetCidr_{{subnet}}}
name: {{subnet}}
network: {get_resource: {{network.name}}Network}
allocation_pools: {get_param: {{network.name}}AllocationPools_{{subnet}}}
gateway_ip: {get_param: {{network.name}}InterfaceDefaultRoute_{{subnet}}}
host_routes: {get_param: {{network.name}}Routes_{{subnet}}}
segment: {get_resource: {{network.name}}Segment_{{subnet}}}
ip_version: {if: [is_ipv6, 6, 4]}
{%- if ":" in network.ip_subnet or network.ipv6 or ipv6_override %}
ipv6_address_mode: {get_param: IPv6AddressMode}
ipv6_ra_mode: {get_param: IPv6RAMode}
{%- else %}
enable_dhcp: {get_param: {{network.name}}NetEnableDHCP}
{%- endif %}
tags:
- str_replace:
template: tripleo_vlan_id=$vlan_id
params:
$vlan_id: {get_param: {{network.name}}NetworkVlanID_{{subnet}}}
{% endfor %}
outputs:
OS::stack_id:
description: {{network.name_lower}} network
value: {get_resource: {{network.name}}Network}
ip_version:
description: IP version of {{network.name}} network.
value: {if: [is_ipv6, 6, 4]}
network_cidrs:
description: List of {{network.name}} network's subnets in CIDR notation.
value:
if:
- manage_networks
- - {get_attr: [{{network.name}}Subnet, cidr]}
{%- for subnet in network.subnets|default({}) if network.subnets[subnet].enabled|default(true) %}
- {get_attr: [{{network.name}}Subnet_{{subnet}}, cidr]}
{%- endfor %}
- - {get_param: {{network.name}}NetCidr}
{%- for subnet in network.subnets|default({}) if network.subnets[subnet].enabled|default(true) %}
- {get_param: {{network.name}}SubnetCidr_{{subnet}}}
{%- endfor %}
network_attrs:
description: {{network.name}} network's attributes
value:
if:
- manage_networks
- {get_attr: [{{network.name}}Network, show]}
- name: {{network.name_lower}}
dns_domain:
list_join:
- '.'
- - {{network.name.lower()}}
- {get_param: CloudDomain}
- ''
mtu: {{network.mtu|default('1500')}}
subnet_attrs:
description: Map of attributes for subnets in the {{network.name}} network
value:
if:
- manage_networks
- {{network.name_lower}}_subnet: {get_attr: [{{network.name}}Subnet, show]}
{%- for subnet in network.subnets|default({}) if network.subnets[subnet].enabled|default(true) %}
{{subnet}}: {get_attr: [{{network.name}}Subnet_{{subnet}}, show]}
{%- endfor %}
- {{network.name_lower}}_subnet:
name: {{network.name_lower}}_subnet
cidr: {get_param: {{network.name}}NetCidr}
dns_nameservers: []
gateway_ip: {get_param: {{network.name}}InterfaceDefaultRoute}
host_routes: {get_param: {{network.name}}Routes}
ip_version: {if: [is_ipv6, 6, 4]}
{%- for subnet in network.subnets|default({}) if network.subnets[subnet].enabled|default(true) %}
{{subnet}}:
name: {{subnet}}
cidr: {get_param: {{network.name}}SubnetCidr_{{subnet}}}
dns_nameservers: []
gateway_ip: {get_param: {{network.name}}InterfaceDefaultRoute_{{subnet}}}
host_routes: {get_param: {{network.name}}Routes_{{subnet}}}
ip_version: {if: [is_ipv6, 6, 4]}
{%- endfor %}