1 heat_template_version: ocata
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
39 # This adds the extra "services" on for keystone
40 # so that keystone_admin_api_network and
41 # keystone_public_api_network point to the correct
42 # network on the nodes running the "keystone" service
46 type: comma_delimited_list
49 expression: let(root => $) -> $.data.extra_services.items().where($[0] in $root.data.enabled_services).select($[1]).flatten() + $root.data.enabled_services
51 enabled_services: {get_param: EnabledServices}
53 # If anything other than keystone needs this
54 # then we should add an extra_networks interface
55 # to the service templates role_data but for
56 # now we hard-code the keystone special case
64 A Hash containing a mapping of network names to assigned lists
67 ctlplane: {get_param: ControlPlaneIpList}
68 external: {get_param: ExternalIpList}
69 internal_api: {get_param: InternalApiIpList}
70 storage: {get_param: StorageIpList}
71 storage_mgmt: {get_param: StorageMgmtIpList}
72 tenant: {get_param: TenantIpList}
73 management: {get_param: ManagementIpList}
76 Map of enabled services to a list of their IP addresses
79 # This filters any entries where the value hasn't been substituted for
80 # a list, e.g it's still $service_network. This happens when there is
81 # no network defined for the service in the ServiceNetMap, which is OK
82 # as not all services have to be bound to a network, so we filter them
83 expression: dict($.data.map.items().where(not isString($[1])))
91 SERVICE_node_ips: SERVICE_network
93 SERVICE: {get_attr: [EnabledServicesValue, value]}
94 - values: {get_param: ServiceNetMap}
96 ctlplane: {get_param: ControlPlaneIpList}
97 external: {get_param: ExternalIpList}
98 internal_api: {get_param: InternalApiIpList}
99 storage: {get_param: StorageIpList}
100 storage_mgmt: {get_param: StorageMgmtIpList}
101 tenant: {get_param: TenantIpList}
102 management: {get_param: ManagementIpList}
105 Map of enabled services to a list of hostnames where they're running
109 # This filters any entries where the value hasn't been substituted for
110 # a list, e.g it's still $service_network. This happens when there is
111 # no network defined for the service in the ServiceNetMap, which is OK
112 # as not all services have to be bound to a network, so we filter them
113 expression: dict($.data.map.items().where(not $[1].endsWith("_network")))
120 SERVICE_node_names: SERVICE_network
122 SERVICE: {get_attr: [EnabledServicesValue, value]}
123 - values: {get_param: ServiceNetMap}
124 - values: {get_param: NetworkHostnameMap}
125 short_service_hostnames:
127 Map of enabled services to a list of hostnames where they're running regardless of the network
130 # If ServiceHostnameList is empty the role is deployed with zero nodes
131 # therefore we don't want to add any *_node_names to the map
132 expression: dict($.data.map.items().where(len($[1]) > 0))
138 SERVICE_short_node_names: {get_param: ServiceHostnameList}
140 SERVICE: {get_attr: [EnabledServicesValue, value]}
141 short_service_bootstrap_hostnames:
143 Map of enabled services to a list of hostnames where they're running regardless of the network
144 Used for bootstrap purposes
147 # If ServiceHostnameList is empty the role is deployed with zero nodes
148 # therefore we don't want to add any *_node_names to the map
149 expression: dict($.data.map.items().where(len($[1]) > 0))
155 SERVICE_short_bootstrap_node_name: {get_param: ServiceHostnameList}
157 SERVICE: {get_attr: [EnabledServicesValue, value]}