Bump template version for all templates to "ocata"
[apex-tripleo-heat-templates.git] / puppet / controller-role.yaml
1 heat_template_version: ocata
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   ServiceMetadataSettings:
138     type: json
139     default: {}
140   ConfigCommand:
141     type: string
142     description: Command which will be run whenever configuration data changes
143     default: os-refresh-config --timeout 14400
144   UpgradeInitCommand:
145     type: string
146     description: |
147       Command or script snippet to run on all overcloud nodes to
148       initialize the upgrade process. E.g. a repository switch.
149     default: ''
150
151 parameter_groups:
152 - label: deprecated
153   description: Do not use deprecated params, they will be removed.
154   parameters:
155   - controllerExtraConfig
156
157 resources:
158
159   Controller:
160     type: OS::TripleO::Server
161     metadata:
162       os-collect-config:
163         command: {get_param: ConfigCommand}
164     properties:
165       image: {get_param: controllerImage}
166       image_update_policy: {get_param: ImageUpdatePolicy}
167       flavor: {get_param: OvercloudControlFlavor}
168       key_name: {get_param: KeyName}
169       networks:
170         - network: ctlplane
171       user_data_format: SOFTWARE_CONFIG
172       user_data: {get_resource: UserData}
173       name:
174         str_replace:
175             template: {get_param: Hostname}
176             params: {get_param: HostnameMap}
177       software_config_transport: {get_param: SoftwareConfigTransport}
178       metadata:
179         map_merge:
180           - {get_param: ServerMetadata}
181           - {get_param: ControllerServerMetadata}
182           - {get_param: ServiceMetadataSettings}
183       scheduler_hints: {get_param: ControllerSchedulerHints}
184
185   # Combine the NodeAdminUserData and NodeUserData mime archives
186   UserData:
187     type: OS::Heat::MultipartMime
188     properties:
189       parts:
190       - config: {get_resource: NodeAdminUserData}
191         type: multipart
192       - config: {get_resource: NodeUserData}
193         type: multipart
194       - config: {get_resource: RoleUserData}
195         type: multipart
196
197   # Creates the "heat-admin" user if configured via the environment
198   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
199   NodeAdminUserData:
200     type: OS::TripleO::NodeAdminUserData
201
202   # For optional operator additional userdata
203   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
204   NodeUserData:
205     type: OS::TripleO::NodeUserData
206
207   # For optional operator role-specific userdata
208   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
209   RoleUserData:
210     type: OS::TripleO::Controller::NodeUserData
211
212   ExternalPort:
213     type: OS::TripleO::Controller::Ports::ExternalPort
214     properties:
215       IPPool: {get_param: ControllerIPs}
216       NodeIndex: {get_param: NodeIndex}
217       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
218
219   InternalApiPort:
220     type: OS::TripleO::Controller::Ports::InternalApiPort
221     properties:
222       IPPool: {get_param: ControllerIPs}
223       NodeIndex: {get_param: NodeIndex}
224       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
225
226   StoragePort:
227     type: OS::TripleO::Controller::Ports::StoragePort
228     properties:
229       IPPool: {get_param: ControllerIPs}
230       NodeIndex: {get_param: NodeIndex}
231       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
232
233   StorageMgmtPort:
234     type: OS::TripleO::Controller::Ports::StorageMgmtPort
235     properties:
236       IPPool: {get_param: ControllerIPs}
237       NodeIndex: {get_param: NodeIndex}
238       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
239
240   TenantPort:
241     type: OS::TripleO::Controller::Ports::TenantPort
242     properties:
243       IPPool: {get_param: ControllerIPs}
244       NodeIndex: {get_param: NodeIndex}
245       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
246
247   ManagementPort:
248     type: OS::TripleO::Controller::Ports::ManagementPort
249     properties:
250       IPPool: {get_param: ControllerIPs}
251       NodeIndex: {get_param: NodeIndex}
252       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
253
254   NetIpMap:
255     type: OS::TripleO::Network::Ports::NetIpMap
256     properties:
257       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
258       ExternalIp: {get_attr: [ExternalPort, ip_address]}
259       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
260       ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
261       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
262       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
263       InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
264       StorageIp: {get_attr: [StoragePort, ip_address]}
265       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
266       StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
267       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
268       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
269       StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
270       TenantIp: {get_attr: [TenantPort, ip_address]}
271       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
272       TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
273       ManagementIp: {get_attr: [ManagementPort, ip_address]}
274       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
275       ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
276
277   NetHostMap:
278     type: OS::Heat::Value
279     properties:
280       type: json
281       value:
282         external:
283           fqdn:
284             list_join:
285             - '.'
286             - - {get_attr: [Controller, name]}
287               - external
288               - {get_param: CloudDomain}
289           short:
290             list_join:
291             - '.'
292             - - {get_attr: [Controller, name]}
293               - external
294         internal_api:
295           fqdn:
296             list_join:
297             - '.'
298             - - {get_attr: [Controller, name]}
299               - internalapi
300               - {get_param: CloudDomain}
301           short:
302             list_join:
303             - '.'
304             - - {get_attr: [Controller, name]}
305               - internalapi
306         storage:
307           fqdn:
308             list_join:
309             - '.'
310             - - {get_attr: [Controller, name]}
311               - storage
312               - {get_param: CloudDomain}
313           short:
314             list_join:
315             - '.'
316             - - {get_attr: [Controller, name]}
317               - storage
318         storage_mgmt:
319           fqdn:
320             list_join:
321             - '.'
322             - - {get_attr: [Controller, name]}
323               - storagemgmt
324               - {get_param: CloudDomain}
325           short:
326             list_join:
327             - '.'
328             - - {get_attr: [Controller, name]}
329               - storagemgmt
330         tenant:
331           fqdn:
332             list_join:
333             - '.'
334             - - {get_attr: [Controller, name]}
335               - tenant
336               - {get_param: CloudDomain}
337           short:
338             list_join:
339             - '.'
340             - - {get_attr: [Controller, name]}
341               - tenant
342         management:
343           fqdn:
344             list_join:
345             - '.'
346             - - {get_attr: [Controller, name]}
347               - management
348               - {get_param: CloudDomain}
349           short:
350             list_join:
351             - '.'
352             - - {get_attr: [Controller, name]}
353               - management
354         ctlplane:
355           fqdn:
356             list_join:
357             - '.'
358             - - {get_attr: [Controller, name]}
359               - ctlplane
360               - {get_param: CloudDomain}
361           short:
362             list_join:
363             - '.'
364             - - {get_attr: [Controller, name]}
365               - ctlplane
366
367   NetworkConfig:
368     type: OS::TripleO::Controller::Net::SoftwareConfig
369     properties:
370       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
371       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
372       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
373       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
374       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
375       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
376       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
377
378   NetworkDeployment:
379     type: OS::TripleO::SoftwareDeployment
380     properties:
381       name: NetworkDeployment
382       config: {get_resource: NetworkConfig}
383       server: {get_resource: Controller}
384       actions: {get_param: NetworkDeploymentActions}
385       input_values:
386         bridge_name: br-ex
387         interface_name: {get_param: NeutronPublicInterface}
388
389   # Resource for site-specific injection of root certificate
390   NodeTLSCAData:
391     depends_on: NetworkDeployment
392     type: OS::TripleO::NodeTLSCAData
393     properties:
394       server: {get_resource: Controller}
395
396   # Resource for site-specific passing of private keys/certificates
397   NodeTLSData:
398     depends_on: NodeTLSCAData
399     type: OS::TripleO::NodeTLSData
400     properties:
401       server: {get_resource: Controller}
402       NodeIndex: {get_param: NodeIndex}
403
404   ControllerUpgradeInitConfig:
405     type: OS::Heat::SoftwareConfig
406     properties:
407       group: script
408       config:
409         list_join:
410         - ''
411         - - "#!/bin/bash\n\n"
412           - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
413           - get_param: UpgradeInitCommand
414
415   # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
416   # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
417   ControllerUpgradeInitDeployment:
418     type: OS::Heat::SoftwareDeployment
419     depends_on: NetworkDeployment
420     properties:
421       name: ControllerUpgradeInitDeployment
422       server: {get_resource: Controller}
423       config: {get_resource: ControllerUpgradeInitConfig}
424
425   ControllerDeployment:
426     type: OS::TripleO::SoftwareDeployment
427     depends_on: ControllerUpgradeInitDeployment
428     properties:
429       name: ControllerDeployment
430       config: {get_resource: ControllerConfig}
431       server: {get_resource: Controller}
432       input_values:
433         bootstack_nodeid: {get_attr: [Controller, name]}
434         enable_load_balancer: {get_param: EnableLoadBalancer}
435         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
436
437   # Map heat metadata into hiera datafiles
438   ControllerConfig:
439     type: OS::Heat::StructuredConfig
440     properties:
441       group: hiera
442       config:
443         hierarchy:
444           - '"%{::uuid}"'
445           - heat_config_%{::deploy_config_name}
446           - controller_extraconfig
447           - extraconfig
448           - service_configs
449           - service_names
450           - controller
451           - bootstrap_node # provided by BootstrapNodeConfig
452           - all_nodes # provided by allNodesConfig
453           - vip_data # provided by allNodesConfig
454           - '"%{::osfamily}"'
455           - cinder_dellsc_data # Optionally provided by ControllerExtraConfigPre
456           - cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
457           - cinder_eqlx_data # Optionally provided by ControllerExtraConfigPre
458           - neutron_bigswitch_data # Optionally provided by ControllerExtraConfigPre
459           - neutron_cisco_data # Optionally provided by ControllerExtraConfigPre
460           - cisco_n1kv_data # Optionally provided by ControllerExtraConfigPre
461           - midonet_data #Optionally provided by AllNodesExtraConfig
462           - cisco_aci_data # Optionally provided by ControllerExtraConfigPre
463         merge_behavior: deeper
464         datafiles:
465           service_names:
466             service_names: {get_param: ServiceNames}
467             sensu::subscriptions: {get_param: MonitoringSubscriptions}
468           service_configs:
469             map_replace:
470               - {get_param: ServiceConfigSettings}
471               - values: {get_attr: [NetIpMap, net_ip_map]}
472           controller_extraconfig:
473             map_merge:
474               - {get_param: controllerExtraConfig}
475               - {get_param: ControllerExtraConfig}
476           extraconfig: {get_param: ExtraConfig}
477           controller:
478             # data supplied directly to this deployment configuration, etc
479             bootstack_nodeid: {get_input: bootstack_nodeid}
480             # Pacemaker
481             enable_load_balancer: {get_input: enable_load_balancer}
482
483             # Misc
484             tripleo::haproxy::service_certificate: {get_attr: [NodeTLSData, deployed_ssl_certificate_path]}
485             tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
486             fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
487             fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
488             fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
489             fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
490             fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
491             fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
492
493   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
494   ControllerExtraConfigPre:
495     depends_on: ControllerDeployment
496     type: OS::TripleO::ControllerExtraConfigPre
497     properties:
498         server: {get_resource: Controller}
499
500   # Hook for site-specific additional pre-deployment config,
501   # applying to all nodes, e.g node registration/unregistration
502   NodeExtraConfig:
503     depends_on: [ControllerExtraConfigPre, NodeTLSData]
504     type: OS::TripleO::NodeExtraConfig
505     properties:
506         server: {get_resource: Controller}
507
508   UpdateConfig:
509     type: OS::TripleO::Tasks::PackageUpdate
510
511   UpdateDeployment:
512     type: OS::Heat::SoftwareDeployment
513     properties:
514       name: UpdateDeployment
515       config: {get_resource: UpdateConfig}
516       server: {get_resource: Controller}
517       input_values:
518         update_identifier:
519           get_param: UpdateIdentifier
520
521 outputs:
522   ip_address:
523     description: IP address of the server in the ctlplane network
524     value: {get_attr: [Controller, networks, ctlplane, 0]}
525   external_ip_address:
526     description: IP address of the server in the external network
527     value: {get_attr: [ExternalPort, ip_address]}
528   internal_api_ip_address:
529     description: IP address of the server in the internal_api network
530     value: {get_attr: [InternalApiPort, ip_address]}
531   storage_ip_address:
532     description: IP address of the server in the storage network
533     value: {get_attr: [StoragePort, ip_address]}
534   storage_mgmt_ip_address:
535     description: IP address of the server in the storage_mgmt network
536     value: {get_attr: [StorageMgmtPort, ip_address]}
537   tenant_ip_address:
538     description: IP address of the server in the tenant network
539     value: {get_attr: [TenantPort, ip_address]}
540   management_ip_address:
541     description: IP address of the server in the management network
542     value: {get_attr: [ManagementPort, ip_address]}
543   hostname:
544     description: Hostname of the server
545     value: {get_attr: [Controller, name]}
546   hostname_map:
547     description: Mapping of network names to hostnames
548     value:
549       external: {get_attr: [NetHostMap, value, external, fqdn]}
550       internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
551       storage: {get_attr: [NetHostMap, value, storage, fqdn]}
552       storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
553       tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
554       management: {get_attr: [NetHostMap, value, management, fqdn]}
555       ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
556   hosts_entry:
557     description: >
558       Server's IP address and hostname in the /etc/hosts format
559     value:
560       str_replace:
561         template: |
562           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
563           EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
564           INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
565           STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
566           STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
567           TENANTIP TENANTHOST.DOMAIN TENANTHOST
568           MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
569           CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
570         params:
571           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ControllerHostnameResolveNetwork]}]}
572           DOMAIN: {get_param: CloudDomain}
573           PRIMARYHOST: {get_attr: [Controller, name]}
574           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
575           EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
576           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
577           INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
578           STORAGEIP: {get_attr: [StoragePort, ip_address]}
579           STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
580           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
581           STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
582           TENANTIP: {get_attr: [TenantPort, ip_address]}
583           TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
584           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
585           MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
586           CTLPLANEIP: {get_attr: [Controller, networks, ctlplane, 0]}
587           CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
588   nova_server_resource:
589     description: Heat resource handle for the Nova compute server
590     value:
591       {get_resource: Controller}
592   tls_key_modulus_md5:
593     description: MD5 checksum of the TLS Key Modulus
594     value: {get_attr: [NodeTLSData, key_modulus_md5]}
595   tls_cert_modulus_md5:
596     description: MD5 checksum of the TLS Certificate Modulus
597     value: {get_attr: [NodeTLSData, cert_modulus_md5]}