1 heat_template_version: ocata
2 description: 'OpenStack {{role}} node configured by Puppet'
4 Overcloud{{role}}Flavor:
5 description: Flavor for the {{role}} node.
8 {% if disable_constraints is not defined %}
10 - custom_constraint: nova.flavor
14 default: overcloud-full
15 {% if disable_constraints is not defined %}
17 - custom_constraint: glance.image
20 default: 'REBUILD_PRESERVE_EPHEMERAL'
21 description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
24 description: Name of an existing Nova key pair to enable SSH access to the instances
27 {% if disable_constraints is not defined %}
29 - custom_constraint: nova.keypair
31 NeutronPublicInterface:
33 description: What interface to bridge onto br-ex for network nodes.
37 description: Mapping of service_name -> network name. Typically set
38 via parameter_defaults in the resource registry.
42 description: Mapping of service endpoint -> protocol. Typically set
43 via parameter_defaults in the resource registry.
49 Setting to a previously unused value during stack-update will trigger
50 package update on all nodes
53 default: '' # Defaults to Heat created hostname
57 description: Optional mapping to override hostnames
61 Additional hiera configuration to inject into the cluster. Note
62 that {{role}}ExtraConfig takes precedence over ExtraConfig.
67 Role specific additional hiera configuration to inject into the cluster.
72 NetworkDeploymentActions:
73 type: comma_delimited_list
75 Heat action when to apply network configuration changes
77 SoftwareConfigTransport:
78 default: POLL_SERVER_CFN
80 How the server should receive the metadata required for software configuration.
83 - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
85 default: 'localdomain'
88 The DNS domain used for the hosts. This should match the dhcp_domain
89 configured in the Undercloud neutron. Defaults to localdomain.
90 {{role}}ServerMetadata:
93 Extra properties or metadata passed to Nova for the created nodes in
94 the overcloud. It's accessible via the Nova metadata API. This option is
95 role-specific and is merged with the values given to the ServerMetadata
101 Extra properties or metadata passed to Nova for the created nodes in
102 the overcloud. It's accessible via the Nova metadata API. This applies to
103 all roles and is merged with a role-specific metadata parameter.
105 {{role}}SchedulerHints:
107 description: Optional scheduler hints to pass to nova
112 ServiceConfigSettings:
116 type: comma_delimited_list
118 MonitoringSubscriptions:
119 type: comma_delimited_list
121 ServiceMetadataSettings:
126 description: Command which will be run whenever configuration data changes
127 default: os-refresh-config --timeout 14400
132 type: comma_delimited_list
137 Command or script snippet to run on all overcloud nodes to
138 initialize the upgrade process. E.g. a repository switch.
140 UpgradeInitCommonCommand:
143 Common commands required by the upgrades process. This should not
144 normally be modified by the operator and is set and unset in the
145 major-upgrade-composable-steps.yaml and major-upgrade-converge.yaml
151 type: OS::TripleO::Server
154 command: {get_param: ConfigCommand}
156 image: {get_param: {{role}}Image}
157 image_update_policy: {get_param: ImageUpdatePolicy}
158 flavor: {get_param: Overcloud{{role}}Flavor}
159 key_name: {get_param: KeyName}
162 user_data_format: SOFTWARE_CONFIG
163 user_data: {get_resource: UserData}
166 template: {get_param: Hostname}
167 params: {get_param: HostnameMap}
168 software_config_transport: {get_param: SoftwareConfigTransport}
171 - {get_param: ServerMetadata}
172 - {get_param: {{role}}ServerMetadata}
173 - {get_param: ServiceMetadataSettings}
174 scheduler_hints: {get_param: {{role}}SchedulerHints}
176 # Combine the NodeAdminUserData and NodeUserData mime archives
178 type: OS::Heat::MultipartMime
181 - config: {get_resource: NodeAdminUserData}
183 - config: {get_resource: NodeUserData}
185 - config: {get_resource: RoleUserData}
188 # Creates the "heat-admin" user if configured via the environment
189 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
191 type: OS::TripleO::NodeAdminUserData
193 # For optional operator additional userdata
194 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
196 type: OS::TripleO::NodeUserData
198 # For optional operator role-specific userdata
199 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
201 type: OS::TripleO::{{role}}::NodeUserData
204 type: OS::TripleO::{{role}}::Ports::ExternalPort
206 ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
207 IPPool: {get_param: {{role}}IPs}
208 NodeIndex: {get_param: NodeIndex}
211 type: OS::TripleO::{{role}}::Ports::InternalApiPort
213 ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
214 IPPool: {get_param: {{role}}IPs}
215 NodeIndex: {get_param: NodeIndex}
218 type: OS::TripleO::{{role}}::Ports::StoragePort
220 ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
221 IPPool: {get_param: {{role}}IPs}
222 NodeIndex: {get_param: NodeIndex}
225 type: OS::TripleO::{{role}}::Ports::StorageMgmtPort
227 ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
228 IPPool: {get_param: {{role}}IPs}
229 NodeIndex: {get_param: NodeIndex}
232 type: OS::TripleO::{{role}}::Ports::TenantPort
234 ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
235 IPPool: {get_param: {{role}}IPs}
236 NodeIndex: {get_param: NodeIndex}
239 type: OS::TripleO::{{role}}::Ports::ManagementPort
241 ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
242 IPPool: {get_param: {{role}}IPs}
243 NodeIndex: {get_param: NodeIndex}
246 type: OS::TripleO::{{role}}::Net::SoftwareConfig
248 ControlPlaneIp: {get_attr: [{{role}}, networks, ctlplane, 0]}
249 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
250 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
251 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
252 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
253 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
254 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
257 type: OS::TripleO::Network::Ports::NetIpMap
259 ControlPlaneIp: {get_attr: [{{role}}, networks, ctlplane, 0]}
260 ExternalIp: {get_attr: [ExternalPort, ip_address]}
261 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
262 ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
263 InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
264 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
265 InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
266 StorageIp: {get_attr: [StoragePort, ip_address]}
267 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
268 StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
269 StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
270 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
271 StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
272 TenantIp: {get_attr: [TenantPort, ip_address]}
273 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
274 TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
275 ManagementIp: {get_attr: [ManagementPort, ip_address]}
276 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
277 ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
280 type: OS::Heat::Value
288 - - {get_attr: [{{role}}, name]}
290 - {get_param: CloudDomain}
294 - - {get_attr: [{{role}}, name]}
300 - - {get_attr: [{{role}}, name]}
302 - {get_param: CloudDomain}
306 - - {get_attr: [{{role}}, name]}
312 - - {get_attr: [{{role}}, name]}
314 - {get_param: CloudDomain}
318 - - {get_attr: [{{role}}, name]}
324 - - {get_attr: [{{role}}, name]}
326 - {get_param: CloudDomain}
330 - - {get_attr: [{{role}}, name]}
336 - - {get_attr: [{{role}}, name]}
338 - {get_param: CloudDomain}
342 - - {get_attr: [{{role}}, name]}
348 - - {get_attr: [{{role}}, name]}
350 - {get_param: CloudDomain}
354 - - {get_attr: [{{role}}, name]}
360 - - {get_attr: [{{role}}, name]}
362 - {get_param: CloudDomain}
366 - - {get_attr: [{{role}}, name]}
370 type: OS::TripleO::{{role}}::PreNetworkConfig
372 server: {get_resource: {{role}}}
375 type: OS::TripleO::SoftwareDeployment
376 depends_on: PreNetworkConfig
378 name: NetworkDeployment
379 config: {get_resource: NetworkConfig}
380 server: {get_resource: {{role}}}
381 actions: {get_param: NetworkDeploymentActions}
384 interface_name: {get_param: NeutronPublicInterface}
386 {{role}}UpgradeInitConfig:
387 type: OS::Heat::SoftwareConfig
393 - - "#!/bin/bash\n\n"
394 - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
395 - get_param: UpgradeInitCommand
396 - get_param: UpgradeInitCommonCommand
398 # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
399 # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
400 {{role}}UpgradeInitDeployment:
401 type: OS::Heat::SoftwareDeployment
402 depends_on: NetworkDeployment
404 name: {{role}}UpgradeInitDeployment
405 server: {get_resource: {{role}}}
406 config: {get_resource: {{role}}UpgradeInitConfig}
409 type: OS::Heat::StructuredDeployment
410 depends_on: {{role}}UpgradeInitDeployment
412 name: {{role}}Deployment
413 config: {get_resource: {{role}}Config}
414 server: {get_resource: {{role}}}
416 enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
419 type: OS::Heat::StructuredConfig
425 - heat_config_%{::deploy_config_name}
426 - {{role.lower()}}_extraconfig
431 - bootstrap_node # provided by allNodesConfig
432 - all_nodes # provided by allNodesConfig
433 - vip_data # provided by allNodesConfig
435 merge_behavior: deeper
438 service_names: {get_param: ServiceNames}
439 sensu::subscriptions: {get_param: MonitoringSubscriptions}
442 - {get_param: ServiceConfigSettings}
443 - values: {get_attr: [NetIpMap, net_ip_map]}
444 {{role.lower()}}_extraconfig: {get_param: {{role}}ExtraConfig}
445 extraconfig: {get_param: ExtraConfig}
447 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
448 tripleo::profile::base::logging::fluentd::fluentd_sources: {get_param: LoggingSources}
449 tripleo::profile::base::logging::fluentd::fluentd_groups: {get_param: LoggingGroups}
450 fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
451 fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
452 fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
453 fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
454 fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
455 fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
457 # Resource for site-specific injection of root certificate
459 depends_on: {{role}}Deployment
460 type: OS::TripleO::NodeTLSCAData
462 server: {get_resource: {{role}}}
464 # Hook for site-specific additional pre-deployment config, e.g extra hieradata
465 {{role}}ExtraConfigPre:
466 depends_on: {{role}}Deployment
467 type: OS::TripleO::{{role}}ExtraConfigPre
469 server: {get_resource: {{role}}}
471 # Hook for site-specific additional pre-deployment config,
472 # applying to all nodes, e.g node registration/unregistration
474 depends_on: [{{role}}ExtraConfigPre, NodeTLSCAData]
475 type: OS::TripleO::NodeExtraConfig
477 server: {get_resource: {{role}}}
480 type: OS::TripleO::Tasks::PackageUpdate
483 type: OS::Heat::SoftwareDeployment
484 depends_on: NetworkDeployment
486 name: UpdateDeployment
487 config: {get_resource: UpdateConfig}
488 server: {get_resource: {{role}}}
491 get_param: UpdateIdentifier
495 description: IP address of the server in the ctlplane network
496 value: {get_attr: [{{role}}, networks, ctlplane, 0]}
498 description: Hostname of the server
499 value: {get_attr: [{{role}}, name]}
501 description: Mapping of network names to hostnames
503 external: {get_attr: [NetHostMap, value, external, fqdn]}
504 internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
505 storage: {get_attr: [NetHostMap, value, storage, fqdn]}
506 storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
507 tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
508 management: {get_attr: [NetHostMap, value, management, fqdn]}
509 ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
514 PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
515 EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
516 INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
517 STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
518 STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
519 TENANTIP TENANTHOST.DOMAIN TENANTHOST
520 MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
521 CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
523 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, {{role}}HostnameResolveNetwork]}]}
524 DOMAIN: {get_param: CloudDomain}
525 PRIMARYHOST: {get_attr: [{{role}}, name]}
526 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
527 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
528 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
529 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
530 STORAGEIP: {get_attr: [StoragePort, ip_address]}
531 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
532 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
533 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
534 TENANTIP: {get_attr: [TenantPort, ip_address]}
535 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
536 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
537 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
538 CTLPLANEIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
539 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
540 nova_server_resource:
541 description: Heat resource handle for {{role}} server
543 {get_resource: {{role}}}
545 description: IP address of the server in the external network
546 value: {get_attr: [ExternalPort, ip_address]}
547 internal_api_ip_address:
548 description: IP address of the server in the internal_api network
549 value: {get_attr: [InternalApiPort, ip_address]}
551 description: IP address of the server in the storage network
552 value: {get_attr: [StoragePort, ip_address]}
553 storage_mgmt_ip_address:
554 description: IP address of the server in the storage_mgmt network
555 value: {get_attr: [StorageMgmtPort, ip_address]}
557 description: IP address of the server in the tenant network
558 value: {get_attr: [TenantPort, ip_address]}
559 management_ip_address:
560 description: IP address of the server in the management network
561 value: {get_attr: [ManagementPort, ip_address]}