c286f26c1e94310a744e7e52b088577d6c0e7457
[apex-tripleo-heat-templates.git] / puppet / controller-role.yaml
1 heat_template_version: 2016-10-14
2
3 description: >
4   OpenStack controller node configured by Puppet.
5
6 parameters:
7   controllerExtraConfig:
8     default: {}
9     description: |
10       Deprecated. Use ControllerExtraConfig via parameter_defaults instead.
11     type: json
12   ControllerExtraConfig:
13     default: {}
14     description: |
15       Controller specific hiera configuration data to inject into the cluster.
16     type: json
17   ControllerIPs:
18     default: {}
19     description: >
20       A network mapped list of IPs to assign to Controllers in the following form:
21       {
22         "internal_api": ["a.b.c.d", "e.f.g.h"],
23         ...
24       }
25     type: json
26   Debug:
27     default: ''
28     description: Set to True to enable debugging on all services.
29     type: string
30   EnableLoadBalancer:
31     default: true
32     description: Whether to deploy a LoadBalancer on the Controller
33     type: boolean
34   ExtraConfig:
35     default: {}
36     description: |
37       Additional hieradata to inject into the cluster, note that
38       ControllerExtraConfig takes precedence over ExtraConfig.
39     type: json
40   OvercloudControlFlavor:
41     description: Flavor for control nodes to request when deploying.
42     default: baremetal
43     type: string
44     constraints:
45       - custom_constraint: nova.flavor
46   controllerImage:
47     type: string
48     default: overcloud-full
49     constraints:
50       - custom_constraint: glance.image
51   ImageUpdatePolicy:
52     default: 'REBUILD_PRESERVE_EPHEMERAL'
53     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
54     type: string
55   KeyName:
56     default: default
57     description: Name of an existing Nova key pair to enable SSH access to the instances
58     type: string
59     constraints:
60       - custom_constraint: nova.keypair
61   NeutronPublicInterface:
62     default: nic1
63     description: What interface to bridge onto br-ex for network nodes.
64     type: string
65   ServiceNetMap:
66     default: {}
67     description: Mapping of service_name -> network name. Typically set
68                  via parameter_defaults in the resource registry.
69     type: json
70   EndpointMap:
71     default: {}
72     description: Mapping of service endpoint -> protocol. Typically set
73                  via parameter_defaults in the resource registry.
74     type: json
75   UpdateIdentifier:
76     default: ''
77     type: string
78     description: >
79       Setting to a previously unused value during stack-update will trigger
80       package update on all nodes
81   Hostname:
82     type: string
83     default: '' # Defaults to Heat created hostname
84   HostnameMap:
85     type: json
86     default: {}
87     description: Optional mapping to override hostnames
88   NetworkDeploymentActions:
89     type: comma_delimited_list
90     description: >
91       Heat action when to apply network configuration changes
92     default: ['CREATE']
93   NodeIndex:
94     type: number
95     default: 0
96   SoftwareConfigTransport:
97     default: POLL_SERVER_CFN
98     description: |
99       How the server should receive the metadata required for software configuration.
100     type: string
101     constraints:
102     - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
103   CloudDomain:
104     default: 'localdomain'
105     type: string
106     description: >
107       The DNS domain used for the hosts. This should match the dhcp_domain
108       configured in the Undercloud neutron. Defaults to localdomain.
109   ControllerServerMetadata:
110     default: {}
111     description: >
112       Extra properties or metadata passed to Nova for the created nodes in
113       the overcloud. It's accessible via the Nova metadata API. This option is
114       role-specific and is merged with the values given to the ServerMetadata
115       parameter.
116     type: json
117   ServerMetadata:
118     default: {}
119     description: >
120       Extra properties or metadata passed to Nova for the created nodes in
121       the overcloud. It's accessible via the Nova metadata API. This applies to
122       all roles and is merged with a role-specific metadata parameter.
123     type: json
124   ControllerSchedulerHints:
125     type: json
126     description: Optional scheduler hints to pass to nova
127     default: {}
128   ServiceConfigSettings:
129     type: json
130     default: {}
131   ServiceNames:
132     type: comma_delimited_list
133     default: []
134   MonitoringSubscriptions:
135     type: comma_delimited_list
136     default: []
137   ConfigCommand:
138     type: string
139     description: Command which will be run whenever configuration data changes
140     default: os-refresh-config --timeout 14400
141
142 parameter_groups:
143 - label: deprecated
144   description: Do not use deprecated params, they will be removed.
145   parameters:
146   - controllerExtraConfig
147
148 resources:
149
150   Controller:
151     type: OS::TripleO::Server
152     metadata:
153       os-collect-config:
154         command: {get_param: ConfigCommand}
155     properties:
156       image: {get_param: controllerImage}
157       image_update_policy: {get_param: ImageUpdatePolicy}
158       flavor: {get_param: OvercloudControlFlavor}
159       key_name: {get_param: KeyName}
160       networks:
161         - network: ctlplane
162       user_data_format: SOFTWARE_CONFIG
163       user_data: {get_resource: UserData}
164       name:
165         str_replace:
166             template: {get_param: Hostname}
167             params: {get_param: HostnameMap}
168       software_config_transport: {get_param: SoftwareConfigTransport}
169       metadata:
170         map_merge:
171           - {get_param: ServerMetadata}
172           - {get_param: ControllerServerMetadata}
173       scheduler_hints: {get_param: ControllerSchedulerHints}
174
175   # Combine the NodeAdminUserData and NodeUserData mime archives
176   UserData:
177     type: OS::Heat::MultipartMime
178     properties:
179       parts:
180       - config: {get_resource: NodeAdminUserData}
181         type: multipart
182       - config: {get_resource: NodeUserData}
183         type: multipart
184       - config: {get_resource: RoleUserData}
185         type: multipart
186
187   # Creates the "heat-admin" user if configured via the environment
188   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
189   NodeAdminUserData:
190     type: OS::TripleO::NodeAdminUserData
191
192   # For optional operator additional userdata
193   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
194   NodeUserData:
195     type: OS::TripleO::NodeUserData
196
197   # For optional operator role-specific userdata
198   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
199   RoleUserData:
200     type: OS::TripleO::Controller::NodeUserData
201
202   ExternalPort:
203     type: OS::TripleO::Controller::Ports::ExternalPort
204     properties:
205       IPPool: {get_param: ControllerIPs}
206       NodeIndex: {get_param: NodeIndex}
207       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
208
209   InternalApiPort:
210     type: OS::TripleO::Controller::Ports::InternalApiPort
211     properties:
212       IPPool: {get_param: ControllerIPs}
213       NodeIndex: {get_param: NodeIndex}
214       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
215
216   StoragePort:
217     type: OS::TripleO::Controller::Ports::StoragePort
218     properties:
219       IPPool: {get_param: ControllerIPs}
220       NodeIndex: {get_param: NodeIndex}
221       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
222
223   StorageMgmtPort:
224     type: OS::TripleO::Controller::Ports::StorageMgmtPort
225     properties:
226       IPPool: {get_param: ControllerIPs}
227       NodeIndex: {get_param: NodeIndex}
228       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
229
230   TenantPort:
231     type: OS::TripleO::Controller::Ports::TenantPort
232     properties:
233       IPPool: {get_param: ControllerIPs}
234       NodeIndex: {get_param: NodeIndex}
235       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
236
237   ManagementPort:
238     type: OS::TripleO::Controller::Ports::ManagementPort
239     properties:
240       IPPool: {get_param: ControllerIPs}
241       NodeIndex: {get_param: NodeIndex}
242       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
243
244   NetIpMap:
245     type: OS::TripleO::Network::Ports::NetIpMap
246     properties:
247       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
248       ExternalIp: {get_attr: [ExternalPort, ip_address]}
249       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
250       ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
251       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
252       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
253       InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
254       StorageIp: {get_attr: [StoragePort, ip_address]}
255       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
256       StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
257       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
258       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
259       StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
260       TenantIp: {get_attr: [TenantPort, ip_address]}
261       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
262       TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
263       ManagementIp: {get_attr: [ManagementPort, ip_address]}
264       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
265       ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
266
267   NetHostMap:
268     type: OS::Heat::Value
269     properties:
270       type: json
271       value:
272         external:
273           fqdn:
274             list_join:
275             - '.'
276             - - {get_attr: [Controller, name]}
277               - external
278               - {get_param: CloudDomain}
279           short:
280             list_join:
281             - '.'
282             - - {get_attr: [Controller, name]}
283               - external
284         internal_api:
285           fqdn:
286             list_join:
287             - '.'
288             - - {get_attr: [Controller, name]}
289               - internalapi
290               - {get_param: CloudDomain}
291           short:
292             list_join:
293             - '.'
294             - - {get_attr: [Controller, name]}
295               - internalapi
296         storage:
297           fqdn:
298             list_join:
299             - '.'
300             - - {get_attr: [Controller, name]}
301               - storage
302               - {get_param: CloudDomain}
303           short:
304             list_join:
305             - '.'
306             - - {get_attr: [Controller, name]}
307               - storage
308         storage_mgmt:
309           fqdn:
310             list_join:
311             - '.'
312             - - {get_attr: [Controller, name]}
313               - storagemgmt
314               - {get_param: CloudDomain}
315           short:
316             list_join:
317             - '.'
318             - - {get_attr: [Controller, name]}
319               - storagemgmt
320         tenant:
321           fqdn:
322             list_join:
323             - '.'
324             - - {get_attr: [Controller, name]}
325               - tenant
326               - {get_param: CloudDomain}
327           short:
328             list_join:
329             - '.'
330             - - {get_attr: [Controller, name]}
331               - tenant
332         management:
333           fqdn:
334             list_join:
335             - '.'
336             - - {get_attr: [Controller, name]}
337               - management
338               - {get_param: CloudDomain}
339           short:
340             list_join:
341             - '.'
342             - - {get_attr: [Controller, name]}
343               - management
344         ctlplane:
345           fqdn:
346             list_join:
347             - '.'
348             - - {get_attr: [Controller, name]}
349               - ctlplane
350               - {get_param: CloudDomain}
351           short:
352             list_join:
353             - '.'
354             - - {get_attr: [Controller, name]}
355               - ctlplane
356
357   NetworkConfig:
358     type: OS::TripleO::Controller::Net::SoftwareConfig
359     properties:
360       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
361       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
362       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
363       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
364       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
365       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
366       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
367
368   NetworkDeployment:
369     type: OS::TripleO::SoftwareDeployment
370     properties:
371       name: NetworkDeployment
372       config: {get_resource: NetworkConfig}
373       server: {get_resource: Controller}
374       actions: {get_param: NetworkDeploymentActions}
375       input_values:
376         bridge_name: br-ex
377         interface_name: {get_param: NeutronPublicInterface}
378
379   # Resource for site-specific injection of root certificate
380   NodeTLSCAData:
381     depends_on: NetworkDeployment
382     type: OS::TripleO::NodeTLSCAData
383     properties:
384       server: {get_resource: Controller}
385
386   # Resource for site-specific passing of private keys/certificates
387   NodeTLSData:
388     depends_on: NodeTLSCAData
389     type: OS::TripleO::NodeTLSData
390     properties:
391       server: {get_resource: Controller}
392       NodeIndex: {get_param: NodeIndex}
393
394
395   ControllerDeployment:
396     type: OS::TripleO::SoftwareDeployment
397     depends_on: NetworkDeployment
398     properties:
399       name: ControllerDeployment
400       config: {get_resource: ControllerConfig}
401       server: {get_resource: Controller}
402       input_values:
403         bootstack_nodeid: {get_attr: [Controller, name]}
404         enable_load_balancer: {get_param: EnableLoadBalancer}
405         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
406
407   # Map heat metadata into hiera datafiles
408   ControllerConfig:
409     type: OS::Heat::StructuredConfig
410     properties:
411       group: hiera
412       config:
413         hierarchy:
414           - '"%{::uuid}"'
415           - heat_config_%{::deploy_config_name}
416           - controller_extraconfig
417           - extraconfig
418           - service_configs
419           - service_names
420           - controller
421           - bootstrap_node # provided by BootstrapNodeConfig
422           - all_nodes # provided by allNodesConfig
423           - vip_data # provided by allNodesConfig
424           - '"%{::osfamily}"'
425           - cinder_dellsc_data # Optionally provided by ControllerExtraConfigPre
426           - cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
427           - cinder_eqlx_data # Optionally provided by ControllerExtraConfigPre
428           - neutron_bigswitch_data # Optionally provided by ControllerExtraConfigPre
429           - neutron_cisco_data # Optionally provided by ControllerExtraConfigPre
430           - cisco_n1kv_data # Optionally provided by ControllerExtraConfigPre
431           - midonet_data #Optionally provided by AllNodesExtraConfig
432           - cisco_aci_data # Optionally provided by ControllerExtraConfigPre
433         merge_behavior: deeper
434         datafiles:
435           service_names:
436             service_names: {get_param: ServiceNames}
437             sensu::subscriptions: {get_param: MonitoringSubscriptions}
438           service_configs:
439             map_replace:
440               - {get_param: ServiceConfigSettings}
441               - values: {get_attr: [NetIpMap, net_ip_map]}
442           controller_extraconfig:
443             map_merge:
444               - {get_param: controllerExtraConfig}
445               - {get_param: ControllerExtraConfig}
446           extraconfig: {get_param: ExtraConfig}
447           controller:
448             # data supplied directly to this deployment configuration, etc
449             bootstack_nodeid: {get_input: bootstack_nodeid}
450             # Pacemaker
451             enable_load_balancer: {get_input: enable_load_balancer}
452
453             # Misc
454             tripleo::haproxy::service_certificate: {get_attr: [NodeTLSData, deployed_ssl_certificate_path]}
455             tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
456             fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
457             fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
458             fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
459             fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
460             fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
461             fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
462
463   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
464   ControllerExtraConfigPre:
465     depends_on: ControllerDeployment
466     type: OS::TripleO::ControllerExtraConfigPre
467     properties:
468         server: {get_resource: Controller}
469
470   # Hook for site-specific additional pre-deployment config,
471   # applying to all nodes, e.g node registration/unregistration
472   NodeExtraConfig:
473     depends_on: [ControllerExtraConfigPre, NodeTLSData]
474     type: OS::TripleO::NodeExtraConfig
475     properties:
476         server: {get_resource: Controller}
477
478   UpdateConfig:
479     type: OS::TripleO::Tasks::PackageUpdate
480
481   UpdateDeployment:
482     type: OS::Heat::SoftwareDeployment
483     properties:
484       name: UpdateDeployment
485       config: {get_resource: UpdateConfig}
486       server: {get_resource: Controller}
487       input_values:
488         update_identifier:
489           get_param: UpdateIdentifier
490
491 outputs:
492   ip_address:
493     description: IP address of the server in the ctlplane network
494     value: {get_attr: [Controller, networks, ctlplane, 0]}
495   external_ip_address:
496     description: IP address of the server in the external network
497     value: {get_attr: [ExternalPort, ip_address]}
498   internal_api_ip_address:
499     description: IP address of the server in the internal_api network
500     value: {get_attr: [InternalApiPort, ip_address]}
501   storage_ip_address:
502     description: IP address of the server in the storage network
503     value: {get_attr: [StoragePort, ip_address]}
504   storage_mgmt_ip_address:
505     description: IP address of the server in the storage_mgmt network
506     value: {get_attr: [StorageMgmtPort, ip_address]}
507   tenant_ip_address:
508     description: IP address of the server in the tenant network
509     value: {get_attr: [TenantPort, ip_address]}
510   management_ip_address:
511     description: IP address of the server in the management network
512     value: {get_attr: [ManagementPort, ip_address]}
513   hostname:
514     description: Hostname of the server
515     value: {get_attr: [Controller, name]}
516   hostname_map:
517     description: Mapping of network names to hostnames
518     value:
519       external: {get_attr: [NetHostMap, value, external, fqdn]}
520       internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
521       storage: {get_attr: [NetHostMap, value, storage, fqdn]}
522       storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
523       tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
524       management: {get_attr: [NetHostMap, value, management, fqdn]}
525       ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
526   hosts_entry:
527     description: >
528       Server's IP address and hostname in the /etc/hosts format
529     value:
530       str_replace:
531         template: |
532           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
533           EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
534           INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
535           STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
536           STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
537           TENANTIP TENANTHOST.DOMAIN TENANTHOST
538           MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
539           CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
540         params:
541           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ControllerHostnameResolveNetwork]}]}
542           DOMAIN: {get_param: CloudDomain}
543           PRIMARYHOST: {get_attr: [Controller, name]}
544           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
545           EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
546           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
547           INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
548           STORAGEIP: {get_attr: [StoragePort, ip_address]}
549           STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
550           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
551           STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
552           TENANTIP: {get_attr: [TenantPort, ip_address]}
553           TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
554           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
555           MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
556           CTLPLANEIP: {get_attr: [Controller, networks, ctlplane, 0]}
557           CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
558   nova_server_resource:
559     description: Heat resource handle for the Nova compute server
560     value:
561       {get_resource: Controller}
562   tls_key_modulus_md5:
563     description: MD5 checksum of the TLS Key Modulus
564     value: {get_attr: [NodeTLSData, key_modulus_md5]}
565   tls_cert_modulus_md5:
566     description: MD5 checksum of the TLS Certificate Modulus
567     value: {get_attr: [NodeTLSData, cert_modulus_md5]}