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