Update the template_version alias for all the templates to pike.
[apex-tripleo-heat-templates.git] / puppet / objectstorage-role.yaml
1 heat_template_version: pike
2 description: 'OpenStack swift storage node configured by Puppet'
3 parameters:
4   OvercloudSwiftStorageFlavor:
5     description: Flavor for Swift storage nodes to request when deploying.
6     default: baremetal
7     type: string
8     constraints:
9       - custom_constraint: nova.flavor
10   SwiftStorageImage:
11     default: overcloud-full
12     type: string
13     constraints:
14       - custom_constraint: glance.image
15   KeyName:
16     default: default
17     description: Name of an existing Nova key pair to enable SSH access to the instances
18     type: string
19   UpdateIdentifier:
20     default: ''
21     type: string
22     description: >
23       Setting to a previously unused value during stack-update will trigger
24       package update on all nodes
25   ServiceNetMap:
26     default: {}
27     description: Mapping of service_name -> network name. Typically set
28                  via parameter_defaults in the resource registry.
29     type: json
30   EndpointMap:
31     default: {}
32     description: Mapping of service endpoint -> protocol. Typically set
33                  via parameter_defaults in the resource registry.
34     type: json
35   Hostname:
36     type: string
37     default: '' # Defaults to Heat created hostname
38   HostnameMap:
39     type: json
40     default: {}
41     description: Optional mapping to override hostnames
42   ExtraConfig:
43     default: {}
44     description: |
45       Additional hiera configuration to inject into the cluster. Note
46       that ObjectStorageExtraConfig takes precedence over ExtraConfig.
47     type: json
48   ObjectStorageExtraConfig:
49     default: {}
50     description: |
51       Role specific additional hiera configuration to inject into the cluster.
52     type: json
53   SwiftStorageIPs:
54     default: {}
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   SwiftStorageServerMetadata:
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   ObjectStorageSchedulerHints:
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   ConfigCollectSplay:
113     type: number
114     default: 30
115     description: |
116       Maximum amount of time to possibly to delay configuation collection
117       polling. Defaults to 30 seconds. Set to 0 to disable it which will cause
118       the configuration collection to occur as soon as the collection process
119       starts.  This setting is used to prevent the configuration collection
120       processes from polling all at the exact same time.
121   UpgradeInitCommand:
122     type: string
123     description: |
124       Command or script snippet to run on all overcloud nodes to
125       initialize the upgrade process. E.g. a repository switch.
126     default: ''
127   UpgradeInitCommonCommand:
128     type: string
129     description: |
130       Common commands required by the upgrades process. This should not
131       normally be modified by the operator and is set and unset in the
132       major-upgrade-composable-steps.yaml and major-upgrade-converge.yaml
133       environment files.
134     default: ''
135
136 resources:
137
138   SwiftStorage:
139     type: OS::TripleO::ObjectStorageServer
140     metadata:
141       os-collect-config:
142         command: {get_param: ConfigCommand}
143         splay: {get_param: ConfigCollectSplay}
144     properties:
145       image: {get_param: SwiftStorageImage}
146       flavor: {get_param: OvercloudSwiftStorageFlavor}
147       key_name: {get_param: KeyName}
148       networks:
149         - network: ctlplane
150       user_data_format: SOFTWARE_CONFIG
151       user_data: {get_resource: UserData}
152       name:
153         str_replace:
154             template: {get_param: Hostname}
155             params: {get_param: HostnameMap}
156       software_config_transport: {get_param: SoftwareConfigTransport}
157       metadata:
158         map_merge:
159           - {get_param: ServerMetadata}
160           - {get_param: SwiftStorageServerMetadata}
161           - {get_param: ServiceMetadataSettings}
162       scheduler_hints: {get_param: ObjectStorageSchedulerHints}
163
164   # Combine the NodeAdminUserData and NodeUserData mime archives
165   UserData:
166     type: OS::Heat::MultipartMime
167     properties:
168       parts:
169       - config: {get_resource: NodeAdminUserData}
170         type: multipart
171       - config: {get_resource: NodeUserData}
172         type: multipart
173       - config: {get_resource: RoleUserData}
174         type: multipart
175
176   # Creates the "heat-admin" user if configured via the environment
177   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
178   NodeAdminUserData:
179     type: OS::TripleO::NodeAdminUserData
180
181   # For optional operator additional userdata
182   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
183   NodeUserData:
184     type: OS::TripleO::NodeUserData
185
186   # For optional operator role-specific userdata
187   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
188   RoleUserData:
189     type: OS::TripleO::ObjectStorage::NodeUserData
190
191   ExternalPort:
192     type: OS::TripleO::SwiftStorage::Ports::ExternalPort
193     properties:
194       ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
195       IPPool: {get_param: SwiftStorageIPs}
196       NodeIndex: {get_param: NodeIndex}
197
198   InternalApiPort:
199     type: OS::TripleO::SwiftStorage::Ports::InternalApiPort
200     properties:
201       ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
202       IPPool: {get_param: SwiftStorageIPs}
203       NodeIndex: {get_param: NodeIndex}
204
205   StoragePort:
206     type: OS::TripleO::SwiftStorage::Ports::StoragePort
207     properties:
208       ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
209       IPPool: {get_param: SwiftStorageIPs}
210       NodeIndex: {get_param: NodeIndex}
211
212   StorageMgmtPort:
213     type: OS::TripleO::SwiftStorage::Ports::StorageMgmtPort
214     properties:
215       ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
216       IPPool: {get_param: SwiftStorageIPs}
217       NodeIndex: {get_param: NodeIndex}
218
219   TenantPort:
220     type: OS::TripleO::SwiftStorage::Ports::TenantPort
221     properties:
222       ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
223       IPPool: {get_param: SwiftStorageIPs}
224       NodeIndex: {get_param: NodeIndex}
225
226   ManagementPort:
227     type: OS::TripleO::SwiftStorage::Ports::ManagementPort
228     properties:
229       ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
230       IPPool: {get_param: SwiftStorageIPs}
231       NodeIndex: {get_param: NodeIndex}
232
233   NetworkConfig:
234     type: OS::TripleO::ObjectStorage::Net::SoftwareConfig
235     properties:
236       ControlPlaneIp: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
237       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
238       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
239       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
240       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
241       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
242       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
243
244   NetIpMap:
245     type: OS::TripleO::Network::Ports::NetIpMap
246     properties:
247       ControlPlaneIp: {get_attr: [SwiftStorage, 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: [SwiftStorage, name]}
277               - external
278               - {get_param: CloudDomain}
279           short:
280             list_join:
281             - '.'
282             - - {get_attr: [SwiftStorage, name]}
283               - external
284         internal_api:
285           fqdn:
286             list_join:
287             - '.'
288             - - {get_attr: [SwiftStorage, name]}
289               - internalapi
290               - {get_param: CloudDomain}
291           short:
292             list_join:
293             - '.'
294             - - {get_attr: [SwiftStorage, name]}
295               - internalapi
296         storage:
297           fqdn:
298             list_join:
299             - '.'
300             - - {get_attr: [SwiftStorage, name]}
301               - storage
302               - {get_param: CloudDomain}
303           short:
304             list_join:
305             - '.'
306             - - {get_attr: [SwiftStorage, name]}
307               - storage
308         storage_mgmt:
309           fqdn:
310             list_join:
311             - '.'
312             - - {get_attr: [SwiftStorage, name]}
313               - storagemgmt
314               - {get_param: CloudDomain}
315           short:
316             list_join:
317             - '.'
318             - - {get_attr: [SwiftStorage, name]}
319               - storagemgmt
320         tenant:
321           fqdn:
322             list_join:
323             - '.'
324             - - {get_attr: [SwiftStorage, name]}
325               - tenant
326               - {get_param: CloudDomain}
327           short:
328             list_join:
329             - '.'
330             - - {get_attr: [SwiftStorage, name]}
331               - tenant
332         management:
333           fqdn:
334             list_join:
335             - '.'
336             - - {get_attr: [SwiftStorage, name]}
337               - management
338               - {get_param: CloudDomain}
339           short:
340             list_join:
341             - '.'
342             - - {get_attr: [SwiftStorage, name]}
343               - management
344         ctlplane:
345           fqdn:
346             list_join:
347             - '.'
348             - - {get_attr: [SwiftStorage, name]}
349               - ctlplane
350               - {get_param: CloudDomain}
351           short:
352             list_join:
353             - '.'
354             - - {get_attr: [SwiftStorage, name]}
355               - ctlplane
356
357   PreNetworkConfig:
358     type: OS::TripleO::ObjectStorage::PreNetworkConfig
359     properties:
360       server: {get_resource: SwiftStorage}
361
362   NetworkDeployment:
363     type: OS::TripleO::SoftwareDeployment
364     depends_on: PreNetworkConfig
365     properties:
366       name: NetworkDeployment
367       config: {get_resource: NetworkConfig}
368       server: {get_resource: SwiftStorage}
369       actions: {get_param: NetworkDeploymentActions}
370
371   SwiftStorageUpgradeInitConfig:
372     type: OS::Heat::SoftwareConfig
373     properties:
374       group: script
375       config:
376         list_join:
377         - ''
378         - - "#!/bin/bash\n\n"
379           - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
380           - get_param: UpgradeInitCommand
381           - get_param: UpgradeInitCommonCommand
382
383   # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
384   # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
385   SwiftStorageUpgradeInitDeployment:
386     type: OS::Heat::SoftwareDeployment
387     depends_on: NetworkDeployment
388     properties:
389       name: SwiftStorageUpgradeInitDeployment
390       server: {get_resource: SwiftStorage}
391       config: {get_resource: SwiftStorageUpgradeInitConfig}
392
393   SwiftStorageHieraConfig:
394     type: OS::Heat::StructuredConfig
395     properties:
396       group: hiera
397       config:
398         hierarchy:
399           - '"%{::uuid}"'
400           - heat_config_%{::deploy_config_name}
401           - object_extraconfig
402           - extraconfig
403           - service_names
404           - service_configs
405           - object
406           - bootstrap_node # provided by allNodesConfig
407           - all_nodes # provided by allNodesConfig
408           - vip_data # provided by allNodesConfig
409           - '"%{::osfamily}"'
410         merge_behavior: deeper
411         datafiles:
412           service_names:
413             service_names: {get_param: ServiceNames}
414             sensu::subscriptions: {get_param: MonitoringSubscriptions}
415           service_configs:
416             map_replace:
417               - {get_param: ServiceConfigSettings}
418               - values: {get_attr: [NetIpMap, net_ip_map]}
419           object_extraconfig: {get_param: ObjectStorageExtraConfig}
420           extraconfig: {get_param: ExtraConfig}
421           object:
422             tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
423             fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
424             fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
425             fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
426             fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
427             fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
428             fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
429
430   SwiftStorageHieraDeploy:
431     type: OS::Heat::StructuredDeployment
432     depends_on: SwiftStorageUpgradeInitDeployment
433     properties:
434       name: SwiftStorageHieraDeploy
435       server: {get_resource: SwiftStorage}
436       config: {get_resource: SwiftStorageHieraConfig}
437       input_values:
438         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
439
440   # Resource for site-specific injection of root certificate
441   NodeTLSCAData:
442     depends_on: SwiftStorageHieraDeploy
443     type: OS::TripleO::NodeTLSCAData
444     properties:
445       server: {get_resource: SwiftStorage}
446
447   # Hook for site-specific additional pre-deployment config,
448   # applying to all nodes, e.g node registration/unregistration
449   NodeExtraConfig:
450     depends_on: NodeTLSCAData
451     type: OS::TripleO::NodeExtraConfig
452     properties:
453         server: {get_resource: SwiftStorage}
454
455   UpdateConfig:
456     type: OS::TripleO::Tasks::PackageUpdate
457
458   UpdateDeployment:
459     type: OS::Heat::SoftwareDeployment
460     depends_on: NetworkDeployment
461     properties:
462       config: {get_resource: UpdateConfig}
463       server: {get_resource: SwiftStorage}
464       input_values:
465         update_identifier:
466           get_param: UpdateIdentifier
467
468   SshHostPubKey:
469     type: OS::TripleO::Ssh::HostPubKey
470     depends_on: SwiftStorageHieraDeploy
471     properties:
472         server: {get_resource: SwiftStorage}
473
474 outputs:
475   ip_address:
476     description: IP address of the server in the ctlplane network
477     value: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
478   hostname:
479     description: Hostname of the server
480     value: {get_attr: [SwiftStorage, name]}
481   hostname_map:
482     description: Mapping of network names to hostnames
483     value:
484       external: {get_attr: [NetHostMap, value, external, fqdn]}
485       internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
486       storage: {get_attr: [NetHostMap, value, storage, fqdn]}
487       storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
488       tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
489       management: {get_attr: [NetHostMap, value, management, fqdn]}
490       ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
491   hosts_entry:
492     value:
493       str_replace:
494         template: |
495           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
496           EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
497           INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
498           STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
499           STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
500           TENANTIP TENANTHOST.DOMAIN TENANTHOST
501           MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
502           CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
503         params:
504           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ObjectStorageHostnameResolveNetwork]}]}
505           DOMAIN: {get_param: CloudDomain}
506           PRIMARYHOST: {get_attr: [SwiftStorage, name]}
507           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
508           EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
509           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
510           INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
511           STORAGEIP: {get_attr: [StoragePort, ip_address]}
512           STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
513           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
514           STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
515           TENANTIP: {get_attr: [TenantPort, ip_address]}
516           TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
517           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
518           MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
519           CTLPLANEIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
520           CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
521   known_hosts_entry:
522     description: Entry for ssh known hosts
523     value:
524       str_replace:
525         template: "PRIMARYIP,PRIMARYHOST.DOMAIN,PRIMARYHOST,\
526 EXTERNALIP,EXTERNALHOST.DOMAIN,EXTERNALHOST,\
527 INTERNAL_APIIP,INTERNAL_APIHOST.DOMAIN,INTERNAL_APIHOST,\
528 STORAGEIP,STORAGEHOST.DOMAIN,STORAGEHOST,\
529 STORAGE_MGMTIP,STORAGE_MGMTHOST.DOMAIN,STORAGE_MGMTHOST,\
530 TENANTIP,TENANTHOST.DOMAIN,TENANTHOST,\
531 MANAGEMENTIP,MANAGEMENTHOST.DOMAIN,MANAGEMENTHOST,\
532 CTLPLANEIP,CTLPLANEHOST.DOMAIN,CTLPLANEHOST HOSTSSHPUBKEY"
533         params:
534           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ObjectStorageHostnameResolveNetwork]}]}
535           DOMAIN: {get_param: CloudDomain}
536           PRIMARYHOST: {get_attr: [SwiftStorage, name]}
537           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
538           EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
539           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
540           INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
541           STORAGEIP: {get_attr: [StoragePort, ip_address]}
542           STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
543           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
544           STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
545           TENANTIP: {get_attr: [TenantPort, ip_address]}
546           TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
547           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
548           MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
549           CTLPLANEIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
550           CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
551           HOSTSSHPUBKEY: {get_attr: [SshHostPubKey, ecdsa]}
552   nova_server_resource:
553     description: Heat resource handle for the swift storage server
554     value:
555       {get_resource: SwiftStorage}
556   external_ip_address:
557     description: IP address of the server in the external network
558     value: {get_attr: [ExternalPort, ip_address]}
559   internal_api_ip_address:
560     description: IP address of the server in the internal_api network
561     value: {get_attr: [InternalApiPort, ip_address]}
562   storage_ip_address:
563     description: IP address of the server in the storage network
564     value: {get_attr: [StoragePort, ip_address]}
565   storage_mgmt_ip_address:
566     description: IP address of the server in the storage_mgmt network
567     value: {get_attr: [StorageMgmtPort, ip_address]}
568   tenant_ip_address:
569     description: IP address of the server in the tenant network
570     value: {get_attr: [TenantPort, ip_address]}
571   management_ip_address:
572     description: IP address of the server in the management network
573     value: {get_attr: [ManagementPort, ip_address]}