Merge "Composable roles within services - NTP - ObjectStorage"
[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     description: A list of service resources (configured in the Heat
697                  resource_registry) which represent nested stacks
698                  for each service that should get installed on the CephStorage nodes.
699     type: comma_delimited_list
700
701   # Hostname format for each role
702   # Note %index% is translated into the index of the node, e.g 0/1/2 etc
703   # and %stackname% is replaced with OS::stack_name in the template below.
704   # If you want to use the heat generated names, pass '' (empty string).
705   ControllerHostnameFormat:
706     type: string
707     description: Format for Controller node hostnames
708     default: '%stackname%-controller-%index%'
709   ComputeHostnameFormat:
710     type: string
711     description: Format for Compute node hostnames
712     default: '%stackname%-novacompute-%index%'
713   BlockStorageHostnameFormat:
714     type: string
715     description: Format for BlockStorage node hostnames
716     default: '%stackname%-blockstorage-%index%'
717   ObjectStorageHostnameFormat:
718     type: string
719     description: Format for SwiftStorage node hostnames
720     default: '%stackname%-objectstorage-%index%'
721   CephStorageHostnameFormat:
722     type: string
723     description: Format for CephStorage node hostnames
724     default: '%stackname%-cephstorage-%index%'
725
726   # Identifiers to trigger tasks on nodes
727   UpdateIdentifier:
728     default: ''
729     type: string
730     description: >
731       Setting to a previously unused value during stack-update will trigger
732       package update on all nodes
733   DeployIdentifier:
734     default: ''
735     type: string
736     description: >
737       Setting this to a unique value will re-run any deployment tasks which
738       perform configuration on a Heat stack-update.
739
740   # If you want to remove a specific node from a resource group, you can pass
741   # the node name or id as a <Group>RemovalPolicies parameter, for example:
742   # ComputeRemovalPolicies: [{'resource_list': ['0']}]
743   ControllerRemovalPolicies:
744     default: []
745     type: json
746     description: >
747       List of resources to be removed from ControllerResourceGroup when
748       doing an update which requires removal of specific resources.
749   ComputeRemovalPolicies:
750     default: []
751     type: json
752     description: >
753       List of resources to be removed from ComputeResourceGroup when
754       doing an update which requires removal of specific resources.
755   BlockStorageRemovalPolicies:
756     default: []
757     type: json
758     description: >
759       List of resources to be removed from BlockStorageResourceGroup when
760       doing an update which requires removal of specific resources.
761   ObjectStorageRemovalPolicies:
762     default: []
763     type: json
764     description: >
765       List of resources to be removed from ObjectStorageResourceGroup when
766       doing an update which requires removal of specific resources.
767   CephStorageRemovalPolicies:
768     default: []
769     type: json
770     description: >
771       List of resources to be removed from CephStorageResourceGroup when
772       doing an update which requires removal of specific resources.
773
774 parameter_groups:
775 - label: deprecated
776   description: Do not use deprecated params, they will be removed.
777   parameters:
778   - controllerExtraConfig
779
780
781 resources:
782
783   HeatAuthEncryptionKey:
784     type: OS::Heat::RandomString
785
786   PcsdPassword:
787     type: OS::Heat::RandomString
788     properties:
789       length: 16
790
791   HorizonSecret:
792     type: OS::Heat::RandomString
793     properties:
794       length: 10
795
796   EndpointMap:
797     type: OS::TripleO::EndpointMap
798     properties:
799       CloudName: {get_param: CloudName}
800       CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
801       AodhApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
802       CinderApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
803       GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
804       GlanceRegistryVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
805       GnocchiApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
806       HeatApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
807       KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
808       KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
809       MysqlVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
810       NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
811       NovaApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
812       SaharaApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
813       SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
814       PublicVirtualIP: {get_attr: [VipMap, net_ip_uri_map, external]}
815
816   ControllerServiceChain:
817     type: OS::TripleO::Services
818     depends_on: Networks
819     properties:
820       Services: {get_param: ControllerServices}
821       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
822
823   Controller:
824     type: OS::Heat::ResourceGroup
825     depends_on: Networks
826     properties:
827       count: {get_param: ControllerCount}
828       removal_policies: {get_param: ControllerRemovalPolicies}
829       resource_def:
830         type: OS::TripleO::Controller
831         properties:
832           AdminPassword: {get_param: AdminPassword}
833           AodhPassword: {get_param: AodhPassword}
834           CeilometerBackend: {get_param: CeilometerBackend}
835           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
836           CeilometerPassword: {get_param: CeilometerPassword}
837           CeilometerMeterDispatcher: {get_param: CeilometerMeterDispatcher}
838           CloudDomain: {get_param: CloudDomain}
839           ControlVirtualInterface: {get_param: ControlVirtualInterface}
840           controllerExtraConfig: {get_param: controllerExtraConfig}
841           CorosyncIPv6: {get_param: CorosyncIPv6}
842           Debug: {get_param: Debug}
843           EnableFencing: {get_param: EnableFencing}
844           ManageFirewall: {get_param: ManageFirewall}
845           PurgeFirewallRules: {get_param: PurgeFirewallRules}
846           EnableGalera: {get_param: EnableGalera}
847           EnableCephStorage: {get_param: ControllerEnableCephStorage}
848           EnableSwiftStorage: {get_param: ControllerEnableSwiftStorage}
849           ExtraConfig: {get_param: ExtraConfig}
850           FencingConfig: {get_param: FencingConfig}
851           Flavor: {get_param: OvercloudControlFlavor}
852           GnocchiPassword: {get_param: GnocchiPassword}
853           GnocchiBackend: {get_param: GnocchiBackend}
854           GnocchiIndexerBackend: {get_param: GnocchiIndexerBackend}
855           HAProxySyslogAddress: {get_param: HAProxySyslogAddress}
856           HeatAuthEncryptionKey: {get_resource: HeatAuthEncryptionKey}
857           HorizonAllowedHosts: {get_param: HorizonAllowedHosts}
858           HorizonSecret: {get_resource: HorizonSecret}
859           Image: {get_param: controllerImage}
860           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
861           InstanceNameTemplate: {get_param: InstanceNameTemplate}
862           KeyName: {get_param: KeyName}
863           MemcachedIPv6: {get_param: MemcachedIPv6}
864           MysqlClusterUniquePart: {get_attr: [MysqlClusterUniquePart, value]}
865           MysqlInnodbBufferPoolSize: {get_param: MysqlInnodbBufferPoolSize}
866           MysqlMaxConnections: {get_param: MysqlMaxConnections}
867           MysqlRootPassword: {get_attr: [MysqlRootPassword, value]}
868           NeutronTenantMtu: {get_param: NeutronTenantMtu}
869           NeutronPublicInterface: {get_param: NeutronPublicInterface}
870           NeutronPassword: {get_param: NeutronPassword}
871           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
872           NovaIPv6: {get_param: NovaIPv6}
873           NovaPassword: {get_param: NovaPassword}
874           PcsdPassword: {get_resource: PcsdPassword}
875           PublicVirtualInterface: {get_param: PublicVirtualInterface}
876           RabbitPassword: {get_param: RabbitPassword}
877           RabbitUserName: {get_param: RabbitUserName}
878           RabbitCookie: {get_attr: [RabbitCookie, value]}
879           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
880           RabbitClientPort: {get_param: RabbitClientPort}
881           RedisPassword: {get_param: RedisPassword}
882           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
883           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
884           RedisVirtualIP: {get_attr: [RedisVirtualIP, ip_address]}
885           RedisVirtualIPUri: {get_attr: [RedisVirtualIP, ip_address_uri]}
886           SwiftHashSuffix: {get_param: SwiftHashSuffix}
887           SwiftMountCheck: {get_param: SwiftMountCheck}
888           SwiftMinPartHours: {get_param: SwiftMinPartHours}
889           SwiftPartPower: {get_param: SwiftPartPower}
890           SwiftReplicas: { get_param: SwiftReplicas}
891           TimeZone: {get_param: TimeZone}
892           VirtualIP: {get_attr: [VipMap, net_ip_map, ctlplane]} # deprecated. Use per service VIP settings instead now.
893           PublicVirtualIP: {get_attr: [VipMap, net_ip_map, external]}
894           ServiceNetMap: {get_param: ServiceNetMap}
895           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
896           CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
897           AodhApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
898           GnocchiApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
899           CinderApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
900           HeatApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
901           HeatApiVirtualIPUri: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
902           NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
903           SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
904           MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
905           NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
906           NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
907           SaharaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
908           UpdateIdentifier: {get_param: UpdateIdentifier}
909           Hostname:
910             str_replace:
911               template: {get_param: ControllerHostnameFormat}
912               params:
913                 '%stackname%': {get_param: 'OS::stack_name'}
914           NodeIndex: '%index%'
915           ServerMetadata: {get_param: ServerMetadata}
916           SchedulerHints: {get_param: ControllerSchedulerHints}
917           ServiceConfigSettings: {get_attr: [ControllerServiceChain, config_settings]}
918
919   ComputeServiceChain:
920     type: OS::TripleO::Services
921     properties:
922       Services: {get_param: ComputeServices}
923       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
924
925   Compute:
926     type: OS::Heat::ResourceGroup
927     depends_on: Networks
928     properties:
929       count: {get_param: ComputeCount}
930       removal_policies: {get_param: ComputeRemovalPolicies}
931       resource_def:
932         type: OS::TripleO::Compute
933         properties:
934           AdminPassword: {get_param: AdminPassword}
935           CeilometerComputeAgent: {get_param: CeilometerComputeAgent}
936           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
937           CeilometerPassword: {get_param: CeilometerPassword}
938           CinderEnableNfsBackend: {get_param: CinderEnableNfsBackend}
939           CinderEnableRbdBackend: {get_param: CinderEnableRbdBackend}
940           Debug: {get_param: Debug}
941           ExtraConfig: {get_param: ExtraConfig}
942           Flavor: {get_param: OvercloudComputeFlavor}
943           GlanceHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
944           Image: {get_param: NovaImage}
945           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
946           KeyName: {get_param: KeyName}
947           KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
948           KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
949           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
950           NeutronTenantMtu: {get_param: NeutronTenantMtu}
951           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
952           NeutronEnableL2Pop : {get_param: NeutronEnableL2Pop}
953           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
954           NeutronHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
955           NeutronNetworkType: {get_param: NeutronNetworkType}
956           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
957           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
958           NeutronPassword: {get_param: NeutronPassword}
959           NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
960           NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
961           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
962           NeutronCorePlugin: {get_param: NeutronCorePlugin}
963           NeutronServicePlugins: {get_param: NeutronServicePlugins}
964           NeutronTypeDrivers: {get_param: NeutronTypeDrivers}
965           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
966           NeutronAgentExtensions: {get_param: NeutronAgentExtensions}
967           # L3 HA and Failover is not relevant for Computes, should be removed
968           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
969           NeutronL3HA: {get_param: NeutronL3HA}
970           NovaApiHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
971           NovaComputeDriver: {get_param: NovaComputeDriver}
972           NovaComputeExtraConfig: {get_param: NovaComputeExtraConfig}
973           NovaComputeLibvirtType: {get_param: NovaComputeLibvirtType}
974           NovaComputeLibvirtVifDriver: {get_param: NovaComputeLibvirtVifDriver}
975           NovaEnableRbdBackend: {get_param: NovaEnableRbdBackend}
976           NovaIPv6: {get_param: NovaIPv6}
977           NovaPublicIP: {get_attr: [VipMap, net_ip_map, external]}
978           NovaPassword: {get_param: NovaPassword}
979           NovaOVSBridge: {get_param: NovaOVSBridge}
980           NovaSecurityGroupAPI: {get_param: NovaSecurityGroupAPI}
981           RabbitHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
982           RabbitPassword: {get_param: RabbitPassword}
983           RabbitUserName: {get_param: RabbitUserName}
984           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
985           RabbitClientPort: {get_param: RabbitClientPort}
986           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
987           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
988           ServiceNetMap: {get_param: ServiceNetMap}
989           TimeZone: {get_param: TimeZone}
990           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
991           UpdateIdentifier: {get_param: UpdateIdentifier}
992           Hostname:
993             str_replace:
994               template: {get_param: ComputeHostnameFormat}
995               params:
996                 '%stackname%': {get_param: 'OS::stack_name'}
997           CloudDomain: {get_param: CloudDomain}
998           ServerMetadata: {get_param: ServerMetadata}
999           SchedulerHints: {get_param: NovaComputeSchedulerHints}
1000           NodeIndex: '%index%'
1001           ServiceConfigSettings: {get_attr: [ComputeServiceChain, config_settings]}
1002
1003
1004   BlockStorage:
1005     type: OS::Heat::ResourceGroup
1006     depends_on: Networks
1007     properties:
1008       count: {get_param: BlockStorageCount}
1009       removal_policies: {get_param: BlockStorageRemovalPolicies}
1010       resource_def:
1011         type: OS::TripleO::BlockStorage
1012         properties:
1013           Debug: {get_param: Debug}
1014           Image: {get_param: BlockStorageImage}
1015           CinderISCSIHelper: {get_param: CinderISCSIHelper}
1016           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
1017           # Purpose of the dedicated BlockStorage nodes should be to use their local LVM
1018           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
1019           CinderPassword: {get_param: CinderPassword}
1020           KeyName: {get_param: KeyName}
1021           Flavor: {get_param: OvercloudBlockStorageFlavor}
1022           VirtualIP: {get_attr: [VipMap, net_ip_map, ctlplane]}
1023           GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1024           RabbitPassword: {get_param: RabbitPassword}
1025           RabbitUserName: {get_param: RabbitUserName}
1026           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
1027           RabbitClientPort: {get_param: RabbitClientPort}
1028           TimeZone: {get_param: TimeZone}
1029           NtpServer: {get_param: NtpServer}
1030           UpdateIdentifier: {get_param: UpdateIdentifier}
1031           Hostname:
1032             str_replace:
1033               template: {get_param: BlockStorageHostnameFormat}
1034               params:
1035                 '%stackname%': {get_param: 'OS::stack_name'}
1036           ServiceNetMap: {get_param: ServiceNetMap}
1037           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1038           ExtraConfig: {get_param: ExtraConfig}
1039           BlockStorageExtraConfig: {get_param: BlockStorageExtraConfig}
1040           CloudDomain: {get_param: CloudDomain}
1041           ServerMetadata: {get_param: ServerMetadata}
1042           SchedulerHints: {get_param: BlockStorageSchedulerHints}
1043           NodeIndex: '%index%'
1044
1045   ObjectStorageServiceChain:
1046     type: OS::TripleO::Services
1047     properties:
1048       Services: {get_param: ObjectStorageServices}
1049       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1050
1051   ObjectStorage:
1052     type: OS::Heat::ResourceGroup
1053     depends_on: Networks
1054     properties:
1055       count: {get_param: ObjectStorageCount}
1056       removal_policies: {get_param: ObjectStorageRemovalPolicies}
1057       resource_def:
1058         type: OS::TripleO::ObjectStorage
1059         properties:
1060           KeyName: {get_param: KeyName}
1061           Flavor: {get_param: OvercloudSwiftStorageFlavor}
1062           HashSuffix: {get_param: SwiftHashSuffix}
1063           MountCheck: {get_param: SwiftMountCheck}
1064           MinPartHours: {get_param: SwiftMinPartHours}
1065           PartPower: {get_param: SwiftPartPower}
1066           Image: {get_param: SwiftStorageImage}
1067           Replicas: { get_param: SwiftReplicas}
1068           TimeZone: {get_param: TimeZone}
1069           UpdateIdentifier: {get_param: UpdateIdentifier}
1070           ServiceNetMap: {get_param: ServiceNetMap}
1071           Hostname:
1072             str_replace:
1073               template: {get_param: ObjectStorageHostnameFormat}
1074               params:
1075                 '%stackname%': {get_param: 'OS::stack_name'}
1076           ExtraConfig: {get_param: ExtraConfig}
1077           ObjectStorageExtraConfig: {get_param: ObjectStorageExtraConfig}
1078           CloudDomain: {get_param: CloudDomain}
1079           ServerMetadata: {get_param: ServerMetadata}
1080           SchedulerHints: {get_param: ObjectStorageSchedulerHints}
1081           NodeIndex: '%index%'
1082           ServiceConfigSettings: {get_attr: [ObjectStorageServiceChain, config_settings]}
1083
1084   CephStorageServiceChain:
1085     type: OS::TripleO::Services
1086     properties:
1087       Services: {get_param: CephStorageServices}
1088       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1089
1090   CephStorage:
1091     type: OS::Heat::ResourceGroup
1092     depends_on: Networks
1093     properties:
1094       count: {get_param: CephStorageCount}
1095       removal_policies: {get_param: CephStorageRemovalPolicies}
1096       resource_def:
1097         type: OS::TripleO::CephStorage
1098         properties:
1099           Image: {get_param: CephStorageImage}
1100           KeyName: {get_param: KeyName}
1101           Flavor: {get_param: OvercloudCephStorageFlavor}
1102           NtpServer: {get_param: NtpServer}
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]}