From c33f910054fe02d8b9479e74b967428852436581 Mon Sep 17 00:00:00 2001 From: Rabi Mishra Date: Tue, 7 Jul 2020 10:56:25 +0530 Subject: [PATCH] Simplify host entries generation This removes a resource and the the unnecessary yaql function. Also replaces json data types with lists to reduce memory footprint. Change-Id: I04a6114ca3d2703ca2891d6807d49b78ffee0f97 Related-Bug: #1886203 (cherry picked from commit d573f4e8787c99982f6172aae74042f05a750d56) --- overcloud.j2.yaml | 90 ++++++++++++++++++---------------------- puppet/role.role.j2.yaml | 37 ++++++++--------- 2 files changed, 58 insertions(+), 69 deletions(-) diff --git a/overcloud.j2.yaml b/overcloud.j2.yaml index acef7d5aa5..45820f9b3b 100644 --- a/overcloud.j2.yaml +++ b/overcloud.j2.yaml @@ -402,42 +402,41 @@ resources: VipHosts: type: OS::Heat::Value properties: - type: json + type: comma_delimited_list value: - entries: - - str_replace: - template: IP HOST - params: - IP: {get_attr: [VipMap, net_ip_map, ctlplane]} - HOST: {get_param: CloudNameCtlplane} + - str_replace: + template: IP HOST + params: + IP: {get_attr: [VipMap, net_ip_map, ctlplane]} + HOST: {get_param: CloudNameCtlplane} {%- for network in networks if network.vip|default(false) and network.enabled|default(true) %} {%- if network.name == 'External' %} # Special case the External hostname param, which is CloudName - - str_replace: - template: IP HOST - params: - IP: {get_attr: [VipMap, net_ip_map, {{network.name_lower}}]} - HOST: {get_param: CloudName} + - str_replace: + template: IP HOST + params: + IP: {get_attr: [VipMap, net_ip_map, {{network.name_lower}}]} + HOST: {get_param: CloudName} {%- elif network.name == 'InternalApi' %} # Special case the Internal API hostname param, which is CloudNameInternal - - str_replace: - template: IP HOST - params: - IP: {get_attr: [VipMap, net_ip_map, {{network.name_lower}}]} - HOST: {get_param: CloudNameInternal} + - str_replace: + template: IP HOST + params: + IP: {get_attr: [VipMap, net_ip_map, {{network.name_lower}}]} + HOST: {get_param: CloudNameInternal} {%- elif network.name == 'StorageMgmt' %} # Special case StorageMgmt hostname param, which is CloudNameStorageManagement - - str_replace: - template: IP HOST - params: - IP: {get_attr: [VipMap, net_ip_map, {{network.name_lower}}]} - HOST: {get_param: CloudNameStorageManagement} + - str_replace: + template: IP HOST + params: + IP: {get_attr: [VipMap, net_ip_map, {{network.name_lower}}]} + HOST: {get_param: CloudNameStorageManagement} {%- else %} - - str_replace: - template: IP HOST - params: - IP: {get_attr: [VipMap, net_ip_map, {{network.name_lower}}]} - HOST: {get_param: CloudName{{network.name}}} + - str_replace: + template: IP HOST + params: + IP: {get_attr: [VipMap, net_ip_map, {{network.name_lower}}]} + HOST: {get_param: CloudName{{network.name}}} {%- endif %} {%- endfor %} @@ -794,31 +793,22 @@ resources: for_each: hostname: {get_param: DeploymentServerBlacklist} - # Single value comma delimited lists may be stored in strings - # that fails lists concat. Make them always lists (nested are OK) - HostsValue: - type: OS::Heat::Value - properties: - type: json - value: - entries: - - - {get_param: UndercloudHostsEntries} - - - if: - - add_vips_to_etc_hosts - - {get_attr: [VipHosts, value, entries]} - - [] -{%- for role in roles %} - - {get_attr: [{{role.name}}, hosts_entry, entries]} -{%- endfor %} - - - {get_param: ExtraHostFileEntries} - HostsEntryValue: type: OS::Heat::Value properties: + type: comma_delimited_list value: - yaql: - expression: coalesce($.data, []).where($ != null).where($ != []).flatten().distinct() - data: {get_attr: [HostsValue, value, entries]} + list_concat_unique: + list_concat: + - - {get_param: UndercloudHostsEntries} + - - if: + - add_vips_to_etc_hosts + - {get_attr: [VipHosts, value]} + - [] +{%- for role in roles %} + - {get_attr: [{{role.name}}, hosts_entry]} +{%- endfor %} + - - {get_param: ExtraHostFileEntries} CloudNames: type: OS::Heat::Value @@ -1130,7 +1120,7 @@ resources: VipHostsEntries: if: - add_vips_to_etc_hosts - - {get_attr: [VipHosts, value, entries]} + - {get_attr: [VipHosts, value]} - [] KeystoneResourcesConfigs: map_merge: @@ -1167,7 +1157,7 @@ outputs: value: list_concat_unique: - {get_attr: [HostsEntryValue, value]} - - {get_attr: [VipHosts, value, entries]} + - {get_attr: [VipHosts, value]} EnabledServices: description: The services enabled on each role value: diff --git a/puppet/role.role.j2.yaml b/puppet/role.role.j2.yaml index 51ac149dd4..84994903c7 100644 --- a/puppet/role.role.j2.yaml +++ b/puppet/role.role.j2.yaml @@ -641,33 +641,32 @@ outputs: HOSTNAME: {get_attr:[{{server_resource_name}}, name]} hosts_entry: value: - entries: - - str_replace: - template: PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST - params: - PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, {{role.name}}HostnameResolveNetwork]}]} - DOMAIN: {get_param: CloudDomain} - PRIMARYHOST: {get_attr: [{{server_resource_name}}, name]} + - str_replace: + template: PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST + params: + PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, {{role.name}}HostnameResolveNetwork]}]} + DOMAIN: {get_param: CloudDomain} + PRIMARYHOST: {get_attr: [{{server_resource_name}}, name]} {%- for network in networks %} {%- if network.enabled|default(true) and network.name in role.networks|default([]) %} - - str_replace: - template: {{network.name}}IP {{network.name}}HOST.DOMAIN {{network.name}}HOST - params: - DOMAIN: {get_param: CloudDomain} + - str_replace: + template: {{network.name}}IP {{network.name}}HOST.DOMAIN {{network.name}}HOST + params: + DOMAIN: {get_param: CloudDomain} {%- for network in networks %} {%- if network.enabled|default(true) and network.name in role.networks|default([]) %} - {{network.name}}IP: {get_attr: [{{network.name}}Port, ip_address]} - {{network.name}}HOST: {get_attr: [NetHostMap, value, {{network.name_lower|default(network.name.lower())}}, short]} + {{network.name}}IP: {get_attr: [{{network.name}}Port, ip_address]} + {{network.name}}HOST: {get_attr: [NetHostMap, value, {{network.name_lower|default(network.name.lower())}}, short]} {%- endif %} {%- endfor %} {%- endif %} {%- endfor %} - - str_replace: - template: CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST - params: - DOMAIN: {get_param: CloudDomain} - CTLPLANEIP: {get_attr: [{{server_resource_name}}, networks, ctlplane, 0]} - CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]} + - str_replace: + template: CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST + params: + DOMAIN: {get_param: CloudDomain} + CTLPLANEIP: {get_attr: [{{server_resource_name}}, networks, ctlplane, 0]} + CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]} nova_server_resource: description: Heat resource handle for {{role.name}} server value: