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