Merge "Set rabbitmq's port and IP via the config file and not the env file"
[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
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::SwiftStorage::Ports::ExternalPort
158     properties:
159       ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
160       IPPool: {get_param: SwiftStorageIPs}
161       NodeIndex: {get_param: NodeIndex}
162
163   InternalApiPort:
164     type: OS::TripleO::SwiftStorage::Ports::InternalApiPort
165     properties:
166       ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
167       IPPool: {get_param: SwiftStorageIPs}
168       NodeIndex: {get_param: NodeIndex}
169
170   StoragePort:
171     type: OS::TripleO::SwiftStorage::Ports::StoragePort
172     properties:
173       ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
174       IPPool: {get_param: SwiftStorageIPs}
175       NodeIndex: {get_param: NodeIndex}
176
177   StorageMgmtPort:
178     type: OS::TripleO::SwiftStorage::Ports::StorageMgmtPort
179     properties:
180       ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
181       IPPool: {get_param: SwiftStorageIPs}
182       NodeIndex: {get_param: NodeIndex}
183
184   TenantPort:
185     type: OS::TripleO::SwiftStorage::Ports::TenantPort
186     properties:
187       ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
188       IPPool: {get_param: SwiftStorageIPs}
189       NodeIndex: {get_param: NodeIndex}
190
191   ManagementPort:
192     type: OS::TripleO::SwiftStorage::Ports::ManagementPort
193     properties:
194       ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
195       IPPool: {get_param: SwiftStorageIPs}
196       NodeIndex: {get_param: NodeIndex}
197
198   NetworkConfig:
199     type: OS::TripleO::ObjectStorage::Net::SoftwareConfig
200     properties:
201       ControlPlaneIp: {get_attr: [SwiftStorage, 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: [SwiftStorage, 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: [SwiftStorage, name]}
242               - external
243               - {get_param: CloudDomain}
244           short:
245             list_join:
246             - '.'
247             - - {get_attr: [SwiftStorage, name]}
248               - external
249         internal_api:
250           fqdn:
251             list_join:
252             - '.'
253             - - {get_attr: [SwiftStorage, name]}
254               - internalapi
255               - {get_param: CloudDomain}
256           short:
257             list_join:
258             - '.'
259             - - {get_attr: [SwiftStorage, name]}
260               - internalapi
261         storage:
262           fqdn:
263             list_join:
264             - '.'
265             - - {get_attr: [SwiftStorage, name]}
266               - storage
267               - {get_param: CloudDomain}
268           short:
269             list_join:
270             - '.'
271             - - {get_attr: [SwiftStorage, name]}
272               - storage
273         storage_mgmt:
274           fqdn:
275             list_join:
276             - '.'
277             - - {get_attr: [SwiftStorage, name]}
278               - storagemgmt
279               - {get_param: CloudDomain}
280           short:
281             list_join:
282             - '.'
283             - - {get_attr: [SwiftStorage, name]}
284               - storagemgmt
285         tenant:
286           fqdn:
287             list_join:
288             - '.'
289             - - {get_attr: [SwiftStorage, name]}
290               - tenant
291               - {get_param: CloudDomain}
292           short:
293             list_join:
294             - '.'
295             - - {get_attr: [SwiftStorage, name]}
296               - tenant
297         management:
298           fqdn:
299             list_join:
300             - '.'
301             - - {get_attr: [SwiftStorage, name]}
302               - management
303               - {get_param: CloudDomain}
304           short:
305             list_join:
306             - '.'
307             - - {get_attr: [SwiftStorage, name]}
308               - management
309         ctlplane:
310           fqdn:
311             list_join:
312             - '.'
313             - - {get_attr: [SwiftStorage, name]}
314               - ctlplane
315               - {get_param: CloudDomain}
316           short:
317             list_join:
318             - '.'
319             - - {get_attr: [SwiftStorage, 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: SwiftStorage}
328       actions: {get_param: NetworkDeploymentActions}
329
330   SwiftStorageHieraConfig:
331     type: OS::Heat::StructuredConfig
332     properties:
333       group: hiera
334       config:
335         hierarchy:
336           - '"%{::uuid}"'
337           - heat_config_%{::deploy_config_name}
338           - object_extraconfig
339           - extraconfig
340           - service_names
341           - service_configs
342           - object
343           - bootstrap_node # provided by allNodesConfig
344           - all_nodes # provided by allNodesConfig
345           - vip_data # provided by allNodesConfig
346           - '"%{::osfamily}"'
347         merge_behavior: deeper
348         datafiles:
349           service_names:
350             service_names: {get_param: ServiceNames}
351             sensu::subscriptions: {get_param: MonitoringSubscriptions}
352           service_configs:
353             map_replace:
354               - {get_param: ServiceConfigSettings}
355               - values: {get_attr: [NetIpMap, net_ip_map]}
356           object_extraconfig: {get_param: ObjectStorageExtraConfig}
357           extraconfig: {get_param: ExtraConfig}
358           object:
359             tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
360             fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
361             fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
362             fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
363             fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
364             fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
365             fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
366
367   SwiftStorageHieraDeploy:
368     type: OS::Heat::StructuredDeployment
369     depends_on: NetworkDeployment
370     properties:
371       name: SwiftStorageHieraDeploy
372       server: {get_resource: SwiftStorage}
373       config: {get_resource: SwiftStorageHieraConfig}
374       input_values:
375         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
376
377   # Resource for site-specific injection of root certificate
378   NodeTLSCAData:
379     depends_on: SwiftStorageHieraDeploy
380     type: OS::TripleO::NodeTLSCAData
381     properties:
382       server: {get_resource: SwiftStorage}
383
384   # Hook for site-specific additional pre-deployment config,
385   # applying to all nodes, e.g node registration/unregistration
386   NodeExtraConfig:
387     depends_on: NodeTLSCAData
388     type: OS::TripleO::NodeExtraConfig
389     properties:
390         server: {get_resource: SwiftStorage}
391
392   UpdateConfig:
393     type: OS::TripleO::Tasks::PackageUpdate
394
395   UpdateDeployment:
396     type: OS::Heat::SoftwareDeployment
397     properties:
398       config: {get_resource: UpdateConfig}
399       server: {get_resource: SwiftStorage}
400       input_values:
401         update_identifier:
402           get_param: UpdateIdentifier
403
404 outputs:
405   ip_address:
406     description: IP address of the server in the ctlplane network
407     value: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
408   hostname:
409     description: Hostname of the server
410     value: {get_attr: [SwiftStorage, name]}
411   hostname_map:
412     description: Mapping of network names to hostnames
413     value:
414       external: {get_attr: [NetHostMap, value, external, fqdn]}
415       internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
416       storage: {get_attr: [NetHostMap, value, storage, fqdn]}
417       storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
418       tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
419       management: {get_attr: [NetHostMap, value, management, fqdn]}
420       ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
421   hosts_entry:
422     value:
423       str_replace:
424         template: |
425           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
426           EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
427           INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
428           STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
429           STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
430           TENANTIP TENANTHOST.DOMAIN TENANTHOST
431           MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
432           CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
433         params:
434           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ObjectStorageHostnameResolveNetwork]}]}
435           DOMAIN: {get_param: CloudDomain}
436           PRIMARYHOST: {get_attr: [SwiftStorage, name]}
437           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
438           EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
439           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
440           INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
441           STORAGEIP: {get_attr: [StoragePort, ip_address]}
442           STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
443           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
444           STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
445           TENANTIP: {get_attr: [TenantPort, ip_address]}
446           TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
447           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
448           MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
449           CTLPLANEIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
450           CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
451   nova_server_resource:
452     description: Heat resource handle for the swift storage server
453     value:
454       {get_resource: SwiftStorage}
455   external_ip_address:
456     description: IP address of the server in the external network
457     value: {get_attr: [ExternalPort, ip_address]}
458   internal_api_ip_address:
459     description: IP address of the server in the internal_api network
460     value: {get_attr: [InternalApiPort, ip_address]}
461   storage_ip_address:
462     description: IP address of the server in the storage network
463     value: {get_attr: [StoragePort, ip_address]}
464   storage_mgmt_ip_address:
465     description: IP address of the server in the storage_mgmt network
466     value: {get_attr: [StorageMgmtPort, ip_address]}
467   tenant_ip_address:
468     description: IP address of the server in the tenant network
469     value: {get_attr: [TenantPort, ip_address]}
470   management_ip_address:
471     description: IP address of the server in the management network
472     value: {get_attr: [ManagementPort, ip_address]}