Bump template version for all templates to "ocata"
[apex-tripleo-heat-templates.git] / puppet / all-nodes-config.yaml
1 heat_template_version: ocata
2 description: 'All Nodes Config for Puppet'
3
4 parameters:
5   cloud_name_external:
6     type: string
7   cloud_name_internal_api:
8     type: string
9   cloud_name_storage:
10     type: string
11   cloud_name_storage_mgmt:
12     type: string
13   cloud_name_ctlplane:
14     type: string
15   # FIXME(shardy) this can be comma_delimited_list when
16   # https://bugs.launchpad.net/heat/+bug/1617019 is fixed
17   enabled_services:
18     type: string
19   controller_ips:
20     type: comma_delimited_list
21   logging_groups:
22     type: json
23   logging_sources:
24     type: json
25   service_ips:
26     type: json
27   service_node_names:
28     type: json
29   short_service_node_names:
30     type: json
31   short_service_bootstrap_node:
32     type: json
33   controller_names:
34     type: comma_delimited_list
35   memcache_node_ips:
36     type: comma_delimited_list
37   NetVipMap:
38     type: json
39   RedisVirtualIP:
40     type: string
41     default: ''
42   ServiceNetMap:
43     type: json
44   DeployIdentifier:
45     type: string
46     default: ''
47     description: >
48       Setting this to a unique value will re-run any deployment tasks which
49       perform configuration on a Heat stack-update.
50   UpdateIdentifier:
51     type: string
52     description: >
53       Setting to a previously unused value during stack-update will trigger
54       package update on all nodes
55   StackAction:
56     type: string
57     description: >
58       Heat action on performed top-level stack.
59     constraints:
60     - allowed_values: ['CREATE', 'UPDATE']
61   # NOTE(jaosorior): This is being set as IPA as it's the first
62   # CA we'll actually be testing out. But we can change this if
63   # people request it.
64   CertmongerCA:
65     type: string
66     default: 'IPA'
67   EnableInternalTLS:
68     type: boolean
69     default: false
70
71 resources:
72
73   allNodesConfigImpl:
74     type: OS::Heat::StructuredConfig
75     properties:
76       group: hiera
77       config:
78         datafiles:
79           bootstrap_node:
80             bootstrap_nodeid: {get_input: bootstrap_nodeid}
81             bootstrap_nodeid_ip: {get_input: bootstrap_nodeid_ip}
82           all_nodes:
83            map_merge:
84               - tripleo::profile::base::logging::fluentd::fluentd_sources: {get_param: logging_sources}
85               - tripleo::profile::base::logging::fluentd::fluentd_groups: {get_param: logging_groups}
86               - enabled_services: {get_param: enabled_services}
87               # This writes out a mapping of service_name_enabled: 'true'
88               # For any services not enabled, hiera foo_enabled will
89               # return nil, as it's undefined
90               - map_merge:
91                   repeat:
92                     template:
93                       # Note this must be string 'true' due to
94                       # https://bugs.launchpad.net/heat/+bug/1617203
95                       SERVICE_enabled: 'true'
96                     for_each:
97                       SERVICE:
98                         str_split: [',', {get_param: enabled_services}]
99               # Dynamically generate per-service network data
100               # This works as follows (outer->inner functions)
101               # yaql - filters services where no mapping exists in ServiceNetMap
102               #   map_replace: substitute e.g heat_api_network with network name from ServiceNetMap
103               #     map_merge/repeat: generate a per-service mapping
104               - yaql:
105                   # This filters any entries where the value hasn't been substituted for
106                   # a list, e.g it's still $service_network.  This happens when there is
107                   # no network defined for the service in the ServiceNetMap, which is OK
108                   # as not all services have to be bound to a network, so we filter them
109                   expression: dict($.data.map.items().where(isString($[1]) and not $[1].endsWith("_network")))
110                   data:
111                     map:
112                       map_replace:
113                         - map_merge:
114                             repeat:
115                               template:
116                                 SERVICE_network: SERVICE_network
117                               for_each:
118                                 SERVICE:
119                                   str_split: [',', {get_param: enabled_services}]
120                         - values: {get_param: ServiceNetMap}
121               # Keystone doesn't provide separate entries for the public
122               # and admin endpoints, so we need to add them here manually
123               # like we do in the vip-config below
124               - keystone_admin_api_network: {get_param: [ServiceNetMap, keystone_admin_api_network]}
125                 keystone_public_api_network: {get_param: [ServiceNetMap, keystone_public_api_network]}
126               # provides a mapping of service_name_ips to a list of IPs
127               - {get_param: service_ips}
128               - {get_param: service_node_names}
129               - {get_param: short_service_node_names}
130               - {get_param: short_service_bootstrap_node}
131               - controller_node_ips:
132                   list_join:
133                   - ','
134                   - {get_param: controller_ips}
135                 controller_node_names:
136                   list_join:
137                   - ','
138                   - {get_param: controller_names}
139                 memcached_node_ips_v6:
140                   repeat:
141                     template: "inet6:[NAME]"
142                     for_each:
143                       NAME: {get_param: memcache_node_ips}
144                 deploy_identifier: {get_param: DeployIdentifier}
145                 update_identifier: {get_param: UpdateIdentifier}
146                 stack_action: {get_param: StackAction}
147           vip_data:
148             map_merge:
149               # Dynamically generate per-service VIP data based on enabled_services
150               # This works as follows (outer->inner functions)
151               # yaql - filters services where no mapping exists in ServiceNetMap
152               #   map_replace: substitute e.g internal_api with the IP from NetVipMap
153               #     map_replace: substitute e.g heat_api_network with network name from ServiceNetMap
154               #       map_merge/repeat: generate a per-service mapping
155               - yaql:
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(isString($[1]) and not $[1].endsWith("_network")))
161                   data:
162                     map:
163                       map_replace:
164                         - map_replace:
165                             - map_merge:
166                                 repeat:
167                                   template:
168                                     SERVICE_vip: SERVICE_network
169                                   for_each:
170                                     SERVICE:
171                                       str_split: [',', {get_param: enabled_services}]
172                             - values: {get_param: ServiceNetMap}
173                         - values: {get_param: NetVipMap}
174               - keystone_admin_api_vip:
175                   get_param: [NetVipMap, {get_param: [ServiceNetMap, keystone_admin_api_network]}]
176                 keystone_public_api_vip:
177                   get_param: [NetVipMap, {get_param: [ServiceNetMap, keystone_public_api_network]}]
178                 public_virtual_ip: {get_param: [NetVipMap, external]}
179                 controller_virtual_ip: {get_param: [NetVipMap, ctlplane]}
180                 internal_api_virtual_ip: {get_param: [NetVipMap, internal_api]}
181                 storage_virtual_ip: {get_param: [NetVipMap, storage]}
182                 storage_mgmt_virtual_ip: {get_param: [NetVipMap, storage_mgmt]}
183                 redis_vip: {get_param: RedisVirtualIP}
184                 # public_virtual_ip and controller_virtual_ip are needed in
185                 # both HAproxy & keepalived.
186                 tripleo::haproxy::public_virtual_ip: {get_param: [NetVipMap, external]}
187                 tripleo::haproxy::controller_virtual_ip: {get_param: [NetVipMap, ctlplane]}
188                 tripleo::keepalived::public_virtual_ip: {get_param: [NetVipMap, external]}
189                 tripleo::keepalived::controller_virtual_ip: {get_param: [NetVipMap, ctlplane]}
190                 tripleo::keepalived::internal_api_virtual_ip: {get_param: [NetVipMap, internal_api]}
191                 tripleo::keepalived::storage_virtual_ip: {get_param: [NetVipMap, storage]}
192                 tripleo::keepalived::storage_mgmt_virtual_ip: {get_param: [NetVipMap, storage_mgmt]}
193                 tripleo::keepalived::redis_virtual_ip: {get_param: RedisVirtualIP}
194                 tripleo::redis_notification::haproxy_monitor_ip: {get_param: [NetVipMap, ctlplane]}
195                 cloud_name_external: {get_param: cloud_name_external}
196                 cloud_name_internal_api: {get_param: cloud_name_internal_api}
197                 cloud_name_storage: {get_param: cloud_name_storage}
198                 cloud_name_storage_mgmt: {get_param: cloud_name_storage_mgmt}
199                 cloud_name_ctlplane: {get_param: cloud_name_ctlplane}
200                 # TLS parameters
201                 certmonger_ca: {get_param: CertmongerCA}
202                 enable_internal_tls: {get_param: EnableInternalTLS}
203
204 outputs:
205   config_id:
206     description: The ID of the allNodesConfigImpl resource.
207     value:
208       {get_resource: allNodesConfigImpl}