Fix ceilometer auth url
[apex-tripleo-heat-templates.git] / overcloud.yaml
1 heat_template_version: 2016-04-08
2
3 description: >
4   Deploy an OpenStack environment, consisting of several node types (roles),
5   Controller, Compute, BlockStorage, SwiftStorage and CephStorage.  The Storage
6   roles enable independent scaling of the storage components, but the minimal
7   deployment is one Controller and one Compute node.
8
9
10 # TODO(shadower): we should probably use the parameter groups to put
11 # some order in here.
12 parameters:
13
14   # Common parameters (not specific to a role)
15   AdminPassword:
16     description: The password for the keystone admin account, used for monitoring, querying neutron etc.
17     type: string
18     hidden: true
19   AodhPassword:
20     description: The password for the aodh services.
21     type: string
22     hidden: true
23   CeilometerBackend:
24     default: 'mongodb'
25     description: The ceilometer backend type.
26     type: string
27   CeilometerMeteringSecret:
28     description: Secret shared by the ceilometer services.
29     type: string
30     hidden: true
31   CeilometerPassword:
32     description: The password for the ceilometer service account.
33     type: string
34     hidden: true
35   CeilometerMeterDispatcher:
36     default: 'database'
37     description: Dispatcher to process meter data
38     type: string
39     constraints:
40     - allowed_values: ['gnocchi', 'database']
41   # This has to be an UUID so for now we generate it outside the template
42   CephClusterFSID:
43     default: ''
44     type: string
45     description: The Ceph cluster FSID. Must be a UUID.
46   CephMonKey:
47     default: ''
48     description: The Ceph monitors key. Can be created with ceph-authtool --gen-print-key.
49     type: string
50     hidden: true
51   CephAdminKey:
52     default: ''
53     description: The Ceph admin client key. Can be created with ceph-authtool --gen-print-key.
54     type: string
55     hidden: true
56   CinderEnableNfsBackend:
57     default: false
58     description: Whether to enable or not the NFS backend for Cinder
59     type: boolean
60   CephClientKey:
61     default: ''
62     description: The Ceph client key. Can be created with ceph-authtool --gen-print-key. Currently only used for external Ceph deployments to create the openstack user keyring.
63     type: string
64     hidden: true
65   CephExternalMonHost:
66     default: ''
67     type: string
68     description: List of externally managed Ceph Mon Host IPs. Only used for external Ceph deployments.
69   CinderEnableIscsiBackend:
70     default: true
71     description: Whether to enable or not the Iscsi backend for Cinder
72     type: boolean
73   CinderEnableRbdBackend:
74     default: false
75     description: Whether to enable or not the Rbd backend for Cinder
76     type: boolean
77   CloudName:
78     default: overcloud
79     description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
80     type: string
81   ControlFixedIPs:
82     default: []
83     description: Should be used for arbitrary ips.
84     type: json
85   CorosyncIPv6:
86     default: false
87     description: Enable IPv6 in Corosync
88     type: boolean
89   Debug:
90     default: ''
91     description: Set to True to enable debugging on all services.
92     type: string
93   HAProxySyslogAddress:
94     default: /dev/log
95     description: Syslog address where HAproxy will send its log
96     type: string
97   HorizonAllowedHosts:
98     default: '*'
99     description: A list of IP/Hostname allowed to connect to horizon
100     type: comma_delimited_list
101   ImageUpdatePolicy:
102     default: 'REBUILD_PRESERVE_EPHEMERAL'
103     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
104     type: string
105   InternalApiVirtualFixedIPs:
106     default: []
107     description: >
108         Control the IP allocation for the InternalApiVirtualInterface port. E.g.
109         [{'ip_address':'1.2.3.4'}]
110     type: json
111   KeyName:
112     default: default
113     description: Name of an existing Nova key pair to enable SSH access to the instances
114     type: string
115     constraints:
116       - custom_constraint: nova.keypair
117   MemcachedIPv6:
118     default: false
119     description: Enable IPv6 features in Memcached.
120     type: boolean
121   NeutronBridgeMappings:
122     description: >
123       The OVS logical->physical bridge mappings to use. See the Neutron
124       documentation for details. Defaults to mapping br-ex - the external
125       bridge on hosts - to a physical name 'datacentre' which can be used
126       to create provider networks (and we use this for the default floating
127       network) - if changing this either use different post-install network
128       scripts or be sure to keep 'datacentre' as a mapping network name.
129     type: comma_delimited_list
130     default: "datacentre:br-ex"
131   NeutronControlPlaneID:
132     default: 'ctlplane'
133     type: string
134     description: Neutron ID or name for ctlplane network.
135   NeutronEnableTunnelling:
136     type: string
137     default: "True"
138   NeutronEnableL2Pop:
139     type: string
140     description: >
141         Enable/disable the L2 population feature in the Neutron agents.
142     default: "False"
143   NeutronFlatNetworks:
144     type: comma_delimited_list
145     default: 'datacentre'
146     description: >
147       If set, flat networks to configure in neutron plugins. Defaults to
148       'datacentre' to permit external network creation.
149   NeutronNetworkType:
150     default: 'vxlan'
151     description: The tenant network type for Neutron.
152     type: comma_delimited_list
153   NeutronPassword:
154     description: The password for the neutron service account, used by neutron agents.
155     type: string
156     hidden: true
157   NeutronPublicInterface:
158     default: nic1
159     description: What interface to bridge onto br-ex for network nodes.
160     type: string
161   NeutronMetadataProxySharedSecret:
162     description: Shared secret to prevent spoofing
163     type: string
164     hidden: true
165   NeutronTenantMtu:
166     description: >
167       The default MTU for tenant networks. For VXLAN/GRE tunneling, this should
168       be at least 50 bytes smaller than the MTU on the physical network. This
169       value will be used to set the MTU on the virtual Ethernet device.
170       This value will be used to construct the NeutronDnsmasqOptions, since that
171       will determine the MTU that is assigned to the VM host through DHCP.
172     default: "1400"
173     type: string
174   NeutronTunnelTypes:
175     default: 'vxlan'
176     description: |
177         The tunnel types for the Neutron tenant network.
178     type: comma_delimited_list
179     type: comma_delimited_list
180   NeutronCorePlugin:
181     default: 'ml2'
182     description: |
183         The core plugin for Neutron. The value should be the entrypoint to be loaded
184         from neutron.core_plugins namespace.
185     type: string
186   NeutronServicePlugins:
187     default: "router,qos"
188     description: |
189         Comma-separated list of service plugin entrypoints to be loaded from the
190         neutron.service_plugins namespace.
191     type: comma_delimited_list
192   NeutronTypeDrivers:
193     default: "vxlan,vlan,flat,gre"
194     description: |
195         Comma-separated list of network type driver entrypoints to be loaded.
196     type: comma_delimited_list
197   NeutronMechanismDrivers:
198     default: 'openvswitch'
199     description: |
200         The mechanism drivers for the Neutron tenant network.
201     type: comma_delimited_list
202     type: comma_delimited_list
203   NeutronAgentExtensions:
204     default: "qos"
205     description: |
206         Comma-separated list of extensions enabled for the Neutron agents.
207     type: comma_delimited_list
208   NeutronAllowL3AgentFailover:
209     default: 'False'
210     description: Allow automatic l3-agent failover
211     type: string
212   NeutronL3HA:
213     default: 'False'
214     description: Whether to enable l3-agent HA
215     type: string
216   NovaIPv6:
217     default: false
218     description: Enable IPv6 features in Nova
219     type: boolean
220   NovaPassword:
221     description: The password for the nova service account, used by nova-api.
222     type: string
223     hidden: true
224   #TODO(ccamacho): Remove after landing Ntp in all roles
225   NtpServer:
226     default: ''
227     description: Comma-separated list of ntp servers
228     type: comma_delimited_list
229   PublicVirtualFixedIPs:
230     default: []
231     description: >
232         Control the IP allocation for the PublicVirtualInterface port. E.g.
233         [{'ip_address':'1.2.3.4'}]
234     type: json
235   RabbitCookieSalt:
236     type: string
237     default: unset
238     description: Salt for the rabbit cookie, change this to force the randomly generated rabbit cookie to change.
239   RabbitUserName:
240     default: guest
241     description: The username for RabbitMQ
242     type: string
243   RabbitPassword:
244     description: The password for RabbitMQ
245     type: string
246     hidden: true
247   RabbitClientUseSSL:
248     default: false
249     description: >
250         Rabbit client subscriber parameter to specify
251         an SSL connection to the RabbitMQ host.
252     type: string
253   RabbitClientPort:
254     default: 5672
255     description: Set rabbit subscriber port, change this if using SSL
256     type: number
257   RedisPassword:
258     description: The password for Redis
259     type: string
260     hidden: true
261   SnmpdReadonlyUserName:
262     default: ro_snmp_user
263     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
264     type: string
265   SnmpdReadonlyUserPassword:
266     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
267     type: string
268     hidden: true
269   StorageVirtualFixedIPs:
270     default: []
271     description: >
272         Control the IP allocation for the StorageVirtualInterface port. E.g.
273         [{'ip_address':'1.2.3.4'}]
274     type: json
275   StorageMgmtVirtualFixedIPs:
276     default: []
277     description: >
278         Control the IP allocation for the StorageMgmgVirtualInterface port. E.g.
279         [{'ip_address':'1.2.3.4'}]
280     type: json
281   TimeZone:
282     default: 'UTC'
283     description: The timezone to be set on nodes.
284     type: string
285   CloudDomain:
286     default: 'localdomain'
287     type: string
288     description: >
289       The DNS domain used for the hosts. This should match the dhcp_domain
290       configured in the Undercloud neutron. Defaults to localdomain.
291   ServerMetadata:
292     default: {}
293     description: >
294       Extra properties or metadata passed to Nova for the created nodes in
295       the overcloud. It's accessible via the Nova metadata API.
296     type: json
297
298   # Controller-specific params
299   CinderLVMLoopDeviceSize:
300     default: 10280
301     description: The size of the loopback file used by the cinder LVM driver.
302     type: number
303   CinderPassword:
304     description: The password for the cinder service account, used by cinder-api.
305     type: string
306     hidden: true
307   CinderISCSIHelper:
308     default: lioadm
309     description: The iSCSI helper to use with cinder.
310     type: string
311   ControllerCount:
312     type: number
313     default: 1
314     constraints:
315       - range: {min: 1}
316   controllerExtraConfig:
317     default: {}
318     description: |
319       Deprecated. Use ControllerExtraConfig via parameter_defaults instead.
320     type: json
321   controllerImage:
322     type: string
323     default: overcloud-full
324     constraints:
325       - custom_constraint: glance.image
326   OvercloudControlFlavor:
327     description: Flavor for control nodes to request when deploying.
328     default: baremetal
329     type: string
330     constraints:
331       - custom_constraint: nova.flavor
332   ControlVirtualInterface:
333     default: 'br-ex'
334     description: Interface where virtual ip will be assigned.
335     type: string
336   EnableFencing:
337     default: false
338     description: Whether to enable fencing in Pacemaker or not.
339     type: boolean
340   EnableGalera:
341     default: true
342     description: Whether to use Galera instead of regular MariaDB.
343     type: boolean
344   ControllerEnableCephStorage:
345     default: false
346     description: Whether to deploy Ceph Storage (OSD) on the Controller
347     type: boolean
348   ControllerEnableSwiftStorage:
349     default: true
350     description: Whether to enable Swift Storage on the Controller
351     type: boolean
352   ControllerSchedulerHints:
353     type: json
354     description: Optional scheduler hints to pass to nova
355     default: {}
356   ExtraConfig:
357     default: {}
358     description: |
359       Additional configuration to inject into the cluster. The format required
360       may be implementation specific, e.g puppet hieradata.  Any role specific
361       ExtraConfig, e.g controllerExtraConfig takes precedence over ExtraConfig.
362     type: json
363   FencingConfig:
364     default: {}
365     description: |
366       Pacemaker fencing configuration. The JSON should have
367       the following structure:
368         {
369           "devices": [
370             {
371               "agent": "AGENT_NAME",
372               "host_mac": "HOST_MAC_ADDRESS",
373               "params": {"PARAM_NAME": "PARAM_VALUE"}
374             }
375           ]
376         }
377       For instance:
378         {
379           "devices": [
380             {
381               "agent": "fence_xvm",
382               "host_mac": "52:54:00:aa:bb:cc",
383               "params": {
384                 "multicast_address": "225.0.0.12",
385                 "port": "baremetal_0",
386                 "manage_fw": true,
387                 "manage_key_file": true,
388                 "key_file": "/etc/fence_xvm.key",
389                 "key_file_password": "abcdef"
390               }
391             }
392           ]
393         }
394     type: json
395   GnocchiBackend:
396     default: file
397     description: The short name of the Gnocchi backend to use. Should be one
398       of swift, rbd or file
399     type: string
400     constraints:
401     - allowed_values: ['swift', 'file', 'rbd']
402   GnocchiIndexerBackend:
403     default: 'mysql'
404     description: The short name of the Gnocchi indexer backend to use.
405     type: string
406   GnocchiPassword:
407     description: The password for the gnocchi service account.
408     type: string
409     hidden: true
410   InstanceNameTemplate:
411     default: 'instance-%08x'
412     description: Template string to be used to generate instance names
413     type: string
414   ManageFirewall:
415     default: true
416     description: Whether to manage IPtables rules.
417     type: boolean
418   PurgeFirewallRules:
419     default: false
420     description: Whether IPtables rules should be purged before setting up the ones.
421     type: boolean
422   MysqlInnodbBufferPoolSize:
423     description: >
424         Specifies the size of the buffer pool in megabytes. Setting to
425         zero should be interpreted as "no value" and will defer to the
426         lower level default.
427     type: number
428     default: 0
429   MysqlMaxConnections:
430     description: Configures MySQL max_connections config setting
431     type: number
432     default: 4096
433   PublicVirtualInterface:
434     default: 'br-ex'
435     description: >
436         Specifies the interface where the public-facing virtual ip will be assigned.
437         This should be int_public when a VLAN is being used.
438     type: string
439   SwiftHashSuffix:
440     description: A random string to be used as a salt when hashing to determine mappings in the ring.
441     type: string
442     hidden: true
443   SwiftMountCheck:
444     default: 'false'
445     description: Value of mount_check in Swift account/container/object -server.conf
446     type: boolean
447   SwiftMinPartHours:
448     type: number
449     default: 1
450     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
451   SwiftPartPower:
452     default: 10
453     description: Partition Power to use when building Swift rings
454     type: number
455   SwiftReplicas:
456     type: number
457     default: 3
458     description: How many replicas to use in the swift rings.
459
460 # Compute-specific params
461   CeilometerComputeAgent:
462     description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly
463     type: string
464     default: ''
465     constraints:
466     - allowed_values: ['', Present]
467   ComputeCount:
468     type: number
469     default: 1
470   HypervisorNeutronPhysicalBridge:
471     default: 'br-ex'
472     description: >
473       An OVS bridge to create on each hypervisor. This defaults to br-ex the
474       same as the control plane nodes, as we have a uniform configuration of
475       the openvswitch agent. Typically should not need to be changed.
476     type: string
477   HypervisorNeutronPublicInterface:
478     default: nic1
479     description: What interface to add to the HypervisorNeutronPhysicalBridge.
480     type: string
481   NeutronNetworkVLANRanges:
482     default: 'datacentre:1:1000'
483     description: >
484       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
485       Neutron documentation for permitted values. Defaults to permitting any
486       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
487     type: comma_delimited_list
488   NovaComputeDriver:
489     type: string
490     default: libvirt.LibvirtDriver
491   NovaComputeExtraConfig:
492     default: {}
493     description: |
494       NovaCompute specific configuration to inject into the cluster. Same
495       structure as ExtraConfig.
496     type: json
497   NovaComputeLibvirtType:
498     default: kvm
499     type: string
500   NovaComputeLibvirtVifDriver:
501     default: ''
502     description: Libvirt VIF driver configuration for the network
503     type: string
504   NovaComputeSchedulerHints:
505     type: json
506     description: Optional scheduler hints to pass to nova
507     default: {}
508   NovaEnableRbdBackend:
509     default: false
510     description: Whether to enable or not the Rbd backend for Nova
511     type: boolean
512   NovaImage:
513     type: string
514     default: overcloud-full
515     constraints:
516       - custom_constraint: glance.image
517   NovaOVSBridge:
518     default: 'br-int'
519     description: Name of integration bridge used by Open vSwitch
520     type: string
521   NovaSecurityGroupAPI:
522     default: 'neutron'
523     description: The full class name of the security API class
524     type: string
525   OvercloudComputeFlavor:
526     description: Use this flavor
527     default: baremetal
528     type: string
529     constraints:
530       - custom_constraint: nova.flavor
531   ServiceNetMap:
532     default:
533       NeutronTenantNetwork: tenant
534       CeilometerApiNetwork: internal_api
535       AodhApiNetwork: internal_api
536       GnocchiApiNetwork: internal_api
537       MongoDbNetwork: internal_api
538       CinderApiNetwork: internal_api
539       CinderIscsiNetwork: storage
540       GlanceApiNetwork: storage
541       GlanceRegistryNetwork: internal_api
542       KeystoneAdminApiNetwork: ctlplane # allows undercloud to config endpoints
543       KeystonePublicApiNetwork: internal_api
544       NeutronApiNetwork: internal_api
545       HeatApiNetwork: internal_api
546       NovaApiNetwork: internal_api
547       NovaMetadataNetwork: internal_api
548       NovaVncProxyNetwork: internal_api
549       SwiftMgmtNetwork: storage_mgmt
550       SwiftProxyNetwork: storage
551       SaharaApiNetwork: internal_api
552       HorizonNetwork: internal_api
553       MemcachedNetwork: internal_api
554       RabbitMqNetwork: internal_api
555       RedisNetwork: internal_api
556       MysqlNetwork: internal_api
557       CephClusterNetwork: storage_mgmt
558       CephPublicNetwork: storage
559       ControllerHostnameResolveNetwork: internal_api
560       ComputeHostnameResolveNetwork: internal_api
561       BlockStorageHostnameResolveNetwork: internal_api
562       ObjectStorageHostnameResolveNetwork: internal_api
563       CephStorageHostnameResolveNetwork: storage
564     description: Mapping of service_name -> network name. Typically set
565                  via parameter_defaults in the resource registry.
566     type: json
567
568   ControllerServices:
569     default:
570       - OS::TripleO::Services::CinderApi
571       - OS::TripleO::Services::CinderScheduler
572       - OS::TripleO::Services::CinderVolume
573       - OS::TripleO::Services::Keystone
574       - OS::TripleO::Services::GlanceApi
575       - OS::TripleO::Services::GlanceRegistry
576       - OS::TripleO::Services::HeatApi
577       - OS::TripleO::Services::HeatApiCfn
578       - OS::TripleO::Services::HeatApiCloudwatch
579       - OS::TripleO::Services::HeatEngine
580       - OS::TripleO::Services::NeutronDhcpAgent
581       - OS::TripleO::Services::NeutronL3Agent
582       - OS::TripleO::Services::NeutronMetadataAgent
583       - OS::TripleO::Services::NeutronServer
584       - OS::TripleO::Services::NeutronCorePlugin
585       - OS::TripleO::Services::NeutronOvsAgent
586       - OS::TripleO::Services::RabbitMQ
587       - OS::TripleO::Services::HAproxy
588       - OS::TripleO::Services::Keepalived
589       - OS::TripleO::Services::Memcached
590       - OS::TripleO::Services::SwiftProxy
591       - OS::TripleO::Services::Redis
592       - OS::TripleO::Services::NovaConductor
593       - OS::TripleO::Services::MongoDb
594       - OS::TripleO::Services::NovaApi
595       - OS::TripleO::Services::NovaScheduler
596       - OS::TripleO::Services::NovaConsoleauth
597       - OS::TripleO::Services::NovaVncproxy
598       - OS::TripleO::Services::Ntp
599     description: A list of service resources (configured in the Heat
600                  resource_registry) which represent nested stacks
601                  for each service that should get installed on the Controllers.
602     type: comma_delimited_list
603
604   ComputeServices:
605     default:
606       - OS::TripleO::Services::NovaCompute
607       - OS::TripleO::Services::Ntp
608     description: A list of service resources (configured in the Heat
609                  resource_registry) which represent nested stacks
610                  for each service that should get installed on the Compute Nodes.
611     type: comma_delimited_list
612
613 # Block storage specific parameters
614   BlockStorageCount:
615     type: number
616     default: 0
617   BlockStorageImage:
618     default: overcloud-full
619     type: string
620   OvercloudBlockStorageFlavor:
621     description: Flavor for block storage nodes to request when deploying.
622     default: baremetal
623     type: string
624     constraints:
625       - custom_constraint: nova.flavor
626   BlockStorageExtraConfig:
627     default: {}
628     description: |
629       BlockStorage specific configuration to inject into the cluster. Same
630       structure as ExtraConfig.
631     type: json
632   BlockStorageSchedulerHints:
633     type: json
634     description: Optional scheduler hints to pass to nova
635     default: {}
636
637
638 # Object storage specific parameters
639   ObjectStorageCount:
640     type: number
641     default: 0
642   OvercloudSwiftStorageFlavor:
643     description: Flavor for Swift storage nodes to request when deploying.
644     default: baremetal
645     type: string
646     constraints:
647       - custom_constraint: nova.flavor
648   SwiftStorageImage:
649     default: overcloud-full
650     type: string
651   ObjectStorageExtraConfig:
652     default: {}
653     description: |
654       ObjectStorage specific configuration to inject into the cluster. Same
655       structure as ExtraConfig.
656     type: json
657   ObjectStorageSchedulerHints:
658     type: json
659     description: Optional scheduler hints to pass to nova
660     default: {}
661   ObjectStorageServices:
662     default:
663       - OS::TripleO::Services::Ntp
664     description: A list of service resources (configured in the Heat
665                  resource_registry) which represent nested stacks
666                  for each service that should get installed on the ObjectStorage nodes.
667                  Note this role currently only supports steps 2, 3 and 4 configuration.
668     type: comma_delimited_list
669
670
671 # Ceph storage specific parameters
672   CephStorageCount:
673     type: number
674     default: 0
675   CephStorageImage:
676     default: overcloud-full
677     type: string
678   OvercloudCephStorageFlavor:
679     default: baremetal
680     description: Flavor for Ceph storage nodes to request when deploying.
681     type: string
682     constraints:
683       - custom_constraint: nova.flavor
684   CephStorageExtraConfig:
685     default: {}
686     description: |
687       CephStorage specific configuration to inject into the cluster. Same
688       structure as ExtraConfig.
689     type: json
690   CephStorageSchedulerHints:
691     type: json
692     description: Optional scheduler hints to pass to nova
693     default: {}
694   CephStorageServices:
695     default:
696       - OS::TripleO::Services::Ntp
697     description: A list of service resources (configured in the Heat
698                  resource_registry) which represent nested stacks
699                  for each service that should get installed on the CephStorage nodes.
700     type: comma_delimited_list
701
702   # Hostname format for each role
703   # Note %index% is translated into the index of the node, e.g 0/1/2 etc
704   # and %stackname% is replaced with OS::stack_name in the template below.
705   # If you want to use the heat generated names, pass '' (empty string).
706   ControllerHostnameFormat:
707     type: string
708     description: Format for Controller node hostnames
709     default: '%stackname%-controller-%index%'
710   ComputeHostnameFormat:
711     type: string
712     description: Format for Compute node hostnames
713     default: '%stackname%-novacompute-%index%'
714   BlockStorageHostnameFormat:
715     type: string
716     description: Format for BlockStorage node hostnames
717     default: '%stackname%-blockstorage-%index%'
718   ObjectStorageHostnameFormat:
719     type: string
720     description: Format for SwiftStorage node hostnames
721     default: '%stackname%-objectstorage-%index%'
722   CephStorageHostnameFormat:
723     type: string
724     description: Format for CephStorage node hostnames
725     default: '%stackname%-cephstorage-%index%'
726
727   # Identifiers to trigger tasks on nodes
728   UpdateIdentifier:
729     default: ''
730     type: string
731     description: >
732       Setting to a previously unused value during stack-update will trigger
733       package update on all nodes
734   DeployIdentifier:
735     default: ''
736     type: string
737     description: >
738       Setting this to a unique value will re-run any deployment tasks which
739       perform configuration on a Heat stack-update.
740
741   # If you want to remove a specific node from a resource group, you can pass
742   # the node name or id as a <Group>RemovalPolicies parameter, for example:
743   # ComputeRemovalPolicies: [{'resource_list': ['0']}]
744   ControllerRemovalPolicies:
745     default: []
746     type: json
747     description: >
748       List of resources to be removed from ControllerResourceGroup when
749       doing an update which requires removal of specific resources.
750   ComputeRemovalPolicies:
751     default: []
752     type: json
753     description: >
754       List of resources to be removed from ComputeResourceGroup when
755       doing an update which requires removal of specific resources.
756   BlockStorageRemovalPolicies:
757     default: []
758     type: json
759     description: >
760       List of resources to be removed from BlockStorageResourceGroup when
761       doing an update which requires removal of specific resources.
762   ObjectStorageRemovalPolicies:
763     default: []
764     type: json
765     description: >
766       List of resources to be removed from ObjectStorageResourceGroup when
767       doing an update which requires removal of specific resources.
768   CephStorageRemovalPolicies:
769     default: []
770     type: json
771     description: >
772       List of resources to be removed from CephStorageResourceGroup when
773       doing an update which requires removal of specific resources.
774
775 parameter_groups:
776 - label: deprecated
777   description: Do not use deprecated params, they will be removed.
778   parameters:
779   - controllerExtraConfig
780
781
782 resources:
783
784   HeatAuthEncryptionKey:
785     type: OS::Heat::RandomString
786
787   PcsdPassword:
788     type: OS::Heat::RandomString
789     properties:
790       length: 16
791
792   HorizonSecret:
793     type: OS::Heat::RandomString
794     properties:
795       length: 10
796
797   EndpointMap:
798     type: OS::TripleO::EndpointMap
799     properties:
800       CloudName: {get_param: CloudName}
801       CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
802       AodhApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
803       CinderApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
804       GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
805       GlanceRegistryVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
806       GnocchiApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
807       HeatApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
808       KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
809       KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
810       MysqlVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
811       NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
812       NovaApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
813       SaharaApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
814       SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
815       PublicVirtualIP: {get_attr: [VipMap, net_ip_uri_map, external]}
816
817   ControllerServiceChain:
818     type: OS::TripleO::Services
819     depends_on: Networks
820     properties:
821       Services: {get_param: ControllerServices}
822       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
823
824   Controller:
825     type: OS::Heat::ResourceGroup
826     depends_on: Networks
827     properties:
828       count: {get_param: ControllerCount}
829       removal_policies: {get_param: ControllerRemovalPolicies}
830       resource_def:
831         type: OS::TripleO::Controller
832         properties:
833           AdminPassword: {get_param: AdminPassword}
834           AodhPassword: {get_param: AodhPassword}
835           CeilometerBackend: {get_param: CeilometerBackend}
836           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
837           CeilometerPassword: {get_param: CeilometerPassword}
838           CeilometerMeterDispatcher: {get_param: CeilometerMeterDispatcher}
839           CloudDomain: {get_param: CloudDomain}
840           ControlVirtualInterface: {get_param: ControlVirtualInterface}
841           controllerExtraConfig: {get_param: controllerExtraConfig}
842           CorosyncIPv6: {get_param: CorosyncIPv6}
843           Debug: {get_param: Debug}
844           EnableFencing: {get_param: EnableFencing}
845           ManageFirewall: {get_param: ManageFirewall}
846           PurgeFirewallRules: {get_param: PurgeFirewallRules}
847           EnableGalera: {get_param: EnableGalera}
848           EnableCephStorage: {get_param: ControllerEnableCephStorage}
849           EnableSwiftStorage: {get_param: ControllerEnableSwiftStorage}
850           ExtraConfig: {get_param: ExtraConfig}
851           FencingConfig: {get_param: FencingConfig}
852           Flavor: {get_param: OvercloudControlFlavor}
853           GnocchiPassword: {get_param: GnocchiPassword}
854           GnocchiBackend: {get_param: GnocchiBackend}
855           GnocchiIndexerBackend: {get_param: GnocchiIndexerBackend}
856           HAProxySyslogAddress: {get_param: HAProxySyslogAddress}
857           HeatAuthEncryptionKey: {get_resource: HeatAuthEncryptionKey}
858           HorizonAllowedHosts: {get_param: HorizonAllowedHosts}
859           HorizonSecret: {get_resource: HorizonSecret}
860           Image: {get_param: controllerImage}
861           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
862           InstanceNameTemplate: {get_param: InstanceNameTemplate}
863           KeyName: {get_param: KeyName}
864           MemcachedIPv6: {get_param: MemcachedIPv6}
865           MysqlClusterUniquePart: {get_attr: [MysqlClusterUniquePart, value]}
866           MysqlInnodbBufferPoolSize: {get_param: MysqlInnodbBufferPoolSize}
867           MysqlMaxConnections: {get_param: MysqlMaxConnections}
868           MysqlRootPassword: {get_attr: [MysqlRootPassword, value]}
869           NeutronTenantMtu: {get_param: NeutronTenantMtu}
870           NeutronPublicInterface: {get_param: NeutronPublicInterface}
871           NeutronPassword: {get_param: NeutronPassword}
872           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
873           NovaIPv6: {get_param: NovaIPv6}
874           NovaPassword: {get_param: NovaPassword}
875           PcsdPassword: {get_resource: PcsdPassword}
876           PublicVirtualInterface: {get_param: PublicVirtualInterface}
877           RabbitPassword: {get_param: RabbitPassword}
878           RabbitUserName: {get_param: RabbitUserName}
879           RabbitCookie: {get_attr: [RabbitCookie, value]}
880           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
881           RabbitClientPort: {get_param: RabbitClientPort}
882           RedisPassword: {get_param: RedisPassword}
883           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
884           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
885           RedisVirtualIP: {get_attr: [RedisVirtualIP, ip_address]}
886           RedisVirtualIPUri: {get_attr: [RedisVirtualIP, ip_address_uri]}
887           SwiftHashSuffix: {get_param: SwiftHashSuffix}
888           SwiftMountCheck: {get_param: SwiftMountCheck}
889           SwiftMinPartHours: {get_param: SwiftMinPartHours}
890           SwiftPartPower: {get_param: SwiftPartPower}
891           SwiftReplicas: { get_param: SwiftReplicas}
892           TimeZone: {get_param: TimeZone}
893           VirtualIP: {get_attr: [VipMap, net_ip_map, ctlplane]} # deprecated. Use per service VIP settings instead now.
894           PublicVirtualIP: {get_attr: [VipMap, net_ip_map, external]}
895           ServiceNetMap: {get_param: ServiceNetMap}
896           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
897           CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
898           AodhApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
899           GnocchiApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
900           CinderApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
901           HeatApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
902           HeatApiVirtualIPUri: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
903           NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
904           SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
905           MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
906           NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
907           NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
908           SaharaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
909           UpdateIdentifier: {get_param: UpdateIdentifier}
910           Hostname:
911             str_replace:
912               template: {get_param: ControllerHostnameFormat}
913               params:
914                 '%stackname%': {get_param: 'OS::stack_name'}
915           NodeIndex: '%index%'
916           ServerMetadata: {get_param: ServerMetadata}
917           SchedulerHints: {get_param: ControllerSchedulerHints}
918           ServiceConfigSettings: {get_attr: [ControllerServiceChain, config_settings]}
919
920   ComputeServiceChain:
921     type: OS::TripleO::Services
922     properties:
923       Services: {get_param: ComputeServices}
924       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
925
926   Compute:
927     type: OS::Heat::ResourceGroup
928     depends_on: Networks
929     properties:
930       count: {get_param: ComputeCount}
931       removal_policies: {get_param: ComputeRemovalPolicies}
932       resource_def:
933         type: OS::TripleO::Compute
934         properties:
935           AdminPassword: {get_param: AdminPassword}
936           CeilometerComputeAgent: {get_param: CeilometerComputeAgent}
937           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
938           CeilometerPassword: {get_param: CeilometerPassword}
939           CinderEnableNfsBackend: {get_param: CinderEnableNfsBackend}
940           CinderEnableRbdBackend: {get_param: CinderEnableRbdBackend}
941           Debug: {get_param: Debug}
942           ExtraConfig: {get_param: ExtraConfig}
943           Flavor: {get_param: OvercloudComputeFlavor}
944           GlanceHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
945           Image: {get_param: NovaImage}
946           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
947           KeyName: {get_param: KeyName}
948           KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
949           KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
950           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
951           NeutronTenantMtu: {get_param: NeutronTenantMtu}
952           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
953           NeutronEnableL2Pop : {get_param: NeutronEnableL2Pop}
954           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
955           NeutronHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
956           NeutronNetworkType: {get_param: NeutronNetworkType}
957           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
958           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
959           NeutronPassword: {get_param: NeutronPassword}
960           NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
961           NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
962           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
963           NeutronCorePlugin: {get_param: NeutronCorePlugin}
964           NeutronServicePlugins: {get_param: NeutronServicePlugins}
965           NeutronTypeDrivers: {get_param: NeutronTypeDrivers}
966           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
967           NeutronAgentExtensions: {get_param: NeutronAgentExtensions}
968           # L3 HA and Failover is not relevant for Computes, should be removed
969           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
970           NeutronL3HA: {get_param: NeutronL3HA}
971           NovaApiHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
972           NovaComputeDriver: {get_param: NovaComputeDriver}
973           NovaComputeExtraConfig: {get_param: NovaComputeExtraConfig}
974           NovaComputeLibvirtType: {get_param: NovaComputeLibvirtType}
975           NovaComputeLibvirtVifDriver: {get_param: NovaComputeLibvirtVifDriver}
976           NovaEnableRbdBackend: {get_param: NovaEnableRbdBackend}
977           NovaIPv6: {get_param: NovaIPv6}
978           NovaPublicIP: {get_attr: [VipMap, net_ip_map, external]}
979           NovaPassword: {get_param: NovaPassword}
980           NovaOVSBridge: {get_param: NovaOVSBridge}
981           NovaSecurityGroupAPI: {get_param: NovaSecurityGroupAPI}
982           RabbitHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
983           RabbitPassword: {get_param: RabbitPassword}
984           RabbitUserName: {get_param: RabbitUserName}
985           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
986           RabbitClientPort: {get_param: RabbitClientPort}
987           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
988           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
989           ServiceNetMap: {get_param: ServiceNetMap}
990           TimeZone: {get_param: TimeZone}
991           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
992           UpdateIdentifier: {get_param: UpdateIdentifier}
993           Hostname:
994             str_replace:
995               template: {get_param: ComputeHostnameFormat}
996               params:
997                 '%stackname%': {get_param: 'OS::stack_name'}
998           CloudDomain: {get_param: CloudDomain}
999           ServerMetadata: {get_param: ServerMetadata}
1000           SchedulerHints: {get_param: NovaComputeSchedulerHints}
1001           NodeIndex: '%index%'
1002           ServiceConfigSettings: {get_attr: [ComputeServiceChain, config_settings]}
1003
1004
1005   BlockStorage:
1006     type: OS::Heat::ResourceGroup
1007     depends_on: Networks
1008     properties:
1009       count: {get_param: BlockStorageCount}
1010       removal_policies: {get_param: BlockStorageRemovalPolicies}
1011       resource_def:
1012         type: OS::TripleO::BlockStorage
1013         properties:
1014           Debug: {get_param: Debug}
1015           Image: {get_param: BlockStorageImage}
1016           CinderISCSIHelper: {get_param: CinderISCSIHelper}
1017           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
1018           # Purpose of the dedicated BlockStorage nodes should be to use their local LVM
1019           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
1020           CinderPassword: {get_param: CinderPassword}
1021           KeyName: {get_param: KeyName}
1022           Flavor: {get_param: OvercloudBlockStorageFlavor}
1023           VirtualIP: {get_attr: [VipMap, net_ip_map, ctlplane]}
1024           GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1025           RabbitPassword: {get_param: RabbitPassword}
1026           RabbitUserName: {get_param: RabbitUserName}
1027           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
1028           RabbitClientPort: {get_param: RabbitClientPort}
1029           TimeZone: {get_param: TimeZone}
1030           NtpServer: {get_param: NtpServer}
1031           UpdateIdentifier: {get_param: UpdateIdentifier}
1032           Hostname:
1033             str_replace:
1034               template: {get_param: BlockStorageHostnameFormat}
1035               params:
1036                 '%stackname%': {get_param: 'OS::stack_name'}
1037           ServiceNetMap: {get_param: ServiceNetMap}
1038           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1039           ExtraConfig: {get_param: ExtraConfig}
1040           BlockStorageExtraConfig: {get_param: BlockStorageExtraConfig}
1041           CloudDomain: {get_param: CloudDomain}
1042           ServerMetadata: {get_param: ServerMetadata}
1043           SchedulerHints: {get_param: BlockStorageSchedulerHints}
1044           NodeIndex: '%index%'
1045
1046   ObjectStorageServiceChain:
1047     type: OS::TripleO::Services
1048     properties:
1049       Services: {get_param: ObjectStorageServices}
1050       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1051
1052   ObjectStorage:
1053     type: OS::Heat::ResourceGroup
1054     depends_on: Networks
1055     properties:
1056       count: {get_param: ObjectStorageCount}
1057       removal_policies: {get_param: ObjectStorageRemovalPolicies}
1058       resource_def:
1059         type: OS::TripleO::ObjectStorage
1060         properties:
1061           KeyName: {get_param: KeyName}
1062           Flavor: {get_param: OvercloudSwiftStorageFlavor}
1063           HashSuffix: {get_param: SwiftHashSuffix}
1064           MountCheck: {get_param: SwiftMountCheck}
1065           MinPartHours: {get_param: SwiftMinPartHours}
1066           PartPower: {get_param: SwiftPartPower}
1067           Image: {get_param: SwiftStorageImage}
1068           Replicas: { get_param: SwiftReplicas}
1069           TimeZone: {get_param: TimeZone}
1070           UpdateIdentifier: {get_param: UpdateIdentifier}
1071           ServiceNetMap: {get_param: ServiceNetMap}
1072           Hostname:
1073             str_replace:
1074               template: {get_param: ObjectStorageHostnameFormat}
1075               params:
1076                 '%stackname%': {get_param: 'OS::stack_name'}
1077           ExtraConfig: {get_param: ExtraConfig}
1078           ObjectStorageExtraConfig: {get_param: ObjectStorageExtraConfig}
1079           CloudDomain: {get_param: CloudDomain}
1080           ServerMetadata: {get_param: ServerMetadata}
1081           SchedulerHints: {get_param: ObjectStorageSchedulerHints}
1082           NodeIndex: '%index%'
1083           ServiceConfigSettings: {get_attr: [ObjectStorageServiceChain, config_settings]}
1084
1085   CephStorageServiceChain:
1086     type: OS::TripleO::Services
1087     properties:
1088       Services: {get_param: CephStorageServices}
1089       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1090
1091   CephStorage:
1092     type: OS::Heat::ResourceGroup
1093     depends_on: Networks
1094     properties:
1095       count: {get_param: CephStorageCount}
1096       removal_policies: {get_param: CephStorageRemovalPolicies}
1097       resource_def:
1098         type: OS::TripleO::CephStorage
1099         properties:
1100           Image: {get_param: CephStorageImage}
1101           KeyName: {get_param: KeyName}
1102           Flavor: {get_param: OvercloudCephStorageFlavor}
1103           ServiceNetMap: {get_param: ServiceNetMap}
1104           TimeZone: {get_param: TimeZone}
1105           UpdateIdentifier: {get_param: UpdateIdentifier}
1106           Hostname:
1107             str_replace:
1108               template: {get_param: CephStorageHostnameFormat}
1109               params:
1110                 '%stackname%': {get_param: 'OS::stack_name'}
1111           ExtraConfig: {get_param: ExtraConfig}
1112           CephStorageExtraConfig: {get_param: CephStorageExtraConfig}
1113           CloudDomain: {get_param: CloudDomain}
1114           ServerMetadata: {get_param: ServerMetadata}
1115           SchedulerHints: {get_param: CephStorageSchedulerHints}
1116           NodeIndex: '%index%'
1117           ServiceConfigSettings: {get_attr: [CephStorageServiceChain, config_settings]}
1118
1119   ControllerIpListMap:
1120     type: OS::TripleO::Network::Ports::NetIpListMap
1121     properties:
1122       ControlPlaneIpList: {get_attr: [Controller, ip_address]}
1123       ExternalIpList: {get_attr: [Controller, external_ip_address]}
1124       InternalApiIpList: {get_attr: [Controller, internal_api_ip_address]}
1125       StorageIpList: {get_attr: [Controller, storage_ip_address]}
1126       StorageMgmtIpList: {get_attr: [Controller, storage_mgmt_ip_address]}
1127       TenantIpList: {get_attr: [Controller, tenant_ip_address]}
1128       ManagementIpList: {get_attr: [Controller, management_ip_address]}
1129
1130   allNodesConfig:
1131     type: OS::TripleO::AllNodes::SoftwareConfig
1132     properties:
1133       compute_hosts: {get_attr: [Compute, hosts_entry]}
1134       controller_hosts: {get_attr: [Controller, hosts_entry]}
1135       controller_ips: {get_attr: [Controller, ip_address]}
1136       block_storage_hosts: {get_attr: [BlockStorage, hosts_entry]}
1137       object_storage_hosts: {get_attr: [ObjectStorage, hosts_entry]}
1138       ceph_storage_hosts: {get_attr: [CephStorage, hosts_entry]}
1139       controller_names: {get_attr: [Controller, hostname]}
1140       rabbit_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1141       mongo_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
1142       redis_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
1143       memcache_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
1144       mysql_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1145       horizon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1146       heat_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1147       swift_proxy_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1148       ceilometer_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1149       aodh_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
1150       gnocchi_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
1151       nova_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1152       nova_metadata_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1153       glance_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1154       glance_registry_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1155       cinder_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1156       neutron_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1157       keystone_public_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1158       keystone_admin_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1159       sahara_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1160       DeployIdentifier: {get_param: DeployIdentifier}
1161       UpdateIdentifier: {get_param: UpdateIdentifier}
1162
1163   MysqlRootPassword:
1164     type: OS::Heat::RandomString
1165     properties:
1166       length: 10
1167
1168   MysqlClusterUniquePart:
1169     type: OS::Heat::RandomString
1170     properties:
1171       length: 10
1172
1173   RabbitCookie:
1174     type: OS::Heat::RandomString
1175     properties:
1176       length: 20
1177       salt: {get_param: RabbitCookieSalt}
1178
1179   # creates the network architecture
1180   Networks:
1181     type: OS::TripleO::Network
1182
1183   ControlVirtualIP:
1184     type: OS::Neutron::Port
1185     depends_on: Networks
1186     properties:
1187       name: control_virtual_ip
1188       network: {get_param: NeutronControlPlaneID}
1189       fixed_ips: {get_param: ControlFixedIPs}
1190       replacement_policy: AUTO
1191
1192   RedisVirtualIP:
1193     depends_on: Networks
1194     type: OS::TripleO::Network::Ports::RedisVipPort
1195     properties:
1196       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1197       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
1198       PortName: redis_virtual_ip
1199       NetworkName: {get_param: [ServiceNetMap, RedisNetwork]}
1200       ServiceName: redis
1201
1202   # The public VIP is on the External net, falls back to ctlplane
1203   PublicVirtualIP:
1204     depends_on: Networks
1205     type: OS::TripleO::Network::Ports::ExternalVipPort
1206     properties:
1207       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1208       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
1209       PortName: public_virtual_ip
1210       FixedIPs: {get_param: PublicVirtualFixedIPs}
1211
1212   InternalApiVirtualIP:
1213     depends_on: Networks
1214     type: OS::TripleO::Network::Ports::InternalApiVipPort
1215     properties:
1216       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1217       PortName: internal_api_virtual_ip
1218       FixedIPs: {get_param: InternalApiVirtualFixedIPs}
1219
1220   StorageVirtualIP:
1221     depends_on: Networks
1222     type: OS::TripleO::Network::Ports::StorageVipPort
1223     properties:
1224       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1225       PortName: storage_virtual_ip
1226       FixedIPs: {get_param: StorageVirtualFixedIPs}
1227
1228   StorageMgmtVirtualIP:
1229     depends_on: Networks
1230     type: OS::TripleO::Network::Ports::StorageMgmtVipPort
1231     properties:
1232       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1233       PortName: storage_management_virtual_ip
1234       FixedIPs: {get_param: StorageMgmtVirtualFixedIPs}
1235
1236   VipMap:
1237     type: OS::TripleO::Network::Ports::NetVipMap
1238     properties:
1239       ControlPlaneIp: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1240       ExternalIp: {get_attr: [PublicVirtualIP, ip_address]}
1241       ExternalIpUri: {get_attr: [PublicVirtualIP, ip_address_uri]}
1242       InternalApiIp: {get_attr: [InternalApiVirtualIP, ip_address]}
1243       InternalApiIpUri: {get_attr: [InternalApiVirtualIP, ip_address_uri]}
1244       StorageIp: {get_attr: [StorageVirtualIP, ip_address]}
1245       StorageIpUri: {get_attr: [StorageVirtualIP, ip_address_uri]}
1246       StorageMgmtIp: {get_attr: [StorageMgmtVirtualIP, ip_address]}
1247       StorageMgmtIpUri: {get_attr: [StorageMgmtVirtualIP, ip_address_uri]}
1248       # No tenant or management VIP required
1249
1250   VipConfig:
1251     type: OS::TripleO::VipConfig
1252
1253   VipDeployment:
1254     type: OS::Heat::StructuredDeployments
1255     properties:
1256       name: VipDeployment
1257       config: {get_resource: VipConfig}
1258       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1259       input_values:
1260         # service VIP mappings
1261         keystone_admin_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1262         keystone_public_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1263         neutron_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1264         cinder_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1265         glance_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1266         glance_registry_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1267         swift_proxy_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1268         nova_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1269         nova_metadata_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1270         ceilometer_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1271         aodh_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
1272         gnocchi_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
1273         heat_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1274         horizon_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1275         redis_vip: {get_attr: [RedisVirtualIP, ip_address]}
1276         mysql_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1277         rabbit_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1278         # direct configuration of Virtual IPs for each network
1279         control_virtual_ip: {get_attr: [VipMap, net_ip_map, ctlplane]}
1280         public_virtual_ip: {get_attr: [VipMap, net_ip_map, external]}
1281         internal_api_virtual_ip: {get_attr: [VipMap, net_ip_map, internal_api]}
1282         sahara_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1283         storage_virtual_ip: {get_attr: [VipMap, net_ip_map, storage]}
1284         storage_mgmt_virtual_ip: {get_attr: [VipMap, net_ip_map, storage_mgmt]}
1285
1286   ControllerBootstrapNodeConfig:
1287     type: OS::TripleO::BootstrapNode::SoftwareConfig
1288     properties:
1289       bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
1290       bootstrap_nodeid_ip: {get_attr: [Controller, resource.0.ip_address]}
1291
1292   ControllerBootstrapNodeDeployment:
1293     type: OS::Heat::StructuredDeployments
1294     properties:
1295       name: ControllerBootstrapNodeDeployment
1296       config: {get_attr: [ControllerBootstrapNodeConfig, config_id]}
1297       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1298
1299   ControllerSwiftDeployment:
1300     type: OS::Heat::StructuredDeployments
1301     properties:
1302       name: ControllerSwiftDeployment
1303       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
1304       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1305
1306   ObjectStorageSwiftDeployment:
1307     type: OS::Heat::StructuredDeployments
1308     properties:
1309       name: ObjectStorageSwiftDeployment
1310       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
1311       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1312
1313   SwiftDevicesAndProxyConfig:
1314     type: OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig
1315     properties:
1316       controller_swift_devices: {get_attr: [Controller, swift_device]}
1317       object_store_swift_devices: {get_attr: [ObjectStorage, swift_device]}
1318       controller_swift_proxy_memcaches: {get_attr: [Controller, swift_proxy_memcache]}
1319
1320   ComputeCephDeployment:
1321     type: OS::Heat::StructuredDeployments
1322     properties:
1323       name: ComputeCephDeployment
1324       config: {get_attr: [CephClusterConfig, config_id]}
1325       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1326
1327   ControllerCephDeployment:
1328     type: OS::Heat::StructuredDeployments
1329     properties:
1330       name: ControllerCephDeployment
1331       config: {get_attr: [CephClusterConfig, config_id]}
1332       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1333
1334   CephStorageCephDeployment:
1335     type: OS::Heat::StructuredDeployments
1336     properties:
1337       name: CephStorageCephDeployment
1338       config: {get_attr: [CephClusterConfig, config_id]}
1339       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1340
1341   CephClusterConfig:
1342     type: OS::TripleO::CephClusterConfig::SoftwareConfig
1343     properties:
1344       ceph_storage_count: {get_param: CephStorageCount}
1345       ceph_fsid: {get_param: CephClusterFSID}
1346       ceph_mon_key: {get_param: CephMonKey}
1347       ceph_admin_key: {get_param: CephAdminKey}
1348       ceph_client_key: {get_param: CephClientKey}
1349       ceph_external_mon_ips: {get_param: CephExternalMonHost}
1350       ceph_mon_names: {get_attr: [Controller, hostname]}
1351       ceph_mon_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
1352
1353   ControllerAllNodesDeployment:
1354     type: OS::Heat::StructuredDeployments
1355     properties:
1356       name: ControllerAllNodesDeployment
1357       config: {get_attr: [allNodesConfig, config_id]}
1358       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1359
1360   ComputeAllNodesDeployment:
1361     type: OS::Heat::StructuredDeployments
1362     properties:
1363       name: ComputeAllNodesDeployment
1364       config: {get_attr: [allNodesConfig, config_id]}
1365       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1366
1367   BlockStorageAllNodesDeployment:
1368     type: OS::Heat::StructuredDeployments
1369     properties:
1370       name: BlockStorageAllNodesDeployment
1371       config: {get_attr: [allNodesConfig, config_id]}
1372       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1373
1374   ObjectStorageAllNodesDeployment:
1375     type: OS::Heat::StructuredDeployments
1376     properties:
1377       name: ObjectStorageAllNodesDeployment
1378       config: {get_attr: [allNodesConfig, config_id]}
1379       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1380
1381   CephStorageAllNodesDeployment:
1382     type: OS::Heat::StructuredDeployments
1383     properties:
1384       name: CephStorageAllNodesDeployment
1385       config: {get_attr: [allNodesConfig, config_id]}
1386       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1387
1388   # All Nodes Validations
1389   AllNodesValidationConfig:
1390     type: OS::TripleO::AllNodes::Validation
1391     properties:
1392       PingTestIps:
1393         list_join:
1394         - ' '
1395         - - {get_attr: [Controller, resource.0.external_ip_address]}
1396           - {get_attr: [Controller, resource.0.internal_api_ip_address]}
1397           - {get_attr: [Controller, resource.0.storage_ip_address]}
1398           - {get_attr: [Controller, resource.0.storage_mgmt_ip_address]}
1399           - {get_attr: [Controller, resource.0.tenant_ip_address]}
1400
1401   ControllerAllNodesValidationDeployment:
1402     type: OS::Heat::StructuredDeployments
1403     depends_on: ControllerAllNodesDeployment
1404     properties:
1405       name: ControllerAllNodesValidationDeployment
1406       config: {get_resource: AllNodesValidationConfig}
1407       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1408
1409   ComputeAllNodesValidationDeployment:
1410     type: OS::Heat::StructuredDeployments
1411     depends_on: ComputeAllNodesDeployment
1412     properties:
1413       name: ComputeAllNodesValidationDeployment
1414       config: {get_resource: AllNodesValidationConfig}
1415       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1416
1417   BlockStorageAllNodesValidationDeployment:
1418     type: OS::Heat::StructuredDeployments
1419     depends_on: BlockStorageAllNodesDeployment
1420     properties:
1421       name: BlockStorageAllNodesValidationDeployment
1422       config: {get_resource: AllNodesValidationConfig}
1423       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1424
1425   ObjectStorageAllNodesValidationDeployment:
1426     type: OS::Heat::StructuredDeployments
1427     depends_on: ObjectStorageAllNodesDeployment
1428     properties:
1429       name: ObjectStorageAllNodesValidationDeployment
1430       config: {get_resource: AllNodesValidationConfig}
1431       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1432
1433   CephStorageAllNodesValidationDeployment:
1434     type: OS::Heat::StructuredDeployments
1435     depends_on: CephStorageAllNodesDeployment
1436     properties:
1437       name: CephStorageAllNodesValidationDeployment
1438       config: {get_resource: AllNodesValidationConfig}
1439       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1440
1441   UpdateWorkflow:
1442     type: OS::TripleO::Tasks::UpdateWorkflow
1443     properties:
1444       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
1445       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
1446       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1447       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1448       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1449       input_values:
1450         deploy_identifier: {get_param: DeployIdentifier}
1451         update_identifier: {get_param: UpdateIdentifier}
1452
1453   # Optional ExtraConfig for all nodes - all roles are passed in here, but
1454   # the nested template may configure each role differently (or not at all)
1455   AllNodesExtraConfig:
1456     type: OS::TripleO::AllNodesExtraConfig
1457     depends_on:
1458       - UpdateWorkflow
1459       - ComputeAllNodesValidationDeployment
1460       - BlockStorageAllNodesValidationDeployment
1461       - ObjectStorageAllNodesValidationDeployment
1462       - CephStorageAllNodesValidationDeployment
1463       - ControllerAllNodesValidationDeployment
1464     properties:
1465       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
1466       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
1467       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1468       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1469       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1470
1471   # Nested stack deployment runs after all other controller deployments
1472   ControllerNodesPostDeployment:
1473     type: OS::TripleO::ControllerPostDeployment
1474     depends_on: [ControllerBootstrapNodeDeployment, ControllerAllNodesDeployment, ControllerSwiftDeployment, ControllerCephDeployment]
1475     properties:
1476       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1477       NodeConfigIdentifiers:
1478         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1479         controller_config: {get_attr: [Controller, attributes, config_identifier]}
1480         deployment_identifier: {get_param: DeployIdentifier}
1481       StepConfig: {get_attr: [ControllerServiceChain, step_config]}
1482
1483   ComputeNodesPostDeployment:
1484     type: OS::TripleO::ComputePostDeployment
1485     depends_on: [ComputeAllNodesDeployment, ComputeCephDeployment]
1486     properties:
1487       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1488       NodeConfigIdentifiers:
1489         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1490         compute_config: {get_attr: [Compute, attributes, config_identifier]}
1491         deployment_identifier: {get_param: DeployIdentifier}
1492       StepConfig: {get_attr: [ComputeServiceChain, step_config]}
1493
1494   ObjectStorageNodesPostDeployment:
1495     type: OS::TripleO::ObjectStoragePostDeployment
1496     depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment]
1497     properties:
1498       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1499       NodeConfigIdentifiers:
1500         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1501         objectstorage_config: {get_attr: [ObjectStorage, attributes, config_identifier]}
1502         deployment_identifier: {get_param: DeployIdentifier}
1503       StepConfig: {get_attr: [ObjectStorageServiceChain, step_config]}
1504
1505   BlockStorageNodesPostDeployment:
1506     type: OS::TripleO::BlockStoragePostDeployment
1507     depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment]
1508     properties:
1509       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1510       NodeConfigIdentifiers:
1511         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1512         blockstorage_config: {get_attr: [BlockStorage, attributes, config_identifier]}
1513         deployment_identifier: {get_param: DeployIdentifier}
1514
1515   CephStorageNodesPostDeployment:
1516     type: OS::TripleO::CephStoragePostDeployment
1517     depends_on: [ControllerNodesPostDeployment, CephStorageCephDeployment, CephStorageAllNodesDeployment]
1518     properties:
1519       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1520       NodeConfigIdentifiers:
1521         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1522         cephstorage_config: {get_attr: [CephStorage, attributes, config_identifier]}
1523         deployment_identifier: {get_param: DeployIdentifier}
1524       StepConfig: {get_attr: [CephStorageServiceChain, step_config]}
1525
1526 outputs:
1527   KeystoneURL:
1528     description: URL for the Overcloud Keystone service
1529     value: {get_attr: [EndpointMap, endpoint_map, KeystonePublic, uri]}
1530   KeystoneAdminVip:
1531     description: Keystone Admin VIP endpoint
1532     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1533   PublicVip:
1534     description: Controller VIP for public API endpoints
1535     value: {get_attr: [VipMap, net_ip_map, external]}
1536   AodhInternalVip:
1537     description: VIP for Aodh API internal endpoint
1538     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
1539   CeilometerInternalVip:
1540     description: VIP for Ceilometer API internal endpoint
1541     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1542   CinderInternalVip:
1543     description: VIP for Cinder API internal endpoint
1544     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1545   GlanceInternalVip:
1546     description: VIP for Glance API internal endpoint
1547     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1548   GnocchiInternalVip:
1549     description: VIP for Gnocchi API internal endpoint
1550     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
1551   HeatInternalVip:
1552     description: VIP for Heat API internal endpoint
1553     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1554   KeystoneInternalVip:
1555     description: VIP for Keystone API internal endpoint
1556     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1557   NeutronInternalVip:
1558     description: VIP for Neutron API internal endpoint
1559     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1560   NovaInternalVip:
1561     description: VIP for Nova API internal endpoint
1562     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1563   SaharaInternalVip:
1564     description: VIP for Sahara API internal endpoint
1565     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1566   SwiftInternalVip:
1567     description: VIP for Swift Proxy internal endpoint
1568     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1569   EndpointMap:
1570     description: |
1571       Mapping of the resources with the needed info for their endpoints.
1572       This includes the protocol used, the IP, port and also a full
1573       representation of the URI.
1574     value: {get_attr: [EndpointMap, endpoint_map]}
1575   HostsEntry:
1576     description: |
1577       The content that should be appended to your /etc/hosts if you want to get
1578       hostname-based access to the deployed nodes (useful for testing without
1579       setting up a DNS).
1580     value: {get_attr: [allNodesConfig, hosts_entries]}