1 heat_template_version: 2016-10-14
2 description: 'All Nodes Config for Puppet'
7 cloud_name_internal_api:
11 cloud_name_storage_mgmt:
16 type: comma_delimited_list
17 # FIXME(shardy) this can be comma_delimited_list when
18 # https://bugs.launchpad.net/heat/+bug/1617019 is fixed
22 type: comma_delimited_list
28 type: comma_delimited_list
30 type: comma_delimited_list
31 keystone_public_api_node_ips:
32 type: comma_delimited_list
33 keystone_admin_api_node_ips:
34 type: comma_delimited_list
46 Setting this to a unique value will re-run any deployment tasks which
47 perform configuration on a Heat stack-update.
51 Setting to a previously unused value during stack-update will trigger
52 package update on all nodes
56 Heat action on performed top-level stack.
58 - allowed_values: ['CREATE', 'UPDATE']
63 type: OS::Heat::StructuredConfig
65 group: os-apply-config
75 bootstrap_nodeid: {get_input: bootstrap_nodeid}
76 bootstrap_nodeid_ip: {get_input: bootstrap_nodeid_ip}
80 - enabled_services: {get_param: enabled_services}
81 # This writes out a mapping of service_name_enabled: 'true'
82 # For any services not enabled, hiera foo_enabled will
83 # return nil, as it's undefined
87 # Note this must be string 'true' due to
88 # https://bugs.launchpad.net/heat/+bug/1617203
89 SERVICE_enabled: 'true'
92 str_split: [',', {get_param: enabled_services}]
93 # Dynamically generate per-service network data
94 # This works as follows (outer->inner functions)
95 # yaql - filters services where no mapping exists in ServiceNetMap
96 # map_replace: substitute e.g heat_api_network with network name from ServiceNetMap
97 # map_merge/repeat: generate a per-service mapping
99 # This filters any entries where the value hasn't been substituted for
100 # a list, e.g it's still $service_network. This happens when there is
101 # no network defined for the service in the ServiceNetMap, which is OK
102 # as not all services have to be bound to a network, so we filter them
103 expression: dict($.data.map.items().where(isString($[1]) and not $[1].endsWith("_network")))
110 SERVICE_network: SERVICE_network
113 str_split: [',', {get_param: enabled_services}]
114 - values: {get_param: ServiceNetMap}
115 # Keystone doesn't provide separate entries for the public
116 # and admin endpoints, so we need to add them here manually
117 # like we do in the vip-config below
118 - keystone_admin_api_network: {get_param: [ServiceNetMap, keystone_admin_api_network]}
119 keystone_public_api_network: {get_param: [ServiceNetMap, keystone_public_api_network]}
120 # provides a mapping of service_name_ips to a list of IPs
121 - {get_param: service_ips}
122 - {get_param: service_node_names}
123 - controller_node_ips:
126 - {get_param: controller_ips}
127 controller_node_names:
130 - {get_param: controller_names}
131 memcached_node_ips_v6:
133 template: "['inet6:[SERVERS_LIST]']"
138 - {get_param: memcache_node_ips}
139 keystone_public_api_node_ips:
141 template: "['SERVERS_LIST']"
146 - {get_param: keystone_public_api_node_ips}
147 keystone_admin_api_node_ips:
149 template: "['SERVERS_LIST']"
154 - {get_param: keystone_admin_api_node_ips}
156 deploy_identifier: {get_param: DeployIdentifier}
157 update_identifier: {get_param: UpdateIdentifier}
158 stack_action: {get_param: StackAction}
162 # Dynamically generate per-service VIP data based on enabled_services
163 # This works as follows (outer->inner functions)
164 # yaql - filters services where no mapping exists in ServiceNetMap
165 # map_replace: substitute e.g internal_api with the IP from NetVipMap
166 # map_replace: substitute e.g heat_api_network with network name from ServiceNetMap
167 # map_merge/repeat: generate a per-service mapping
169 # This filters any entries where the value hasn't been substituted for
170 # a list, e.g it's still $service_network. This happens when there is
171 # no network defined for the service in the ServiceNetMap, which is OK
172 # as not all services have to be bound to a network, so we filter them
173 expression: dict($.data.map.items().where(isString($[1]) and not $[1].endsWith("_network")))
181 SERVICE_vip: SERVICE_network
184 str_split: [',', {get_param: enabled_services}]
185 - values: {get_param: ServiceNetMap}
186 - values: {get_param: NetVipMap}
187 - keystone_admin_api_vip:
188 get_param: [NetVipMap, {get_param: [ServiceNetMap, keystone_admin_api_network]}]
189 keystone_public_api_vip:
190 get_param: [NetVipMap, {get_param: [ServiceNetMap, keystone_public_api_network]}]
191 public_virtual_ip: {get_param: [NetVipMap, external]}
192 controller_virtual_ip: {get_param: [NetVipMap, ctlplane]}
193 internal_api_virtual_ip: {get_param: [NetVipMap, internal_api]}
194 storage_virtual_ip: {get_param: [NetVipMap, storage]}
195 storage_mgmt_virtual_ip: {get_param: [NetVipMap, storage_mgmt]}
196 redis_vip: {get_param: RedisVirtualIP}
197 # public_virtual_ip and controller_virtual_ip are needed in
198 # both HAproxy & keepalived.
199 tripleo::haproxy::public_virtual_ip: {get_param: [NetVipMap, external]}
200 tripleo::haproxy::controller_virtual_ip: {get_param: [NetVipMap, ctlplane]}
201 tripleo::keepalived::public_virtual_ip: {get_param: [NetVipMap, external]}
202 tripleo::keepalived::controller_virtual_ip: {get_param: [NetVipMap, ctlplane]}
203 tripleo::keepalived::internal_api_virtual_ip: {get_param: [NetVipMap, internal_api]}
204 tripleo::keepalived::storage_virtual_ip: {get_param: [NetVipMap, storage]}
205 tripleo::keepalived::storage_mgmt_virtual_ip: {get_param: [NetVipMap, storage_mgmt]}
206 tripleo::keepalived::redis_virtual_ip: {get_param: RedisVirtualIP}
207 tripleo::redis_notification::haproxy_monitor_ip: {get_param: [NetVipMap, ctlplane]}
208 cloud_name_external: {get_param: cloud_name_external}
209 cloud_name_internal_api: {get_param: cloud_name_internal_api}
210 cloud_name_storage: {get_param: cloud_name_storage}
211 cloud_name_storage_mgmt: {get_param: cloud_name_storage_mgmt}
212 cloud_name_ctlplane: {get_param: cloud_name_ctlplane}
216 description: The ID of the allNodesConfigImpl resource.
218 {get_resource: allNodesConfigImpl}
221 The content that should be appended to your /etc/hosts if you want to get
222 hostname-based access to the deployed nodes (useful for testing without
224 value: {get_attr: [allNodesConfigImpl, config, hosts]}