Merge "Switch mistral to use authtoken configuration"
[apex-tripleo-heat-templates.git] / puppet / blockstorage-role.yaml
1 heat_template_version: 2016-10-14
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   ConfigCommand:
106     type: string
107     description: Command which will be run whenever configuration data changes
108     default: os-refresh-config --timeout 14400
109
110 resources:
111   BlockStorage:
112     type: OS::TripleO::Server
113     metadata:
114       os-collect-config:
115         command: {get_param: ConfigCommand}
116     properties:
117       image:
118         {get_param: BlockStorageImage}
119       flavor: {get_param: OvercloudBlockStorageFlavor}
120       key_name: {get_param: KeyName}
121       networks:
122         - network: ctlplane
123       user_data_format: SOFTWARE_CONFIG
124       user_data: {get_resource: UserData}
125       name:
126         str_replace:
127             template: {get_param: Hostname}
128             params: {get_param: HostnameMap}
129       software_config_transport: {get_param: SoftwareConfigTransport}
130       metadata:
131         map_merge:
132           - {get_param: ServerMetadata}
133           - {get_param: BlockStorageServerMetadata}
134       scheduler_hints: {get_param: BlockStorageSchedulerHints}
135
136   # Combine the NodeAdminUserData and NodeUserData mime archives
137   UserData:
138     type: OS::Heat::MultipartMime
139     properties:
140       parts:
141       - config: {get_resource: NodeAdminUserData}
142         type: multipart
143       - config: {get_resource: NodeUserData}
144         type: multipart
145
146   # Creates the "heat-admin" user if configured via the environment
147   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
148   NodeAdminUserData:
149     type: OS::TripleO::NodeAdminUserData
150
151   # For optional operator additional userdata
152   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
153   NodeUserData:
154     type: OS::TripleO::NodeUserData
155
156   ExternalPort:
157     type: OS::TripleO::BlockStorage::Ports::ExternalPort
158     properties:
159       ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
160       IPPool: {get_param: BlockStorageIPs}
161       NodeIndex: {get_param: NodeIndex}
162
163   InternalApiPort:
164     type: OS::TripleO::BlockStorage::Ports::InternalApiPort
165     properties:
166       ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
167       IPPool: {get_param: BlockStorageIPs}
168       NodeIndex: {get_param: NodeIndex}
169
170   StoragePort:
171     type: OS::TripleO::BlockStorage::Ports::StoragePort
172     properties:
173       ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
174       IPPool: {get_param: BlockStorageIPs}
175       NodeIndex: {get_param: NodeIndex}
176
177   StorageMgmtPort:
178     type: OS::TripleO::BlockStorage::Ports::StorageMgmtPort
179     properties:
180       ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
181       IPPool: {get_param: BlockStorageIPs}
182       NodeIndex: {get_param: NodeIndex}
183
184   TenantPort:
185     type: OS::TripleO::BlockStorage::Ports::TenantPort
186     properties:
187       ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
188       IPPool: {get_param: BlockStorageIPs}
189       NodeIndex: {get_param: NodeIndex}
190
191   ManagementPort:
192     type: OS::TripleO::BlockStorage::Ports::ManagementPort
193     properties:
194       ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
195       IPPool: {get_param: BlockStorageIPs}
196       NodeIndex: {get_param: NodeIndex}
197
198   NetworkConfig:
199     type: OS::TripleO::BlockStorage::Net::SoftwareConfig
200     properties:
201       ControlPlaneIp: {get_attr: [BlockStorage, networks, ctlplane, 0]}
202       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
203       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
204       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
205       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
206       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
207       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
208
209   NetIpMap:
210     type: OS::TripleO::Network::Ports::NetIpMap
211     properties:
212       ControlPlaneIp: {get_attr: [BlockStorage, networks, ctlplane, 0]}
213       ExternalIp: {get_attr: [ExternalPort, ip_address]}
214       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
215       ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
216       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
217       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
218       InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
219       StorageIp: {get_attr: [StoragePort, ip_address]}
220       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
221       StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
222       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
223       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
224       StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
225       TenantIp: {get_attr: [TenantPort, ip_address]}
226       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
227       TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
228       ManagementIp: {get_attr: [ManagementPort, ip_address]}
229       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
230       ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
231
232   NetHostMap:
233     type: OS::Heat::Value
234     properties:
235       type: json
236       value:
237         external:
238           fqdn:
239             list_join:
240             - '.'
241             - - {get_attr: [BlockStorage, name]}
242               - external
243               - {get_param: CloudDomain}
244           short:
245             list_join:
246             - '.'
247             - - {get_attr: [BlockStorage, name]}
248               - external
249         internal_api:
250           fqdn:
251             list_join:
252             - '.'
253             - - {get_attr: [BlockStorage, name]}
254               - internalapi
255               - {get_param: CloudDomain}
256           short:
257             list_join:
258             - '.'
259             - - {get_attr: [BlockStorage, name]}
260               - internalapi
261         storage:
262           fqdn:
263             list_join:
264             - '.'
265             - - {get_attr: [BlockStorage, name]}
266               - storage
267               - {get_param: CloudDomain}
268           short:
269             list_join:
270             - '.'
271             - - {get_attr: [BlockStorage, name]}
272               - storage
273         storage_mgmt:
274           fqdn:
275             list_join:
276             - '.'
277             - - {get_attr: [BlockStorage, name]}
278               - storagemgmt
279               - {get_param: CloudDomain}
280           short:
281             list_join:
282             - '.'
283             - - {get_attr: [BlockStorage, name]}
284               - storagemgmt
285         tenant:
286           fqdn:
287             list_join:
288             - '.'
289             - - {get_attr: [BlockStorage, name]}
290               - tenant
291               - {get_param: CloudDomain}
292           short:
293             list_join:
294             - '.'
295             - - {get_attr: [BlockStorage, name]}
296               - tenant
297         management:
298           fqdn:
299             list_join:
300             - '.'
301             - - {get_attr: [BlockStorage, name]}
302               - management
303               - {get_param: CloudDomain}
304           short:
305             list_join:
306             - '.'
307             - - {get_attr: [BlockStorage, name]}
308               - management
309         ctlplane:
310           fqdn:
311             list_join:
312             - '.'
313             - - {get_attr: [BlockStorage, name]}
314               - ctlplane
315               - {get_param: CloudDomain}
316           short:
317             list_join:
318             - '.'
319             - - {get_attr: [BlockStorage, name]}
320               - ctlplane
321
322   NetworkDeployment:
323     type: OS::TripleO::SoftwareDeployment
324     properties:
325       name: NetworkDeployment
326       config: {get_resource: NetworkConfig}
327       server: {get_resource: BlockStorage}
328       actions: {get_param: NetworkDeploymentActions}
329
330   BlockStorageDeployment:
331     type: OS::Heat::StructuredDeployment
332     depends_on: NetworkDeployment
333     properties:
334       name: BlockStorageDeployment
335       server: {get_resource: BlockStorage}
336       config: {get_resource: BlockStorageConfig}
337       input_values:
338         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
339
340   # Map heat metadata into hiera datafiles
341   BlockStorageConfig:
342     type: OS::Heat::StructuredConfig
343     properties:
344       group: hiera
345       config:
346         hierarchy:
347           - '"%{::uuid}"'
348           - heat_config_%{::deploy_config_name}
349           - volume_extraconfig
350           - extraconfig
351           - service_names
352           - service_configs
353           - volume
354           - bootstrap_node # provided by allNodesConfig
355           - all_nodes # provided by allNodesConfig
356           - vip_data # provided by allNodesConfig
357           - '"%{::osfamily}"'
358         merge_behavior: deeper
359         datafiles:
360           service_names:
361             service_names: {get_param: ServiceNames}
362             sensu::subscriptions: {get_param: MonitoringSubscriptions}
363           service_configs:
364             map_replace:
365               - {get_param: ServiceConfigSettings}
366               - values: {get_attr: [NetIpMap, net_ip_map]}
367           volume_extraconfig: {get_param: BlockStorageExtraConfig}
368           extraconfig: {get_param: ExtraConfig}
369           volume:
370             tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
371             fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
372             fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
373             fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
374             fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
375             fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
376             fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
377
378   # Resource for site-specific injection of root certificate
379   NodeTLSCAData:
380     depends_on: BlockStorageDeployment
381     type: OS::TripleO::NodeTLSCAData
382     properties:
383       server: {get_resource: BlockStorage}
384
385   # Hook for site-specific additional pre-deployment config,
386   # applying to all nodes, e.g node registration/unregistration
387   NodeExtraConfig:
388     depends_on: NodeTLSCAData
389     type: OS::TripleO::NodeExtraConfig
390     properties:
391         server: {get_resource: BlockStorage}
392
393   UpdateConfig:
394     type: OS::TripleO::Tasks::PackageUpdate
395
396   UpdateDeployment:
397     type: OS::Heat::SoftwareDeployment
398     properties:
399       name: UpdateDeployment
400       config: {get_resource: UpdateConfig}
401       server: {get_resource: BlockStorage}
402       input_values:
403         update_identifier:
404           get_param: UpdateIdentifier
405
406 outputs:
407   ip_address:
408     description: IP address of the server in the ctlplane network
409     value: {get_attr: [BlockStorage, networks, ctlplane, 0]}
410   hostname:
411     description: Hostname of the server
412     value: {get_attr: [BlockStorage, name]}
413   hostname_map:
414     description: Mapping of network names to hostnames
415     value:
416       external: {get_attr: [NetHostMap, value, external, fqdn]}
417       internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
418       storage: {get_attr: [NetHostMap, value, storage, fqdn]}
419       storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
420       tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
421       management: {get_attr: [NetHostMap, value, management, fqdn]}
422       ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
423   hosts_entry:
424     value:
425       str_replace:
426         template: |
427           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
428           EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
429           INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
430           STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
431           STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
432           TENANTIP TENANTHOST.DOMAIN TENANTHOST
433           MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
434           CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
435         params:
436           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, BlockStorageHostnameResolveNetwork]}]}
437           DOMAIN: {get_param: CloudDomain}
438           PRIMARYHOST: {get_attr: [BlockStorage, name]}
439           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
440           EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
441           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
442           INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
443           STORAGEIP: {get_attr: [StoragePort, ip_address]}
444           STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
445           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
446           STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
447           TENANTIP: {get_attr: [TenantPort, ip_address]}
448           TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
449           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
450           MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
451           CTLPLANEIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
452           CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
453   nova_server_resource:
454     description: Heat resource handle for the block storage server
455     value:
456       {get_resource: BlockStorage}
457   external_ip_address:
458     description: IP address of the server in the external network
459     value: {get_attr: [ExternalPort, ip_address]}
460   internal_api_ip_address:
461     description: IP address of the server in the internal_api network
462     value: {get_attr: [InternalApiPort, ip_address]}
463   storage_ip_address:
464     description: IP address of the server in the storage network
465     value: {get_attr: [StoragePort, ip_address]}
466   storage_mgmt_ip_address:
467     description: IP address of the server in the storage_mgmt network
468     value: {get_attr: [StorageMgmtPort, ip_address]}
469   tenant_ip_address:
470     description: IP address of the server in the tenant network
471     value: {get_attr: [TenantPort, ip_address]}
472   management_ip_address:
473     description: IP address of the server in the management network
474     value: {get_attr: [ManagementPort, ip_address]}