Merge "Remove CeilometerStoreEvents parameter"
[apex-tripleo-heat-templates.git] / puppet / blockstorage-role.yaml
1 heat_template_version: ocata
2 description: 'OpenStack cinder storage configured by Puppet'
3 parameters:
4   BlockStorageImage:
5     default: overcloud-full
6     type: string
7     constraints:
8       - custom_constraint: glance.image
9   ExtraConfig:
10     default: {}
11     description: |
12       Additional hiera configuration to inject into the cluster. Note
13       that BlockStorageExtraConfig takes precedence over ExtraConfig.
14     type: json
15   BlockStorageExtraConfig:
16     default: {}
17     description: |
18       Role specific additional hiera configuration to inject into the cluster.
19     type: json
20   BlockStorageIPs:
21     default: {}
22     type: json
23   OvercloudBlockStorageFlavor:
24     description: Flavor for block storage nodes to request when deploying.
25     type: string
26     default: baremetal
27     constraints:
28       - custom_constraint: nova.flavor
29   KeyName:
30     default: default
31     description: Name of an existing Nova key pair to enable SSH access to the instances
32     type: string
33   UpdateIdentifier:
34     default: ''
35     type: string
36     description: >
37       Setting to a previously unused value during stack-update will trigger
38       package update on all nodes
39   Hostname:
40     type: string
41     default: '' # Defaults to Heat created hostname
42   HostnameMap:
43     type: json
44     default: {}
45     description: Optional mapping to override hostnames
46   ServiceNetMap:
47     default: {}
48     description: Mapping of service_name -> network name. Typically set
49                  via parameter_defaults in the resource registry.
50     type: json
51   EndpointMap:
52     default: {}
53     description: Mapping of service endpoint -> protocol. Typically set
54                  via parameter_defaults in the resource registry.
55     type: json
56   NetworkDeploymentActions:
57     type: comma_delimited_list
58     description: >
59       Heat action when to apply network configuration changes
60     default: ['CREATE']
61   SoftwareConfigTransport:
62     default: POLL_SERVER_CFN
63     description: |
64       How the server should receive the metadata required for software configuration.
65     type: string
66     constraints:
67     - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
68   CloudDomain:
69     default: 'localdomain'
70     type: string
71     description: >
72       The DNS domain used for the hosts. This should match the dhcp_domain
73       configured in the Undercloud neutron. Defaults to localdomain.
74   BlockStorageServerMetadata:
75     default: {}
76     description: >
77       Extra properties or metadata passed to Nova for the created nodes in
78       the overcloud. It's accessible via the Nova metadata API. This option is
79       role-specific and is merged with the values given to the ServerMetadata
80       parameter.
81     type: json
82   ServerMetadata:
83     default: {}
84     description: >
85       Extra properties or metadata passed to Nova for the created nodes in
86       the overcloud. It's accessible via the Nova metadata API. This applies to
87       all roles and is merged with a role-specific metadata parameter.
88     type: json
89   BlockStorageSchedulerHints:
90     type: json
91     description: Optional scheduler hints to pass to nova
92     default: {}
93   NodeIndex:
94     type: number
95     default: 0
96   ServiceConfigSettings:
97     type: json
98     default: {}
99   ServiceNames:
100     type: comma_delimited_list
101     default: []
102   MonitoringSubscriptions:
103     type: comma_delimited_list
104     default: []
105   ServiceMetadataSettings:
106     type: json
107     default: {}
108   ConfigCommand:
109     type: string
110     description: Command which will be run whenever configuration data changes
111     default: os-refresh-config --timeout 14400
112   UpgradeInitCommand:
113     type: string
114     description: |
115       Command or script snippet to run on all overcloud nodes to
116       initialize the upgrade process. E.g. a repository switch.
117     default: ''
118
119 resources:
120   BlockStorage:
121     type: OS::TripleO::Server
122     metadata:
123       os-collect-config:
124         command: {get_param: ConfigCommand}
125     properties:
126       image:
127         {get_param: BlockStorageImage}
128       flavor: {get_param: OvercloudBlockStorageFlavor}
129       key_name: {get_param: KeyName}
130       networks:
131         - network: ctlplane
132       user_data_format: SOFTWARE_CONFIG
133       user_data: {get_resource: UserData}
134       name:
135         str_replace:
136             template: {get_param: Hostname}
137             params: {get_param: HostnameMap}
138       software_config_transport: {get_param: SoftwareConfigTransport}
139       metadata:
140         map_merge:
141           - {get_param: ServerMetadata}
142           - {get_param: BlockStorageServerMetadata}
143           - {get_param: ServiceMetadataSettings}
144       scheduler_hints: {get_param: BlockStorageSchedulerHints}
145
146   # Combine the NodeAdminUserData and NodeUserData mime archives
147   UserData:
148     type: OS::Heat::MultipartMime
149     properties:
150       parts:
151       - config: {get_resource: NodeAdminUserData}
152         type: multipart
153       - config: {get_resource: NodeUserData}
154         type: multipart
155       - config: {get_resource: RoleUserData}
156         type: multipart
157
158   # Creates the "heat-admin" user if configured via the environment
159   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
160   NodeAdminUserData:
161     type: OS::TripleO::NodeAdminUserData
162
163   # For optional operator additional userdata
164   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
165   NodeUserData:
166     type: OS::TripleO::NodeUserData
167
168   # For optional operator role-specific userdata
169   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
170   RoleUserData:
171     type: OS::TripleO::BlockStorage::NodeUserData
172
173   ExternalPort:
174     type: OS::TripleO::BlockStorage::Ports::ExternalPort
175     properties:
176       ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
177       IPPool: {get_param: BlockStorageIPs}
178       NodeIndex: {get_param: NodeIndex}
179
180   InternalApiPort:
181     type: OS::TripleO::BlockStorage::Ports::InternalApiPort
182     properties:
183       ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
184       IPPool: {get_param: BlockStorageIPs}
185       NodeIndex: {get_param: NodeIndex}
186
187   StoragePort:
188     type: OS::TripleO::BlockStorage::Ports::StoragePort
189     properties:
190       ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
191       IPPool: {get_param: BlockStorageIPs}
192       NodeIndex: {get_param: NodeIndex}
193
194   StorageMgmtPort:
195     type: OS::TripleO::BlockStorage::Ports::StorageMgmtPort
196     properties:
197       ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
198       IPPool: {get_param: BlockStorageIPs}
199       NodeIndex: {get_param: NodeIndex}
200
201   TenantPort:
202     type: OS::TripleO::BlockStorage::Ports::TenantPort
203     properties:
204       ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
205       IPPool: {get_param: BlockStorageIPs}
206       NodeIndex: {get_param: NodeIndex}
207
208   ManagementPort:
209     type: OS::TripleO::BlockStorage::Ports::ManagementPort
210     properties:
211       ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
212       IPPool: {get_param: BlockStorageIPs}
213       NodeIndex: {get_param: NodeIndex}
214
215   NetworkConfig:
216     type: OS::TripleO::BlockStorage::Net::SoftwareConfig
217     properties:
218       ControlPlaneIp: {get_attr: [BlockStorage, networks, ctlplane, 0]}
219       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
220       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
221       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
222       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
223       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
224       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
225
226   NetIpMap:
227     type: OS::TripleO::Network::Ports::NetIpMap
228     properties:
229       ControlPlaneIp: {get_attr: [BlockStorage, networks, ctlplane, 0]}
230       ExternalIp: {get_attr: [ExternalPort, ip_address]}
231       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
232       ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
233       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
234       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
235       InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
236       StorageIp: {get_attr: [StoragePort, ip_address]}
237       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
238       StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
239       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
240       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
241       StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
242       TenantIp: {get_attr: [TenantPort, ip_address]}
243       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
244       TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
245       ManagementIp: {get_attr: [ManagementPort, ip_address]}
246       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
247       ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
248
249   NetHostMap:
250     type: OS::Heat::Value
251     properties:
252       type: json
253       value:
254         external:
255           fqdn:
256             list_join:
257             - '.'
258             - - {get_attr: [BlockStorage, name]}
259               - external
260               - {get_param: CloudDomain}
261           short:
262             list_join:
263             - '.'
264             - - {get_attr: [BlockStorage, name]}
265               - external
266         internal_api:
267           fqdn:
268             list_join:
269             - '.'
270             - - {get_attr: [BlockStorage, name]}
271               - internalapi
272               - {get_param: CloudDomain}
273           short:
274             list_join:
275             - '.'
276             - - {get_attr: [BlockStorage, name]}
277               - internalapi
278         storage:
279           fqdn:
280             list_join:
281             - '.'
282             - - {get_attr: [BlockStorage, name]}
283               - storage
284               - {get_param: CloudDomain}
285           short:
286             list_join:
287             - '.'
288             - - {get_attr: [BlockStorage, name]}
289               - storage
290         storage_mgmt:
291           fqdn:
292             list_join:
293             - '.'
294             - - {get_attr: [BlockStorage, name]}
295               - storagemgmt
296               - {get_param: CloudDomain}
297           short:
298             list_join:
299             - '.'
300             - - {get_attr: [BlockStorage, name]}
301               - storagemgmt
302         tenant:
303           fqdn:
304             list_join:
305             - '.'
306             - - {get_attr: [BlockStorage, name]}
307               - tenant
308               - {get_param: CloudDomain}
309           short:
310             list_join:
311             - '.'
312             - - {get_attr: [BlockStorage, name]}
313               - tenant
314         management:
315           fqdn:
316             list_join:
317             - '.'
318             - - {get_attr: [BlockStorage, name]}
319               - management
320               - {get_param: CloudDomain}
321           short:
322             list_join:
323             - '.'
324             - - {get_attr: [BlockStorage, name]}
325               - management
326         ctlplane:
327           fqdn:
328             list_join:
329             - '.'
330             - - {get_attr: [BlockStorage, name]}
331               - ctlplane
332               - {get_param: CloudDomain}
333           short:
334             list_join:
335             - '.'
336             - - {get_attr: [BlockStorage, name]}
337               - ctlplane
338
339   PreNetworkConfig:
340     type: OS::TripleO::BlockStorage::PreNetworkConfig
341     properties:
342       server: {get_resource: BlockStorage}
343
344   NetworkDeployment:
345     type: OS::TripleO::SoftwareDeployment
346     depends_on: PreNetworkConfig
347     properties:
348       name: NetworkDeployment
349       config: {get_resource: NetworkConfig}
350       server: {get_resource: BlockStorage}
351       actions: {get_param: NetworkDeploymentActions}
352
353   BlockStorageUpgradeInitConfig:
354     type: OS::Heat::SoftwareConfig
355     properties:
356       group: script
357       config:
358         list_join:
359         - ''
360         - - "#!/bin/bash\n\n"
361           - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
362           - get_param: UpgradeInitCommand
363
364   # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
365   # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
366   BlockStorageUpgradeInitDeployment:
367     type: OS::Heat::SoftwareDeployment
368     depends_on: NetworkDeployment
369     properties:
370       name: BlockStorageUpgradeInitDeployment
371       server: {get_resource: BlockStorage}
372       config: {get_resource: BlockStorageUpgradeInitConfig}
373
374   BlockStorageDeployment:
375     type: OS::Heat::StructuredDeployment
376     depends_on: BlockStorageUpgradeInitDeployment
377     properties:
378       name: BlockStorageDeployment
379       server: {get_resource: BlockStorage}
380       config: {get_resource: BlockStorageConfig}
381       input_values:
382         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
383
384   # Map heat metadata into hiera datafiles
385   BlockStorageConfig:
386     type: OS::Heat::StructuredConfig
387     properties:
388       group: hiera
389       config:
390         hierarchy:
391           - '"%{::uuid}"'
392           - heat_config_%{::deploy_config_name}
393           - volume_extraconfig
394           - extraconfig
395           - service_names
396           - service_configs
397           - volume
398           - bootstrap_node # provided by allNodesConfig
399           - all_nodes # provided by allNodesConfig
400           - vip_data # provided by allNodesConfig
401           - '"%{::osfamily}"'
402         merge_behavior: deeper
403         datafiles:
404           service_names:
405             service_names: {get_param: ServiceNames}
406             sensu::subscriptions: {get_param: MonitoringSubscriptions}
407           service_configs:
408             map_replace:
409               - {get_param: ServiceConfigSettings}
410               - values: {get_attr: [NetIpMap, net_ip_map]}
411           volume_extraconfig: {get_param: BlockStorageExtraConfig}
412           extraconfig: {get_param: ExtraConfig}
413           volume:
414             tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
415             fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
416             fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
417             fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
418             fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
419             fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
420             fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
421
422   # Resource for site-specific injection of root certificate
423   NodeTLSCAData:
424     depends_on: BlockStorageDeployment
425     type: OS::TripleO::NodeTLSCAData
426     properties:
427       server: {get_resource: BlockStorage}
428
429   # Hook for site-specific additional pre-deployment config,
430   # applying to all nodes, e.g node registration/unregistration
431   NodeExtraConfig:
432     depends_on: NodeTLSCAData
433     type: OS::TripleO::NodeExtraConfig
434     properties:
435         server: {get_resource: BlockStorage}
436
437   UpdateConfig:
438     type: OS::TripleO::Tasks::PackageUpdate
439
440   UpdateDeployment:
441     type: OS::Heat::SoftwareDeployment
442     properties:
443       name: UpdateDeployment
444       config: {get_resource: UpdateConfig}
445       server: {get_resource: BlockStorage}
446       input_values:
447         update_identifier:
448           get_param: UpdateIdentifier
449
450 outputs:
451   ip_address:
452     description: IP address of the server in the ctlplane network
453     value: {get_attr: [BlockStorage, networks, ctlplane, 0]}
454   hostname:
455     description: Hostname of the server
456     value: {get_attr: [BlockStorage, name]}
457   hostname_map:
458     description: Mapping of network names to hostnames
459     value:
460       external: {get_attr: [NetHostMap, value, external, fqdn]}
461       internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
462       storage: {get_attr: [NetHostMap, value, storage, fqdn]}
463       storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
464       tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
465       management: {get_attr: [NetHostMap, value, management, fqdn]}
466       ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
467   hosts_entry:
468     value:
469       str_replace:
470         template: |
471           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
472           EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
473           INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
474           STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
475           STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
476           TENANTIP TENANTHOST.DOMAIN TENANTHOST
477           MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
478           CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
479         params:
480           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, BlockStorageHostnameResolveNetwork]}]}
481           DOMAIN: {get_param: CloudDomain}
482           PRIMARYHOST: {get_attr: [BlockStorage, name]}
483           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
484           EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
485           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
486           INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
487           STORAGEIP: {get_attr: [StoragePort, ip_address]}
488           STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
489           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
490           STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
491           TENANTIP: {get_attr: [TenantPort, ip_address]}
492           TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
493           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
494           MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
495           CTLPLANEIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
496           CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
497   nova_server_resource:
498     description: Heat resource handle for the block storage server
499     value:
500       {get_resource: BlockStorage}
501   external_ip_address:
502     description: IP address of the server in the external network
503     value: {get_attr: [ExternalPort, ip_address]}
504   internal_api_ip_address:
505     description: IP address of the server in the internal_api network
506     value: {get_attr: [InternalApiPort, ip_address]}
507   storage_ip_address:
508     description: IP address of the server in the storage network
509     value: {get_attr: [StoragePort, ip_address]}
510   storage_mgmt_ip_address:
511     description: IP address of the server in the storage_mgmt network
512     value: {get_attr: [StorageMgmtPort, ip_address]}
513   tenant_ip_address:
514     description: IP address of the server in the tenant network
515     value: {get_attr: [TenantPort, ip_address]}
516   management_ip_address:
517     description: IP address of the server in the management network
518     value: {get_attr: [ManagementPort, ip_address]}