Add external_resource_vip_id property to network_data.yaml

Adds the external_resource_vip_id property, which can be used to set an
external_id for the port resource for the network VIP.

Since the same template resource, port.network.j2.yaml is used for both
VIP and normal ports on a network, we can't simply add jinja to that
template that conditionally adds the external_id attribute because we
don't know during the jinja2 phase if the template is for a VIP or not.

Instead, we need to map the VIP resources to an entirely new template
resource (external_resource_port.network.j2.yaml) so that we can set the
external_id attribute just for the VIP ports.

Change-Id: I27d3eeb11277004b00aa4d6a66014d5c71081c26
implements: blueprint split-controlplane-templates
This commit is contained in:
James Slagle 2019-02-19 14:43:27 -05:00
parent c023784d5e
commit c7a97ce997
9 changed files with 37 additions and 1 deletions

View File

@ -26,7 +26,11 @@ resource_registry:
# Port assignments for the VIPs # Port assignments for the VIPs
{%- for network in networks if network.vip and network.enabled|default(true) %} {%- for network in networks if network.vip and network.enabled|default(true) %}
{%- if network.external_resource_vip_id|default('') %}
OS::TripleO::Network::Ports::{{network.name}}VipPort: ../network/ports/external_resource_{{network.name_lower|default(network.name.lower())}}_v6.yaml
{%- else %}
OS::TripleO::Network::Ports::{{network.name}}VipPort: ../network/ports/{{network.name_lower|default(network.name.lower())}}_v6.yaml OS::TripleO::Network::Ports::{{network.name}}VipPort: ../network/ports/{{network.name_lower|default(network.name.lower())}}_v6.yaml
{%- endif %}
{%- endfor %} {%- endfor %}
OS::TripleO::Network::Ports::RedisVipPort: ../network/ports/vip_v6.yaml OS::TripleO::Network::Ports::RedisVipPort: ../network/ports/vip_v6.yaml
@ -64,4 +68,4 @@ parameter_defaults:
# Enable IPv6 environment for OpenDaylight # Enable IPv6 environment for OpenDaylight
OpenDaylightEnableIPv6Deployment: True OpenDaylightEnableIPv6Deployment: True
# Specify Tunnel endpoints to be IPv6 # Specify Tunnel endpoints to be IPv6
NeutronOverlayIPVersion: 6 NeutronOverlayIPVersion: 6

View File

@ -19,7 +19,11 @@ resource_registry:
# Port assignments for the VIPs # Port assignments for the VIPs
{%- for network in networks if network.vip and network.enabled|default(true) %} {%- for network in networks if network.vip and network.enabled|default(true) %}
{%- if network.external_resource_vip_id|default('') %}
OS::TripleO::Network::Ports::{{network.name}}VipPort: ../network/ports/external_resource_{{network.name_lower|default(network.name.lower())}}_v6.yaml
{%- else %}
OS::TripleO::Network::Ports::{{network.name}}VipPort: ../network/ports/{{network.name_lower|default(network.name.lower())}}_v6.yaml OS::TripleO::Network::Ports::{{network.name}}VipPort: ../network/ports/{{network.name_lower|default(network.name.lower())}}_v6.yaml
{%- endif %}
{%- endfor %} {%- endfor %}
OS::TripleO::Network::Ports::RedisVipPort: ../network/ports/vip_v6.yaml OS::TripleO::Network::Ports::RedisVipPort: ../network/ports/vip_v6.yaml

View File

