12468acb11
When we generate metadata for compact services, all of the compact services where joining in one single blob and we hit the size limit for it. Splitting compact services each one with per line with the compact service name and a list of their networks, so we will not hit this size limit anymore. Change-Id: I90d7bc73000352ad2c4b3f08f00d2a115f075a5e Depends-On: Ida39f5768c67f982b2fe316f6fae4988a74c8534
101 lines
3.8 KiB
YAML
101 lines
3.8 KiB
YAML
heat_template_version: rocky
|
|
description: 'Generates the relevant service principals for a server'
|
|
|
|
parameters:
|
|
RoleData:
|
|
type: json
|
|
description: the list containing the 'role_data' output for the ServiceChain
|
|
{%- for network in networks if network.vip|default(false) %}
|
|
{%- if network.name == 'External' %}
|
|
# Special case the External hostname param, which is CloudName
|
|
CloudName:
|
|
default: overcloud.localdomain
|
|
description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
|
|
type: string
|
|
{%- elif network.name == 'InternalApi' %}
|
|
# Special case the Internal API hostname param, which is CloudNameInternal
|
|
CloudNameInternal:
|
|
default: overcloud.{{network.name.lower()}}.localdomain
|
|
description: >
|
|
The DNS name of this cloud's {{network.name_lower}} endpoint. E.g.
|
|
'ci-overcloud.{{network.name.lower()}}.tripleo.org'.
|
|
type: string
|
|
{%- elif network.name == 'StorageMgmt' %}
|
|
# Special case StorageMgmt hostname param, which is CloudNameStorageManagement
|
|
CloudNameStorageManagement:
|
|
default: overcloud.{{network.name.lower()}}.localdomain
|
|
description: >
|
|
The DNS name of this cloud's {{network.name_lower}} endpoint. E.g.
|
|
'ci-overcloud.{{network.name.lower()}}.tripleo.org'.
|
|
type: string
|
|
{%- else %}
|
|
CloudName{{network.name}}:
|
|
default: overcloud.{{network.name.lower()}}.localdomain
|
|
description: >
|
|
The DNS name of this cloud's {{network.name_lower}} endpoint. E.g.
|
|
'ci-overcloud.{{network.name.lower()}}.tripleo.org'.
|
|
type: string
|
|
{%- endif %}
|
|
{%- endfor %}
|
|
CloudNameCtlplane:
|
|
default: overcloud.ctlplane.localdomain
|
|
description: >
|
|
The DNS name of this cloud's provisioning network endpoint. E.g.
|
|
'ci-overcloud.ctlplane.tripleo.org'.
|
|
type: string
|
|
|
|
resources:
|
|
|
|
IncomingMetadataSettings:
|
|
type: OS::Heat::Value
|
|
properties:
|
|
value:
|
|
yaql:
|
|
# Filter null values and values that contain don't contain
|
|
# 'metadata_settings', get the values from that key and get the
|
|
# unique ones.
|
|
expression: list(coalesce($.data, []).where($ != null).where($.containsKey('metadata_settings')).metadata_settings.flatten().distinct())
|
|
data: {get_param: RoleData}
|
|
|
|
# Generates entries for nova metadata with the following format:
|
|
# 'managed_service_<id>' : <service>/<fqdn>
|
|
# Depending on the requested network
|
|
IndividualServices:
|
|
type: OS::Heat::Value
|
|
properties:
|
|
value:
|
|
yaql:
|
|
expression: let(fqdns => $.data.fqdns) -> dict(coalesce($.data.metadata, []).where($ != null and $.type = 'vip').select([concat('managed_service_', $.service, $.network), concat($.service, '/', $fqdns.get($.network))]))
|
|
data:
|
|
metadata: {get_attr: [IncomingMetadataSettings, value]}
|
|
fqdns:
|
|
{%- for network in networks if network.vip|default(false) %}
|
|
{%- if network.name == 'External' %}
|
|
external: {get_param: CloudName}
|
|
{%- elif network.name == 'InternalApi' %}
|
|
internal_api: {get_param: CloudNameInternal}
|
|
{%- elif network.name == 'StorageMgmt' %}
|
|
storage_mgmt: {get_param: CloudNameStorageManagement}
|
|
{%- else %}
|
|
{{network.name_lower}}: {get_param: CloudName{{network.name}}}
|
|
{%- endif %}
|
|
{%- endfor %}
|
|
ctlplane: {get_param: CloudNameCtlplane}
|
|
|
|
CompactServices:
|
|
type: OS::Heat::Value
|
|
properties:
|
|
value:
|
|
yaql:
|
|
expression: dict(coalesce($.data, []).where($ != null and $.type = 'node').groupBy(concat('compact_service_', $.service), $.network.replace('_', '')))
|
|
data: {get_attr: [IncomingMetadataSettings, value]}
|
|
|
|
outputs:
|
|
metadata:
|
|
description: actual metadata entries that will be passed to the server.
|
|
value:
|
|
map_merge:
|
|
- {get_attr: [IndividualServices, value]}
|
|
- {get_attr: [CompactServices, value]}
|
|
|