Add SoftwareConfigTransport for switching transports
[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     default: unset
11     description: A random string to be used as a salt when hashing to determine mappings
12       in the ring.
13     hidden: true
14     type: string
15   Image:
16     default: overcloud-swift-storage
17     type: string
18   KeyName:
19     default: default
20     description: Name of an existing EC2 KeyPair to enable SSH access to the instances
21     type: string
22   MountCheck:
23     default: 'false'
24     description: Value of mount_check in Swift account/container/object -server.conf
25     type: boolean
26   MinPartHours:
27     type: number
28     default: 1
29     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
30   PartPower:
31     default: 10
32     description: Partition Power to use when building Swift rings
33     type: number
34   Replicas:
35     type: number
36     default: 3
37     description: How many replicas to use in the swift rings.
38   SnmpdReadonlyUserName:
39     default: ro_snmp_user
40     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
41     type: string
42   SnmpdReadonlyUserPassword:
43     default: unset
44     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
45     type: string
46     hidden: true
47   NtpServer:
48     default: ''
49     description: Comma-separated list of ntp servers
50     type: comma_delimited_list
51   EnablePackageInstall:
52     default: 'false'
53     description: Set to true to enable package installation via Puppet
54     type: boolean
55   UpdateIdentifier:
56     default: ''
57     type: string
58     description: >
59       Setting to a previously unused value during stack-update will trigger
60       package update on all nodes
61   ServiceNetMap:
62     default: {}
63     description: Mapping of service_name -> network name. Typically set
64                  via parameter_defaults in the resource registry.
65     type: json
66   Hostname:
67     type: string
68     default: '' # Defaults to Heat created hostname
69   ExtraConfig:
70     default: {}
71     description: |
72       Additional hiera configuration to inject into the cluster. Note
73       that ObjectStorageExtraConfig takes precedence over ExtraConfig.
74     type: json
75   ObjectStorageExtraConfig:
76     default: {}
77     description: |
78       Role specific additional hiera configuration to inject into the cluster.
79     type: json
80   NetworkDeploymentActions:
81     type: comma_delimited_list
82     description: >
83       Heat action when to apply network configuration changes
84     default: ['CREATE']
85   SoftwareConfigTransport:
86     default: POLL_SERVER_CFN
87     description: |
88       How the server should receive the metadata required for software configuration.
89     type: string
90     constraints:
91     - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
92   CloudDomain:
93     default: ''
94     type: string
95     description: >
96       The DNS domain used for the hosts. This should match the dhcp_domain
97       configured in the Undercloud neutron. Defaults to localdomain.
98   ServerMetadata:
99     default: {}
100     description: >
101       Extra properties or metadata passed to Nova for the created nodes in
102       the overcloud. It's accessible via the Nova metadata API.
103     type: json
104
105
106 resources:
107
108   SwiftStorage:
109     type: OS::Nova::Server
110     properties:
111       image: {get_param: Image}
112       flavor: {get_param: Flavor}
113       key_name: {get_param: KeyName}
114       networks:
115         - network: ctlplane
116       user_data_format: SOFTWARE_CONFIG
117       user_data: {get_resource: UserData}
118       name: {get_param: Hostname}
119       software_config_transport: {get_param: SoftwareConfigTransport}
120       metadata: {get_param: ServerMetadata}
121
122   # Combine the NodeAdminUserData and NodeUserData mime archives
123   UserData:
124     type: OS::Heat::MultipartMime
125     properties:
126       parts:
127       - config: {get_resource: NodeAdminUserData}
128         type: multipart
129       - config: {get_resource: NodeUserData}
130         type: multipart
131
132   # Creates the "heat-admin" user if configured via the environment
133   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
134   NodeAdminUserData:
135     type: OS::TripleO::NodeAdminUserData
136
137   # For optional operator additional userdata
138   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
139   NodeUserData:
140     type: OS::TripleO::NodeUserData
141
142   InternalApiPort:
143     type: OS::TripleO::SwiftStorage::Ports::InternalApiPort
144     properties:
145       ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
146
147   StoragePort:
148     type: OS::TripleO::SwiftStorage::Ports::StoragePort
149     properties:
150       ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
151
152   StorageMgmtPort:
153     type: OS::TripleO::SwiftStorage::Ports::StorageMgmtPort
154     properties:
155       ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
156
157   NetworkConfig:
158     type: OS::TripleO::ObjectStorage::Net::SoftwareConfig
159     properties:
160       ControlPlaneIp: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
161       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
162       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
163       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
164
165   NetIpMap:
166     type: OS::TripleO::Network::Ports::NetIpMap
167     properties:
168       ControlPlaneIp: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
169       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
170       StorageIp: {get_attr: [StoragePort, ip_address]}
171       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
172
173   NetworkDeployment:
174     type: OS::TripleO::SoftwareDeployment
175     properties:
176       config: {get_resource: NetworkConfig}
177       server: {get_resource: SwiftStorage}
178       actions: {get_param: NetworkDeploymentActions}
179
180   SwiftStorageHieraConfig:
181     type: OS::Heat::StructuredConfig
182     properties:
183       group: os-apply-config
184       config:
185         hiera:
186           hierarchy:
187             - '"%{::uuid}"'
188             - heat_config_%{::deploy_config_name}
189             - object_extraconfig
190             - extraconfig
191             - object
192             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
193             - all_nodes # provided by allNodesConfig
194             - '"%{::osfamily}"'
195             - common
196           datafiles:
197             common:
198               raw_data: {get_file: hieradata/common.yaml}
199             object_extraconfig:
200               mapped_data: {get_param: ObjectStorageExtraConfig}
201             extraconfig:
202               mapped_data: {get_param: ExtraConfig}
203             object:
204               raw_data: {get_file: hieradata/object.yaml}
205               mapped_data: # data supplied directly to this deployment configuration, etc
206                 swift::swift_hash_suffix: { get_input: swift_hash_suffix }
207                 tripleo::ringbuilder::part_power: { get_input: swift_part_power }
208                 tripleo::ringbuilder::replicas: {get_input: swift_replicas }
209                 # Swift
210                 swift::storage::all::storage_local_net_ip: {get_input: swift_management_network}
211                 swift_mount_check: {get_input: swift_mount_check }
212                 tripleo::ringbuilder::min_part_hours: { get_input: swift_min_part_hours }
213                 ntp::servers: {get_input: ntp_servers}
214                 # NOTE(dprince): build_ring support is currently not wired in.
215                 # See: https://review.openstack.org/#/c/109225/
216                 tripleo::ringbuilder::build_ring: True
217                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
218                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
219                 tripleo::packages::enable_install: {get_input: enable_package_install}
220                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
221
222
223   SwiftStorageHieraDeploy:
224     type: OS::Heat::StructuredDeployment
225     depends_on: NetworkDeployment
226     properties:
227       server: {get_resource: SwiftStorage}
228       config: {get_resource: SwiftStorageHieraConfig}
229       input_values:
230         local_ip: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
231         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
232         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
233         swift_hash_suffix: {get_param: HashSuffix}
234         swift_mount_check: {get_param: MountCheck}
235         swift_min_part_hours: {get_param: MinPartHours}
236         swift_part_power: {get_param: PartPower}
237         swift_replicas: { get_param: Replicas}
238         ntp_servers: {get_param: NtpServer}
239         enable_package_install: {get_param: EnablePackageInstall}
240         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
241         swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
242
243   # Resource for site-specific injection of root certificate
244   NodeTLSCAData:
245     depends_on: SwiftStorageHieraDeploy
246     type: OS::TripleO::NodeTLSCAData
247     properties:
248       server: {get_resource: SwiftStorage}
249
250   # Hook for site-specific additional pre-deployment config,
251   # applying to all nodes, e.g node registration/unregistration
252   NodeExtraConfig:
253     depends_on: NodeTLSCAData
254     type: OS::TripleO::NodeExtraConfig
255     properties:
256         server: {get_resource: SwiftStorage}
257
258   UpdateConfig:
259     type: OS::TripleO::Tasks::PackageUpdate
260
261   UpdateDeployment:
262     type: OS::Heat::SoftwareDeployment
263     properties:
264       config: {get_resource: UpdateConfig}
265       server: {get_resource: SwiftStorage}
266       input_values:
267         update_identifier:
268           get_param: UpdateIdentifier
269
270 outputs:
271   hosts_entry:
272     value:
273       str_replace:
274         template: "IP HOST.DOMAIN HOST"
275         params:
276           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ObjectStorageHostnameResolveNetwork]}]}
277           DOMAIN: {get_param: CloudDomain}
278           HOST: {get_attr: [SwiftStorage, name]}
279   nova_server_resource:
280     description: Heat resource handle for the swift storage server
281     value:
282       {get_resource: SwiftStorage}
283   swift_device:
284     description: Swift device formatted for swift-ring-builder
285     value:
286       str_replace:
287         template: 'r1z1-IP:%PORT%/d1'
288         params:
289           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
290   internal_api_ip_address:
291     description: IP address of the server in the internal_api network
292     value: {get_attr: [InternalApiPort, ip_address]}
293   storage_ip_address:
294     description: IP address of the server in the storage network
295     value: {get_attr: [StoragePort, ip_address]}
296   storage_mgmt_ip_address:
297     description: IP address of the server in the storage_mgmt network
298     value: {get_attr: [StorageMgmtPort, ip_address]}
299   config_identifier:
300     description: identifier which changes if the node configuration may need re-applying
301     value:
302       list_join:
303         - ','
304         - - {get_attr: [SwiftStorageHieraDeploy, deploy_stdout]}
305           - {get_attr: [NodeTLSCAData, deploy_stdout]}
306           - {get_param: UpdateIdentifier}