@ -9,7 +9,11 @@ resource_registry:
# Port assignments for the VIPs # Port assignments for the VIPs
{%- for network in networks if network.vip and network.enabled|default(true) %} {%- for network in networks if network.vip and network.enabled|default(true) %}
{%- if network.external_resource_vip_id|default('') %}
OS::TripleO::Network::Ports::{{network.name}}VipPort: ../network/ports/external_resource_{{network.name_lower|default(network.name.lower())}}.yaml
{%- else %}
OS::TripleO::Network::Ports::{{network.name}}VipPort: ../network/ports/{{network.name_lower|default(network.name.lower())}}.yaml OS::TripleO::Network::Ports::{{network.name}}VipPort: ../network/ports/{{network.name_lower|default(network.name.lower())}}.yaml
{%- endif %}
{%- endfor %} {%- endfor %}
OS::TripleO::Network::Ports::RedisVipPort: ../network/ports/vip.yaml OS::TripleO::Network::Ports::RedisVipPort: ../network/ports/vip.yaml

View File

@ -0,0 +1,2 @@
{% set set_external_id = true -%}
{% include 'port.j2' %}

View File

@ -0,0 +1,3 @@
{% set ipv6_override = true -%}
{% set set_external_id = true -%}
{% include 'port.j2' %}

View File

@ -64,6 +64,9 @@ resources:
{{network.name}}Port: {{network.name}}Port:
type: OS::Neutron::Port type: OS::Neutron::Port
{%- if set_external_id|default(false) and network.external_resource_vip_id|default('') %}
external_id: {{network.external_resource_vip_id}}
{%- endif %}
properties: properties:
network: {get_param: {{network.name}}NetName} network: {get_param: {{network.name}}NetName}
name: {get_param: PortName} name: {get_param: PortName}

View File

@ -12,6 +12,9 @@
# external_resource_network_id: Optional. If set, it should be the UUID of an existing already # external_resource_network_id: Optional. If set, it should be the UUID of an existing already
# created Neutron network that will be used in place of creating a # created Neutron network that will be used in place of creating a
# new network. # new network.
# external_resource_vip_id: Optional. If set, it should be the UUID of an existing already
# created Neutron port for the VIP that will be used
# in place of creating a new port.
# external_resource_subnet_id: Optional. If set, it should be the UUID of an existing already # external_resource_subnet_id: Optional. If set, it should be the UUID of an existing already
# created Neutron subnet that will be used in place of creating a # created Neutron subnet that will be used in place of creating a
# new subnet for the network. # new subnet for the network.

View File

@ -0,0 +1,9 @@
---
features:
- Adds the ability to set ``external_resource_network_id`` for the network,
``external_resource_vip_id`` for the network VIP,
``external_resource_subnet_id`` for the subnet(s), and
``external_resource_segment_id`` for the segment(s) to network_data.yaml.
When setting these properties, the external_id attribute will be set on the
corresponding Heat resources. This causes Heat to not re-create these
resources and instead adopt them from outside the stack.

View File

@ -299,6 +299,9 @@ def clean_templates(base_path, role_data_path, network_data_path):
'network', '%s_from_pool_v6.yaml' % network['name_lower']) 'network', '%s_from_pool_v6.yaml' % network['name_lower'])
ports_path = os.path.join( ports_path = os.path.join(
'network', 'ports', '%s.yaml' % network['name_lower']) 'network', 'ports', '%s.yaml' % network['name_lower'])
external_resource_ports_path = os.path.join(
'network', 'ports',
'external_resource_%s.yaml' % network['name_lower'])
ports_from_pool_path = os.path.join( ports_from_pool_path = os.path.join(
'network', 'ports', '%s_from_pool.yaml' % network['name_lower']) 'network', 'ports', '%s_from_pool.yaml' % network['name_lower'])
ports_v6_path = os.path.join( ports_v6_path = os.path.join(
@ -311,6 +314,7 @@ def clean_templates(base_path, role_data_path, network_data_path):
delete(network_v6_path) delete(network_v6_path)
delete(network_from_pool_v6_path) delete(network_from_pool_v6_path)
delete(ports_path) delete(ports_path)
delete(external_resource_ports_path)
delete(ports_from_pool_path) delete(ports_from_pool_path)
delete(ports_v6_path) delete(ports_v6_path)
delete(ports_from_pool_v6_path) delete(ports_from_pool_v6_path)