1 heat_template_version: pike
6 type: comma_delimited_list
9 type: comma_delimited_list
12 type: comma_delimited_list
15 type: comma_delimited_list
18 type: comma_delimited_list
21 type: comma_delimited_list
24 type: comma_delimited_list
27 type: comma_delimited_list
33 type: comma_delimited_list
40 description: The name of the internal API network.
44 description: The name of the external network.
48 description: The name of the management network.
52 description: The name of the storage network.
56 description: The name of the Storage management network.
60 description: The name of the tenant network.
65 # This adds the extra "services" on for keystone
66 # so that keystone_admin_api_network and
67 # keystone_public_api_network point to the correct
68 # network on the nodes running the "keystone" service
72 type: comma_delimited_list
75 expression: let(root => $) -> $.data.extra_services.items().where($[0] in $root.data.enabled_services).select($[1]).flatten() + $root.data.enabled_services
77 enabled_services: {get_param: EnabledServices}
79 # If anything other than keystone needs this
80 # then we should add an extra_networks interface
81 # to the service templates role_data but for
82 # now we hard-code the keystone special case
93 - ctlplane: {get_param: ControlPlaneIpList}
94 external: {get_param: ExternalIpList}
95 internal_api: {get_param: InternalApiIpList}
96 storage: {get_param: StorageIpList}
97 storage_mgmt: {get_param: StorageMgmtIpList}
98 tenant: {get_param: TenantIpList}
99 management: {get_param: ManagementIpList}
101 external: {get_param: ExternalNetName}
102 internal_api: {get_param: InternalApiNetName}
103 storage: {get_param: StorageNetName}
104 storage_mgmt: {get_param: StorageMgmtNetName}
105 tenant: {get_param: TenantNetName}
106 management: {get_param: ManagementNetName}
111 A Hash containing a mapping of network names to assigned lists
113 value: {get_attr: [NetIpMapValue, value]}
116 Map of enabled services to a list of their IP addresses
119 # This filters any entries where the value hasn't been substituted for
120 # a list, e.g it's still $service_network. This happens when there is
121 # no network defined for the service in the ServiceNetMap, which is OK
122 # as not all services have to be bound to a network, so we filter them
123 expression: dict($.data.map.items().where(not isString($[1])))
131 SERVICE_node_ips: SERVICE_network
133 SERVICE: {get_attr: [EnabledServicesValue, value]}
134 - values: {get_param: ServiceNetMap}
135 - values: {get_attr: [NetIpMapValue, value]}
136 ctlplane_service_ips:
138 Map of enabled services to a list of their ctlplane IP addresses
141 expression: dict($.data.map.items().where(len($[1]) > 0))
147 SERVICE_ctlplane_node_ips: {get_param: ControlPlaneIpList}
149 SERVICE: {get_attr: [EnabledServicesValue, value]}
152 Map of enabled services to a list of hostnames where they're running
156 # This filters any entries where the value hasn't been substituted for
157 # a list, e.g it's still $service_network. This happens when there is
158 # no network defined for the service in the ServiceNetMap, which is OK
159 # as not all services have to be bound to a network, so we filter them
160 expression: dict($.data.map.items().where(not $[1].endsWith("_network")))
167 SERVICE_node_names: SERVICE_network
169 SERVICE: {get_attr: [EnabledServicesValue, value]}
170 - values: {get_param: ServiceNetMap}
171 - values: {get_param: NetworkHostnameMap}
172 short_service_hostnames:
174 Map of enabled services to a list of hostnames where they're running regardless of the network
177 # If ServiceHostnameList is empty the role is deployed with zero nodes
178 # therefore we don't want to add any *_node_names to the map
179 expression: dict($.data.map.items().where(len($[1]) > 0))
185 SERVICE_short_node_names: {get_param: ServiceHostnameList}
187 SERVICE: {get_attr: [EnabledServicesValue, value]}
188 short_service_bootstrap_hostnames:
190 Map of enabled services to a list of hostnames where they're running regardless of the network
191 Used for bootstrap purposes
194 # If ServiceHostnameList is empty the role is deployed with zero nodes
195 # therefore we don't want to add any *_node_names to the map
196 expression: dict($.data.map.items().where(len($[1]) > 0))
202 SERVICE_short_bootstrap_node_name: {get_param: ServiceHostnameList}
204 SERVICE: {get_attr: [EnabledServicesValue, value]}