Merge "Combine BootstrapNodeDeployment with AllNodesDeployment"
[apex-tripleo-heat-templates.git] / puppet / swift-storage.yaml
1 heat_template_version: 2015-04-30
2 description: 'OpenStack swift storage node configured by Puppet'
3 parameters:
4   Flavor:
5     description: Flavor for Swift storage nodes to request when deploying.
6     type: string
7     constraints:
8       - custom_constraint: nova.flavor
9   HashSuffix:
10     description: A random string to be used as a salt when hashing to determine mappings
11       in the ring.
12     hidden: true
13     type: string
14   Image:
15     default: overcloud-swift-storage
16     type: string
17   KeyName:
18     default: default
19     description: Name of an existing Nova key pair to enable SSH access to the instances
20     type: string
21   MinPartHours:
22     type: number
23     default: 1
24     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
25   PartPower:
26     default: 10
27     description: Partition Power to use when building Swift rings
28     type: number
29   RingBuild:
30     default: true
31     description: Whether to manage Swift rings or not
32     type: boolean
33   Replicas:
34     type: number
35     default: 3
36     description: How many replicas to use in the swift rings.
37   SnmpdReadonlyUserName:
38     default: ro_snmp_user
39     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
40     type: string
41   SnmpdReadonlyUserPassword:
42     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
43     type: string
44     hidden: true
45   EnablePackageInstall:
46     default: 'false'
47     description: Set to true to enable package installation via Puppet
48     type: boolean
49   UpdateIdentifier:
50     default: ''
51     type: string
52     description: >
53       Setting to a previously unused value during stack-update will trigger
54       package update on all nodes
55   ServiceNetMap:
56     default: {}
57     description: Mapping of service_name -> network name. Typically set
58                  via parameter_defaults in the resource registry.
59     type: json
60   Hostname:
61     type: string
62     default: '' # Defaults to Heat created hostname
63   HostnameMap:
64     type: json
65     default: {}
66     description: Optional mapping to override hostnames
67   ExtraConfig:
68     default: {}
69     description: |
70       Additional hiera configuration to inject into the cluster. Note
71       that ObjectStorageExtraConfig takes precedence over ExtraConfig.
72     type: json
73   ObjectStorageExtraConfig:
74     default: {}
75     description: |
76       Role specific additional hiera configuration to inject into the cluster.
77     type: json
78   SwiftStorageIPs:
79     default: {}
80     type: json
81   NetworkDeploymentActions:
82     type: comma_delimited_list
83     description: >
84       Heat action when to apply network configuration changes
85     default: ['CREATE']
86   SoftwareConfigTransport:
87     default: POLL_SERVER_CFN
88     description: |
89       How the server should receive the metadata required for software configuration.
90     type: string
91     constraints:
92     - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
93   CloudDomain:
94     default: ''
95     type: string
96     description: >
97       The DNS domain used for the hosts. This should match the dhcp_domain
98       configured in the Undercloud neutron. Defaults to localdomain.
99   ServerMetadata:
100     default: {}
101     description: >
102       Extra properties or metadata passed to Nova for the created nodes in
103       the overcloud. It's accessible via the Nova metadata API.
104     type: json
105   SchedulerHints:
106     type: json
107     description: Optional scheduler hints to pass to nova
108     default: {}
109   NodeIndex:
110     type: number
111     default: 0
112   ServiceConfigSettings:
113     type: json
114     default: {}
115   ConfigCommand:
116     type: string
117     description: Command which will be run whenever configuration data changes
118     default: os-refresh-config --timeout 14400
119
120 resources:
121
122   SwiftStorage:
123     type: OS::Nova::Server
124     metadata:
125       os-collect-config:
126         command: {get_param: ConfigCommand}
127     properties:
128       image: {get_param: Image}
129       flavor: {get_param: Flavor}
130       key_name: {get_param: KeyName}
131       networks:
132         - network: ctlplane
133       user_data_format: SOFTWARE_CONFIG
134       user_data: {get_resource: UserData}
135       name:
136         str_replace:
137             template: {get_param: Hostname}
138             params: {get_param: HostnameMap}
139       software_config_transport: {get_param: SoftwareConfigTransport}
140       metadata: {get_param: ServerMetadata}
141       scheduler_hints: {get_param: SchedulerHints}
142
143   # Combine the NodeAdminUserData and NodeUserData mime archives
144   UserData:
145     type: OS::Heat::MultipartMime
146     properties:
147       parts:
148       - config: {get_resource: NodeAdminUserData}
149         type: multipart
150       - config: {get_resource: NodeUserData}
151         type: multipart
152
153   # Creates the "heat-admin" user if configured via the environment
154   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
155   NodeAdminUserData:
156     type: OS::TripleO::NodeAdminUserData
157
158   # For optional operator additional userdata
159   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
160   NodeUserData:
161     type: OS::TripleO::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   NetworkDeployment:
240     type: OS::TripleO::SoftwareDeployment
241     properties:
242       name: NetworkDeployment
243       config: {get_resource: NetworkConfig}
244       server: {get_resource: SwiftStorage}
245       actions: {get_param: NetworkDeploymentActions}
246
247   SwiftStorageHieraConfig:
248     type: OS::Heat::StructuredConfig
249     properties:
250       group: os-apply-config
251       config:
252         hiera:
253           hierarchy:
254             - '"%{::uuid}"'
255             - heat_config_%{::deploy_config_name}
256             - object_extraconfig
257             - extraconfig
258             - service_configs
259             - object
260             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
261             - all_nodes # provided by allNodesConfig
262             - '"%{::osfamily}"'
263             - common
264             - network
265           merge_behavior: deeper
266           datafiles:
267             service_configs:
268               mapped_data: {get_param: ServiceConfigSettings}
269             common:
270               raw_data: {get_file: hieradata/common.yaml}
271             network:
272               mapped_data:
273                 net_ip_map: {get_attr: [NetIpMap, net_ip_map]}
274                 net_ip_subnet_map: {get_attr: [NetIpMap, net_ip_subnet_map]}
275                 net_ip_uri_map: {get_attr: [NetIpMap, net_ip_uri_map]}
276             object_extraconfig:
277               mapped_data: {get_param: ObjectStorageExtraConfig}
278             extraconfig:
279               mapped_data: {get_param: ExtraConfig}
280             object:
281               raw_data: {get_file: hieradata/object.yaml}
282               mapped_data: # data supplied directly to this deployment configuration, etc
283                 swift::swift_hash_path_suffix: { get_input: swift_hash_suffix }
284                 tripleo::ringbuilder::build_ring: { get_input: swift_ring_build }
285                 tripleo::ringbuilder::part_power: { get_input: swift_part_power }
286                 tripleo::ringbuilder::replicas: {get_input: swift_replicas }
287                 swift::storage::all::storage_local_net_ip: {get_input: swift_management_network}
288                 tripleo::ringbuilder::min_part_hours: { get_input: swift_min_part_hours }
289                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
290                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
291                 tripleo::packages::enable_install: {get_input: enable_package_install}
292                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
293
294
295   SwiftStorageHieraDeploy:
296     type: OS::Heat::StructuredDeployment
297     depends_on: NetworkDeployment
298     properties:
299       name: SwiftStorageHieraDeploy
300       server: {get_resource: SwiftStorage}
301       config: {get_resource: SwiftStorageHieraConfig}
302       input_values:
303         local_ip: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
304         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
305         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
306         swift_hash_suffix: {get_param: HashSuffix}
307         swift_min_part_hours: {get_param: MinPartHours}
308         swift_ring_build: {get_param: RingBuild}
309         swift_part_power: {get_param: PartPower}
310         swift_replicas: { get_param: Replicas}
311         enable_package_install: {get_param: EnablePackageInstall}
312         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
313         swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
314
315   # Resource for site-specific injection of root certificate
316   NodeTLSCAData:
317     depends_on: SwiftStorageHieraDeploy
318     type: OS::TripleO::NodeTLSCAData
319     properties:
320       server: {get_resource: SwiftStorage}
321
322   # Hook for site-specific additional pre-deployment config,
323   # applying to all nodes, e.g node registration/unregistration
324   NodeExtraConfig:
325     depends_on: NodeTLSCAData
326     type: OS::TripleO::NodeExtraConfig
327     properties:
328         server: {get_resource: SwiftStorage}
329
330   UpdateConfig:
331     type: OS::TripleO::Tasks::PackageUpdate
332
333   UpdateDeployment:
334     type: OS::Heat::SoftwareDeployment
335     properties:
336       config: {get_resource: UpdateConfig}
337       server: {get_resource: SwiftStorage}
338       input_values:
339         update_identifier:
340           get_param: UpdateIdentifier
341
342 outputs:
343   ip_address:
344     description: IP address of the server in the ctlplane network
345     value: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
346   hostname:
347     description: Hostname of the server
348     value: {get_attr: [SwiftStorage, name]}
349   hosts_entry:
350     value:
351       str_replace:
352         template: |
353           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
354           EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
355           INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
356           STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
357           STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
358           TENANTIP TENANTHOST.DOMAIN TENANTHOST
359           MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
360         params:
361           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ObjectStorageHostnameResolveNetwork]}]}
362           DOMAIN: {get_param: CloudDomain}
363           PRIMARYHOST: {get_attr: [SwiftStorage, name]}
364           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
365           EXTERNALHOST:
366             list_join:
367             - '.'
368             - - {get_attr: [SwiftStorage, name]}
369               - external
370           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
371           INTERNAL_APIHOST:
372             list_join:
373             - '.'
374             - - {get_attr: [SwiftStorage, name]}
375               - internalapi
376           STORAGEIP: {get_attr: [StoragePort, ip_address]}
377           STORAGEHOST:
378             list_join:
379             - '.'
380             - - {get_attr: [SwiftStorage, name]}
381               - storage
382           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
383           STORAGE_MGMTHOST:
384             list_join:
385             - '.'
386             - - {get_attr: [SwiftStorage, name]}
387               - storagemgmt
388           TENANTIP: {get_attr: [TenantPort, ip_address]}
389           TENANTHOST:
390             list_join:
391             - '.'
392             - - {get_attr: [SwiftStorage, name]}
393               - tenant
394           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
395           MANAGEMENTHOST:
396             list_join:
397             - '.'
398             - - {get_attr: [SwiftStorage, name]}
399               - management
400   nova_server_resource:
401     description: Heat resource handle for the swift storage server
402     value:
403       {get_resource: SwiftStorage}
404   swift_device:
405     description: Swift device formatted for swift-ring-builder
406     value:
407       str_replace:
408         template: 'r1z1-IP:%PORT%/d1'
409         params:
410           IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
411   external_ip_address:
412     description: IP address of the server in the external network
413     value: {get_attr: [ExternalPort, ip_address]}
414   internal_api_ip_address:
415     description: IP address of the server in the internal_api network
416     value: {get_attr: [InternalApiPort, ip_address]}
417   storage_ip_address:
418     description: IP address of the server in the storage network
419     value: {get_attr: [StoragePort, ip_address]}
420   storage_mgmt_ip_address:
421     description: IP address of the server in the storage_mgmt network
422     value: {get_attr: [StorageMgmtPort, ip_address]}
423   tenant_ip_address:
424     description: IP address of the server in the tenant network
425     value: {get_attr: [TenantPort, ip_address]}
426   management_ip_address:
427     description: IP address of the server in the management network
428     value: {get_attr: [ManagementPort, ip_address]}