1 heat_template_version: 2016-10-14
4 OpenStack controller node configured by Puppet.
8 description: The password for the aodh services.
11 controllerExtraConfig:
14 Deprecated. Use ControllerExtraConfig via parameter_defaults instead.
16 ControllerExtraConfig:
19 Controller specific hiera configuration data to inject into the cluster.
24 A network mapped list of IPs to assign to Controllers in the following form:
26 "internal_api": ["a.b.c.d", "e.f.g.h"],
32 description: Enable IPv6 in Corosync
36 description: Set to True to enable debugging on all services.
40 description: Whether to enable fencing in Pacemaker or not.
44 description: Whether to deploy a LoadBalancer on the Controller
49 Additional hieradata to inject into the cluster, note that
50 ControllerExtraConfig takes precedence over ExtraConfig.
55 Pacemaker fencing configuration. The JSON should have
56 the following structure:
60 "agent": "AGENT_NAME",
61 "host_mac": "HOST_MAC_ADDRESS",
62 "params": {"PARAM_NAME": "PARAM_VALUE"}
71 "host_mac": "52:54:00:aa:bb:cc",
73 "multicast_address": "225.0.0.12",
74 "port": "baremetal_0",
76 "manage_key_file": true,
77 "key_file": "/etc/fence_xvm.key",
78 "key_file_password": "abcdef"
84 OvercloudControlFlavor:
85 description: Flavor for control nodes to request when deploying.
89 - custom_constraint: nova.flavor
90 HeatAuthEncryptionKey:
91 description: Auth encryption key for heat-engine
95 description: Secret key for Django
100 default: overcloud-full
102 - custom_constraint: glance.image
104 default: 'REBUILD_PRESERVE_EPHEMERAL'
105 description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
107 InstanceNameTemplate:
108 default: 'instance-%08x'
109 description: Template string to be used to generate instance names
113 description: Name of an existing Nova key pair to enable SSH access to the instances
116 - custom_constraint: nova.keypair
119 description: Whether to manage IPtables rules.
123 description: Enable IPv6 features in Memcached.
127 description: Whether IPtables rules should be purged before setting up the new ones.
129 NeutronMetadataProxySharedSecret:
130 description: Shared secret to prevent spoofing
134 description: The password for the neutron service and db account, used by neutron agents.
137 NeutronPublicInterface:
139 description: What interface to bridge onto br-ex for network nodes.
144 Whether to create cron job for purging soft deleted rows in Nova database.
148 description: Enable IPv6 features in Nova
151 description: The password for the nova service and db account, used by nova-api.
156 description: The password for the 'pcsd' user.
159 description: The password for Redis
164 default: '' # Has to be here because of the ignored empty value bug
167 default: '' # Has to be here because of the ignored empty value bug
168 description: An IP address which is wrapped in brackets in case of IPv6
170 description: A random string to be used as a salt when hashing to determine mappings
176 description: 'A hash of additional raw devices to use as Swift backend (eg. {sdb: {}})'
178 UpgradeLevelNovaCompute:
180 description: Nova Compute upgrade level
184 description: Mapping of service_name -> network name. Typically set
185 via parameter_defaults in the resource registry.
189 description: Mapping of service endpoint -> protocol. Typically set
190 via parameter_defaults in the resource registry.
196 Setting to a previously unused value during stack-update will trigger
197 package update on all nodes
200 default: '' # Defaults to Heat created hostname
204 description: Optional mapping to override hostnames
205 NetworkDeploymentActions:
206 type: comma_delimited_list
208 Heat action when to apply network configuration changes
213 SoftwareConfigTransport:
214 default: POLL_SERVER_CFN
216 How the server should receive the metadata required for software configuration.
219 - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
223 The DNS domain used for the hosts. This should match the dhcp_domain
224 configured in the Undercloud neutron. Defaults to localdomain.
228 Extra properties or metadata passed to Nova for the created nodes in
229 the overcloud. It's accessible via the Nova metadata API.
231 ControllerSchedulerHints:
233 description: Optional scheduler hints to pass to nova
235 ServiceConfigSettings:
239 type: comma_delimited_list
243 description: Command which will be run whenever configuration data changes
244 default: os-refresh-config --timeout 14400
248 description: Do not use deprecated params, they will be removed.
250 - controllerExtraConfig
255 type: OS::TripleO::Server
258 command: {get_param: ConfigCommand}
260 image: {get_param: controllerImage}
261 image_update_policy: {get_param: ImageUpdatePolicy}
262 flavor: {get_param: OvercloudControlFlavor}
263 key_name: {get_param: KeyName}
266 user_data_format: SOFTWARE_CONFIG
267 user_data: {get_resource: UserData}
270 template: {get_param: Hostname}
271 params: {get_param: HostnameMap}
272 software_config_transport: {get_param: SoftwareConfigTransport}
273 metadata: {get_param: ServerMetadata}
274 scheduler_hints: {get_param: ControllerSchedulerHints}
276 # Combine the NodeAdminUserData and NodeUserData mime archives
278 type: OS::Heat::MultipartMime
281 - config: {get_resource: NodeAdminUserData}
283 - config: {get_resource: NodeUserData}
286 # Creates the "heat-admin" user if configured via the environment
287 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
289 type: OS::TripleO::NodeAdminUserData
291 # For optional operator additional userdata
292 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
294 type: OS::TripleO::NodeUserData
297 type: OS::TripleO::Controller::Ports::ExternalPort
299 IPPool: {get_param: ControllerIPs}
300 NodeIndex: {get_param: NodeIndex}
301 ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
304 type: OS::TripleO::Controller::Ports::InternalApiPort
306 IPPool: {get_param: ControllerIPs}
307 NodeIndex: {get_param: NodeIndex}
308 ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
311 type: OS::TripleO::Controller::Ports::StoragePort
313 IPPool: {get_param: ControllerIPs}
314 NodeIndex: {get_param: NodeIndex}
315 ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
318 type: OS::TripleO::Controller::Ports::StorageMgmtPort
320 IPPool: {get_param: ControllerIPs}
321 NodeIndex: {get_param: NodeIndex}
322 ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
325 type: OS::TripleO::Controller::Ports::TenantPort
327 IPPool: {get_param: ControllerIPs}
328 NodeIndex: {get_param: NodeIndex}
329 ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
332 type: OS::TripleO::Controller::Ports::ManagementPort
334 IPPool: {get_param: ControllerIPs}
335 NodeIndex: {get_param: NodeIndex}
336 ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
339 type: OS::TripleO::Network::Ports::NetIpMap
341 ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
342 ExternalIp: {get_attr: [ExternalPort, ip_address]}
343 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
344 ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
345 InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
346 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
347 InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
348 StorageIp: {get_attr: [StoragePort, ip_address]}
349 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
350 StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
351 StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
352 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
353 StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
354 TenantIp: {get_attr: [TenantPort, ip_address]}
355 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
356 TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
357 ManagementIp: {get_attr: [ManagementPort, ip_address]}
358 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
359 ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
362 type: OS::TripleO::Controller::Net::SoftwareConfig
364 ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
365 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
366 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
367 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
368 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
369 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
370 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
373 type: OS::TripleO::SoftwareDeployment
375 name: NetworkDeployment
376 config: {get_resource: NetworkConfig}
377 server: {get_resource: Controller}
378 actions: {get_param: NetworkDeploymentActions}
381 interface_name: {get_param: NeutronPublicInterface}
383 # Resource for site-specific injection of root certificate
385 depends_on: NetworkDeployment
386 type: OS::TripleO::NodeTLSCAData
388 server: {get_resource: Controller}
390 # Resource for site-specific passing of private keys/certificates
392 depends_on: NodeTLSCAData
393 type: OS::TripleO::NodeTLSData
395 server: {get_resource: Controller}
396 NodeIndex: {get_param: NodeIndex}
399 ControllerDeployment:
400 type: OS::TripleO::SoftwareDeployment
401 depends_on: NetworkDeployment
403 name: ControllerDeployment
404 config: {get_resource: ControllerConfig}
405 server: {get_resource: Controller}
407 bootstack_nodeid: {get_attr: [Controller, name]}
408 heat_auth_encryption_key: {get_param: HeatAuthEncryptionKey}
409 horizon_secret: {get_param: HorizonSecret}
410 debug: {get_param: Debug}
411 keystone_identity_uri: { get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix] }
412 keystone_auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri] }
413 keystone_ec2_uri: { get_param: [EndpointMap, KeystoneEC2, uri] }
414 enable_fencing: {get_param: EnableFencing}
415 enable_load_balancer: {get_param: EnableLoadBalancer}
416 manage_firewall: {get_param: ManageFirewall}
417 purge_firewall_rules: {get_param: PurgeFirewallRules}
418 neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
419 aodh_internal_url: { get_param: [ EndpointMap, AodhInternal, uri ] }
420 aodh_public_url: { get_param: [ EndpointMap, AodhPublic, uri ] }
421 aodh_admin_url: { get_param: [ EndpointMap, AodhAdmin, uri ] }
422 ceilometer_coordination_url:
426 - {get_param: RedisPassword}
428 - {get_param: RedisVirtualIPUri}
430 nova_enable_db_purge: {get_param: NovaEnableDBPurge}
431 nova_ipv6: {get_param: NovaIPv6}
432 corosync_ipv6: {get_param: CorosyncIPv6}
433 memcached_ipv6: {get_param: MemcachedIPv6}
434 nova_password: {get_param: NovaPassword}
435 upgrade_level_nova_compute: {get_param: UpgradeLevelNovaCompute}
436 instance_name_template: {get_param: InstanceNameTemplate}
437 fencing_config: {get_param: FencingConfig}
438 pcsd_password: {get_param: PcsdPassword}
439 swift_hash_suffix: {get_param: SwiftHashSuffix}
440 enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
441 swift_proxy_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
442 swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
443 glance_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
444 glance_registry_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
445 glance_api_servers: { get_param: [EndpointMap, GlanceInternal, uri]}
446 heat_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
447 keystone_public_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
448 keystone_admin_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
449 manila_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ManilaApiNetwork]}]}
450 mongo_db_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MongodbNetwork]}]}
451 neutron_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
452 neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
453 ceilometer_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
454 aodh_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
455 gnocchi_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
456 nova_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
457 nova_metadata_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
458 horizon_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
461 template: "['SUBNET']"
468 template: "NETWORK_subnet"
470 NETWORK: {get_param: [ServiceNetMap, HorizonNetwork]}
471 redis_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
472 redis_vip: {get_param: RedisVirtualIP}
473 sahara_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
474 memcached_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
475 ironic_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
477 # Map heat metadata into hiera datafiles
479 type: OS::Heat::StructuredConfig
481 group: os-apply-config
486 - heat_config_%{::deploy_config_name}
487 - controller_extraconfig
492 - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
493 - bootstrap_node # provided by BootstrapNodeConfig
494 - all_nodes # provided by allNodesConfig
495 - vip_data # provided by vip-config
497 - cinder_dellsc_data # Optionally provided by ControllerExtraConfigPre
498 - cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
499 - cinder_eqlx_data # Optionally provided by ControllerExtraConfigPre
500 - neutron_bigswitch_data # Optionally provided by ControllerExtraConfigPre
501 - neutron_cisco_data # Optionally provided by ControllerExtraConfigPre
502 - cisco_n1kv_data # Optionally provided by ControllerExtraConfigPre
503 - midonet_data #Optionally provided by AllNodesExtraConfig
504 - cisco_aci_data # Optionally provided by ControllerExtraConfigPre
505 merge_behavior: deeper
509 service_names: {get_param: ServiceNames}
513 - {get_param: ServiceConfigSettings}
514 - values: {get_attr: [NetIpMap, net_ip_map]}
515 controller_extraconfig:
518 - {get_param: controllerExtraConfig}
519 - {get_param: ControllerExtraConfig}
521 mapped_data: {get_param: ExtraConfig}
523 mapped_data: # data supplied directly to this deployment configuration, etc
524 bootstack_nodeid: {get_input: bootstack_nodeid}
527 enable_fencing: {get_input: enable_fencing}
528 enable_load_balancer: {get_input: enable_load_balancer}
529 hacluster_pwd: {get_input: pcsd_password}
530 corosync_ipv6: {get_input: corosync_ipv6}
531 tripleo::fencing::config: {get_input: fencing_config}
534 # FIXME: need to move proxy_local_net_ip into swift-proxy.yaml
535 swift::proxy::proxy_local_net_ip: {get_input: swift_proxy_network}
536 swift::storage::all::storage_local_net_ip: {get_input: swift_management_network}
537 swift::swift_hash_path_suffix: {get_input: swift_hash_suffix}
540 glance::api::bind_host: {get_input: glance_api_network}
541 glance::registry::bind_host: {get_input: glance_registry_network}
544 heat::api::bind_host: {get_input: heat_api_network}
545 heat::api_cloudwatch::bind_host: {get_input: heat_api_network}
546 heat::api_cfn::bind_host: {get_input: heat_api_network}
547 heat::engine::auth_encryption_key: {get_input: heat_auth_encryption_key}
550 keystone::admin_bind_host: {get_input: keystone_admin_api_network}
551 keystone::public_bind_host: {get_input: keystone_public_api_network}
552 keystone::wsgi::apache::bind_host: {get_input: keystone_public_api_network}
553 keystone::wsgi::apache::admin_bind_host: {get_input: keystone_admin_api_network}
556 manila::api::bind_host: {get_input: manila_api_network}
559 mongodb::server::bind_ip: {get_input: mongo_db_network}
562 neutron::bind_host: {get_input: neutron_api_network}
563 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
564 neutron::agents::metadata::metadata_ip: {get_input: neutron_api_network}
567 aodh::api::host: {get_input: aodh_api_network}
568 aodh::wsgi::apache::bind_host: {get_input: aodh_api_network}
571 ceilometer::api::host: {get_input: ceilometer_api_network}
572 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
573 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
576 gnocchi::wsgi::apache::bind_host: {get_input: gnocchi_api_network}
577 gnocchi::api::host: {get_input: gnocchi_api_network}
578 gnocchi::api::keystone_auth_uri: {get_input: keystone_auth_uri}
579 gnocchi::api::keystone_identity_uri: {get_input: keystone_identity_uri}
580 gnocchi::storage::swift::swift_authurl: {get_input: keystone_auth_uri}
583 nova::upgrade_level_compute: {get_input: upgrade_level_nova_compute}
584 nova::use_ipv6: {get_input: nova_ipv6}
585 nova::api::api_bind_address: {get_input: nova_api_network}
586 nova::api::metadata_listen: {get_input: nova_metadata_network}
587 nova::glance_api_servers: {get_input: glance_api_servers}
588 nova::api::neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
589 nova::api::instance_name_template: {get_input: instance_name_template}
590 nova::vncproxy::host: {get_input: nova_api_network}
591 nova_enable_db_purge: {get_input: nova_enable_db_purge}
594 apache::mod::remoteip::proxy_ips: {get_input: horizon_subnet}
595 apache::ip: {get_input: horizon_network}
596 horizon::django_debug: {get_input: debug}
597 horizon::secret_key: {get_input: horizon_secret}
598 horizon::bind_address: {get_input: horizon_network}
599 horizon::keystone_url: {get_input: keystone_auth_uri}
602 sahara::host: {get_input: sahara_api_network}
605 redis::bind: {get_input: redis_network}
606 redis_vip: {get_input: redis_vip}
608 tripleo::firewall::manage_firewall: {get_input: manage_firewall}
609 tripleo::firewall::purge_firewall_rules: {get_input: purge_firewall_rules}
611 memcached_ipv6: {get_input: memcached_ipv6}
612 memcached::listen_ip: {get_input: memcached_network}
613 tripleo::haproxy::service_certificate: {get_attr: [NodeTLSData, deployed_ssl_certificate_path]}
614 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
616 # Hook for site-specific additional pre-deployment config, e.g extra hieradata
617 ControllerExtraConfigPre:
618 depends_on: ControllerDeployment
619 type: OS::TripleO::ControllerExtraConfigPre
621 server: {get_resource: Controller}
623 # Hook for site-specific additional pre-deployment config,
624 # applying to all nodes, e.g node registration/unregistration
626 depends_on: [ControllerExtraConfigPre, NodeTLSData]
627 type: OS::TripleO::NodeExtraConfig
629 server: {get_resource: Controller}
632 type: OS::TripleO::Tasks::PackageUpdate
635 type: OS::Heat::SoftwareDeployment
637 name: UpdateDeployment
638 config: {get_resource: UpdateConfig}
639 server: {get_resource: Controller}
642 get_param: UpdateIdentifier
646 description: IP address of the server in the ctlplane network
647 value: {get_attr: [Controller, networks, ctlplane, 0]}
649 description: IP address of the server in the external network
650 value: {get_attr: [ExternalPort, ip_address]}
651 internal_api_ip_address:
652 description: IP address of the server in the internal_api network
653 value: {get_attr: [InternalApiPort, ip_address]}
655 description: IP address of the server in the storage network
656 value: {get_attr: [StoragePort, ip_address]}
657 storage_mgmt_ip_address:
658 description: IP address of the server in the storage_mgmt network
659 value: {get_attr: [StorageMgmtPort, ip_address]}
661 description: IP address of the server in the tenant network
662 value: {get_attr: [TenantPort, ip_address]}
663 management_ip_address:
664 description: IP address of the server in the management network
665 value: {get_attr: [ManagementPort, ip_address]}
667 description: Hostname of the server
668 value: {get_attr: [Controller, name]}
671 Server's IP address and hostname in the /etc/hosts format
675 PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
676 EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
677 INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
678 STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
679 STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
680 TENANTIP TENANTHOST.DOMAIN TENANTHOST
681 MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
683 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ControllerHostnameResolveNetwork]}]}
684 DOMAIN: {get_param: CloudDomain}
685 PRIMARYHOST: {get_attr: [Controller, name]}
686 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
690 - - {get_attr: [Controller, name]}
692 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
696 - - {get_attr: [Controller, name]}
698 STORAGEIP: {get_attr: [StoragePort, ip_address]}
702 - - {get_attr: [Controller, name]}
704 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
708 - - {get_attr: [Controller, name]}
710 TENANTIP: {get_attr: [TenantPort, ip_address]}
714 - - {get_attr: [Controller, name]}
716 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
720 - - {get_attr: [Controller, name]}
722 nova_server_resource:
723 description: Heat resource handle for the Nova compute server
725 {get_resource: Controller}
727 description: Swift device formatted for swift-ring-builder
733 - ['r1z1-IP:%PORT%/d1']
735 template: 'r1z1-IP:%PORT%/DEVICE'
737 DEVICE: {get_param: SwiftRawDisks}
744 template: "NETWORK_uri"
746 NETWORK: {get_param: [ServiceNetMap, SwiftMgmtNetwork]}
747 swift_proxy_memcache:
748 description: Swift proxy-memcache value
758 template: "NETWORK_uri"
760 NETWORK: {get_param: [ServiceNetMap, MemcachedNetwork]}
762 description: MD5 checksum of the TLS Key Modulus
763 value: {get_attr: [NodeTLSData, key_modulus_md5]}
764 tls_cert_modulus_md5:
765 description: MD5 checksum of the TLS Certificate Modulus
766 value: {get_attr: [NodeTLSData, cert_modulus_md5]}