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