Merge "Rename opendaylight service to opendaylight_api"
[apex-tripleo-heat-templates.git] / puppet / swift-storage.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   Hostname:
31     type: string
32     default: '' # Defaults to Heat created hostname
33   HostnameMap:
34     type: json
35     default: {}
36     description: Optional mapping to override hostnames
37   ExtraConfig:
38     default: {}
39     description: |
40       Additional hiera configuration to inject into the cluster. Note
41       that ObjectStorageExtraConfig takes precedence over ExtraConfig.
42     type: json
43   ObjectStorageExtraConfig:
44     default: {}
45     description: |
46       Role specific additional hiera configuration to inject into the cluster.
47     type: json
48   SwiftStorageIPs:
49     default: {}
50     type: json
51   NetworkDeploymentActions:
52     type: comma_delimited_list
53     description: >
54       Heat action when to apply network configuration changes
55     default: ['CREATE']
56   SoftwareConfigTransport:
57     default: POLL_SERVER_CFN
58     description: |
59       How the server should receive the metadata required for software configuration.
60     type: string
61     constraints:
62     - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
63   CloudDomain:
64     type: string
65     description: >
66       The DNS domain used for the hosts. This should match the dhcp_domain
67       configured in the Undercloud neutron. Defaults to localdomain.
68   ServerMetadata:
69     default: {}
70     description: >
71       Extra properties or metadata passed to Nova for the created nodes in
72       the overcloud. It's accessible via the Nova metadata API.
73     type: json
74   ObjectStorageSchedulerHints:
75     type: json
76     description: Optional scheduler hints to pass to nova
77     default: {}
78   NodeIndex:
79     type: number
80     default: 0
81   ServiceConfigSettings:
82     type: json
83     default: {}
84   ServiceNames:
85     type: comma_delimited_list
86     default: []
87   ConfigCommand:
88     type: string
89     description: Command which will be run whenever configuration data changes
90     default: os-refresh-config --timeout 14400
91   SwiftRawDisks:
92     default: {}
93     description: 'A hash of additional raw devices to use as Swift backend (eg. {sdb: {}})'
94     type: json
95
96 resources:
97
98   SwiftStorage:
99     type: OS::Nova::Server
100     metadata:
101       os-collect-config:
102         command: {get_param: ConfigCommand}
103     properties:
104       image: {get_param: SwiftStorageImage}
105       flavor: {get_param: OvercloudSwiftStorageFlavor}
106       key_name: {get_param: KeyName}
107       networks:
108         - network: ctlplane
109       user_data_format: SOFTWARE_CONFIG
110       user_data: {get_resource: UserData}
111       name:
112         str_replace:
113             template: {get_param: Hostname}
114             params: {get_param: HostnameMap}
115       software_config_transport: {get_param: SoftwareConfigTransport}
116       metadata: {get_param: ServerMetadata}
117       scheduler_hints: {get_param: ObjectStorageSchedulerHints}
118
119   # Combine the NodeAdminUserData and NodeUserData mime archives
120   UserData:
121     type: OS::Heat::MultipartMime
122     properties:
123       parts:
124       - config: {get_resource: NodeAdminUserData}
125         type: multipart
126       - config: {get_resource: NodeUserData}
127         type: multipart
128
129   # Creates the "heat-admin" user if configured via the environment
130   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
131   NodeAdminUserData:
132     type: OS::TripleO::NodeAdminUserData
133
134   # For optional operator additional userdata
135   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
136   NodeUserData:
137     type: OS::TripleO::NodeUserData
138
139   ExternalPort:
140     type: OS::TripleO::SwiftStorage::Ports::ExternalPort
141     properties:
142       ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
143       IPPool: {get_param: SwiftStorageIPs}
144       NodeIndex: {get_param: NodeIndex}
145
146   InternalApiPort:
147     type: OS::TripleO::SwiftStorage::Ports::InternalApiPort
148     properties:
149       ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
150       IPPool: {get_param: SwiftStorageIPs}
151       NodeIndex: {get_param: NodeIndex}
152
153   StoragePort:
154     type: OS::TripleO::SwiftStorage::Ports::StoragePort
155     properties:
156       ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
157       IPPool: {get_param: SwiftStorageIPs}
158       NodeIndex: {get_param: NodeIndex}
159
160   StorageMgmtPort:
161     type: OS::TripleO::SwiftStorage::Ports::StorageMgmtPort
162     properties:
163       ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
164       IPPool: {get_param: SwiftStorageIPs}
165       NodeIndex: {get_param: NodeIndex}
166
167   TenantPort:
168     type: OS::TripleO::SwiftStorage::Ports::TenantPort
169     properties:
170       ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
171       IPPool: {get_param: SwiftStorageIPs}
172       NodeIndex: {get_param: NodeIndex}
173
174   ManagementPort:
175     type: OS::TripleO::SwiftStorage::Ports::ManagementPort
176     properties:
177       ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
178       IPPool: {get_param: SwiftStorageIPs}
179       NodeIndex: {get_param: NodeIndex}
180
181   NetworkConfig:
182     type: OS::TripleO::ObjectStorage::Net::SoftwareConfig
183     properties:
184       ControlPlaneIp: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
185       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
186       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
187       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
188       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
189       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
190       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
191
192   NetIpMap:
193     type: OS::TripleO::Network::Ports::NetIpMap
194     properties:
195       ControlPlaneIp: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
196       ExternalIp: {get_attr: [ExternalPort, ip_address]}
197       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
198       ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
199       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
200       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
201       InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
202       StorageIp: {get_attr: [StoragePort, ip_address]}
203       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
204       StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
205       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
206       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
207       StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
208       TenantIp: {get_attr: [TenantPort, ip_address]}
209       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
210       TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
211       ManagementIp: {get_attr: [ManagementPort, ip_address]}
212       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
213       ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
214
215   NetworkDeployment:
216     type: OS::TripleO::SoftwareDeployment
217     properties:
218       name: NetworkDeployment
219       config: {get_resource: NetworkConfig}
220       server: {get_resource: SwiftStorage}
221       actions: {get_param: NetworkDeploymentActions}
222
223   SwiftStorageHieraConfig:
224     type: OS::Heat::StructuredConfig
225     properties:
226       group: os-apply-config
227       config:
228         hiera:
229           hierarchy:
230             - '"%{::uuid}"'
231             - heat_config_%{::deploy_config_name}
232             - object_extraconfig
233             - extraconfig
234             - service_names
235             - service_configs
236             - object
237             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
238             - all_nodes # provided by allNodesConfig
239             - '"%{::osfamily}"'
240           merge_behavior: deeper
241           datafiles:
242             service_names:
243               mapped_data:
244                 service_names: {get_param: ServiceNames}
245             service_configs:
246               mapped_data:
247                 map_replace:
248                   - {get_param: ServiceConfigSettings}
249                   - values: {get_attr: [NetIpMap, net_ip_map]}
250             object_extraconfig:
251               mapped_data: {get_param: ObjectStorageExtraConfig}
252             extraconfig:
253               mapped_data: {get_param: ExtraConfig}
254             object:
255               mapped_data: # data supplied directly to this deployment configuration, etc
256                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
257
258
259   SwiftStorageHieraDeploy:
260     type: OS::Heat::StructuredDeployment
261     depends_on: NetworkDeployment
262     properties:
263       name: SwiftStorageHieraDeploy
264       server: {get_resource: SwiftStorage}
265       config: {get_resource: SwiftStorageHieraConfig}
266       input_values:
267         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
268
269   # Resource for site-specific injection of root certificate
270   NodeTLSCAData:
271     depends_on: SwiftStorageHieraDeploy
272     type: OS::TripleO::NodeTLSCAData
273     properties:
274       server: {get_resource: SwiftStorage}
275
276   # Hook for site-specific additional pre-deployment config,
277   # applying to all nodes, e.g node registration/unregistration
278   NodeExtraConfig:
279     depends_on: NodeTLSCAData
280     type: OS::TripleO::NodeExtraConfig
281     properties:
282         server: {get_resource: SwiftStorage}
283
284   UpdateConfig:
285     type: OS::TripleO::Tasks::PackageUpdate
286
287   UpdateDeployment:
288     type: OS::Heat::SoftwareDeployment
289     properties:
290       config: {get_resource: UpdateConfig}
291       server: {get_resource: SwiftStorage}
292       input_values:
293         update_identifier:
294           get_param: UpdateIdentifier
295
296 outputs:
297   ip_address:
298     description: IP address of the server in the ctlplane network
299     value: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
300   hostname:
301     description: Hostname of the server
302     value: {get_attr: [SwiftStorage, name]}
303   hosts_entry:
304     value:
305       str_replace:
306         template: |
307           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
308           EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
309           INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
310           STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
311           STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
312           TENANTIP TENANTHOST.DOMAIN TENANTHOST
313           MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
314         params:
315           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ObjectStorageHostnameResolveNetwork]}]}
316           DOMAIN: {get_param: CloudDomain}
317           PRIMARYHOST: {get_attr: [SwiftStorage, name]}
318           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
319           EXTERNALHOST:
320             list_join:
321             - '.'
322             - - {get_attr: [SwiftStorage, name]}
323               - external
324           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
325           INTERNAL_APIHOST:
326             list_join:
327             - '.'
328             - - {get_attr: [SwiftStorage, name]}
329               - internalapi
330           STORAGEIP: {get_attr: [StoragePort, ip_address]}
331           STORAGEHOST:
332             list_join:
333             - '.'
334             - - {get_attr: [SwiftStorage, name]}
335               - storage
336           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
337           STORAGE_MGMTHOST:
338             list_join:
339             - '.'
340             - - {get_attr: [SwiftStorage, name]}
341               - storagemgmt
342           TENANTIP: {get_attr: [TenantPort, ip_address]}
343           TENANTHOST:
344             list_join:
345             - '.'
346             - - {get_attr: [SwiftStorage, name]}
347               - tenant
348           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
349           MANAGEMENTHOST:
350             list_join:
351             - '.'
352             - - {get_attr: [SwiftStorage, name]}
353               - management
354   nova_server_resource:
355     description: Heat resource handle for the swift storage server
356     value:
357       {get_resource: SwiftStorage}
358   swift_device:
359     description: Swift device formatted for swift-ring-builder
360     value:
361       str_replace:
362         template:
363           list_join:
364             - ','
365             - ['r1z1-IP:%PORT%/d1']
366             - repeat:
367                 template: 'r1z1-IP:%PORT%/DEVICE'
368                 for_each:
369                   DEVICE: {get_param: SwiftRawDisks}
370         params:
371           IP:
372             get_attr:
373               - NetIpMap
374               - net_ip_map
375               - str_replace:
376                   template: "NETWORK_uri"
377                   params:
378                     NETWORK: {get_param: [ServiceNetMap, SwiftMgmtNetwork]}
379   external_ip_address:
380     description: IP address of the server in the external network
381     value: {get_attr: [ExternalPort, ip_address]}
382   internal_api_ip_address:
383     description: IP address of the server in the internal_api network
384     value: {get_attr: [InternalApiPort, ip_address]}
385   storage_ip_address:
386     description: IP address of the server in the storage network
387     value: {get_attr: [StoragePort, ip_address]}
388   storage_mgmt_ip_address:
389     description: IP address of the server in the storage_mgmt network
390     value: {get_attr: [StorageMgmtPort, ip_address]}
391   tenant_ip_address:
392     description: IP address of the server in the tenant network
393     value: {get_attr: [TenantPort, ip_address]}
394   management_ip_address:
395     description: IP address of the server in the management network
396     value: {get_attr: [ManagementPort, ip_address]}