Merge "Sahara Integration"
[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           CloudName: {get_param: CloudName}
863           CloudDomain: {get_param: CloudDomain}
864           ControlVirtualInterface: {get_param: ControlVirtualInterface}
865           ControllerExtraConfig: {get_param: controllerExtraConfig}
866           Debug: {get_param: Debug}
867           EnableFencing: {get_param: EnableFencing}
868           ManageFirewall: {get_param: ManageFirewall}
869           PurgeFirewallRules: {get_param: PurgeFirewallRules}
870           EnableGalera: {get_param: EnableGalera}
871           EnableCephStorage: {get_param: ControllerEnableCephStorage}
872           EnableSwiftStorage: {get_param: ControllerEnableSwiftStorage}
873           ExtraConfig: {get_param: ExtraConfig}
874           FencingConfig: {get_param: FencingConfig}
875           Flavor: {get_param: OvercloudControlFlavor}
876           GlancePassword: {get_param: GlancePassword}
877           GlanceBackend: {get_param: GlanceBackend}
878           GlanceNotifierStrategy: {get_param: GlanceNotifierStrategy}
879           GlanceLogFile: {get_param: GlanceLogFile}
880           HAProxySyslogAddress: {get_param: HAProxySyslogAddress}
881           HeatPassword: {get_param: HeatPassword}
882           HeatStackDomainAdminPassword: {get_param: HeatStackDomainAdminPassword}
883           HeatAuthEncryptionKey: {get_resource: HeatAuthEncryptionKey}
884           HorizonAllowedHosts: {get_param: HorizonAllowedHosts}
885           HorizonSecret: {get_resource: HorizonSecret}
886           Image: {get_param: controllerImage}
887           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
888           InstanceNameTemplate: {get_param: InstanceNameTemplate}
889           KeyName: {get_param: KeyName}
890           KeystoneCACertificate: {get_param: KeystoneCACertificate}
891           KeystoneSigningCertificate: {get_param: KeystoneSigningCertificate}
892           KeystoneSigningKey: {get_param: KeystoneSigningKey}
893           KeystoneSSLCertificate: {get_param: KeystoneSSLCertificate}
894           KeystoneSSLCertificateKey: {get_param: KeystoneSSLCertificateKey}
895           KeystoneNotificationDriver: {get_param: KeystoneNotificationDriver}
896           KeystoneNotificationFormat: {get_param: KeystoneNotificationFormat}
897           MysqlClusterUniquePart: {get_attr: [MysqlClusterUniquePart, value]}
898           MysqlInnodbBufferPoolSize: {get_param: MysqlInnodbBufferPoolSize}
899           MysqlMaxConnections: {get_param: MysqlMaxConnections}
900           MysqlRootPassword: {get_attr: [MysqlRootPassword, value]}
901           NeutronPublicInterfaceIP: {get_param: NeutronPublicInterfaceIP}
902           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
903           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
904           NeutronExternalNetworkBridge: {get_param: NeutronExternalNetworkBridge}
905           NeutronEnableIsolatedMetadata: {get_param: NeutronEnableIsolatedMetadata}
906           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
907           NeutronEnableL2Pop: {get_param: NeutronEnableL2Pop}
908           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
909           NeutronPublicInterface: {get_param: NeutronPublicInterface}
910           NeutronPublicInterfaceDefaultRoute: {get_param: NeutronPublicInterfaceDefaultRoute}
911           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
912           NeutronPassword: {get_param: NeutronPassword}
913           NeutronDnsmasqOptions: {get_param: NeutronDnsmasqOptions}
914           NeutronDVR: {get_param: NeutronDVR}
915           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
916           NeutronAgentMode: {get_param: NeutronAgentMode}
917           NeutronCorePlugin: {get_param: NeutronCorePlugin}
918           NeutronServicePlugins: {get_param: NeutronServicePlugins}
919           NeutronTypeDrivers: {get_param: NeutronTypeDrivers}
920           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
921           NeutronPluginExtensions: {get_param: NeutronPluginExtensions}
922           NeutronAgentExtensions: {get_param: NeutronAgentExtensions}
923           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
924           NeutronL3HA: {get_param: NeutronL3HA}
925           NeutronDhcpAgentsPerNetwork: {get_param: NeutronDhcpAgentsPerNetwork}
926           NeutronNetworkType: {get_param: NeutronNetworkType}
927           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
928           NovaPassword: {get_param: NovaPassword}
929           NtpServer: {get_param: NtpServer}
930           MongoDbNoJournal: {get_param: MongoDbNoJournal}
931           PcsdPassword: {get_resource: PcsdPassword}
932           PublicVirtualInterface: {get_param: PublicVirtualInterface}
933           RabbitPassword: {get_param: RabbitPassword}
934           RabbitUserName: {get_param: RabbitUserName}
935           RabbitCookie: {get_attr: [RabbitCookie, value]}
936           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
937           RabbitClientPort: {get_param: RabbitClientPort}
938           RabbitFDLimit: {get_param: RabbitFDLimit}
939           SaharaPassword: {get_param: SaharaPassword}
940           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
941           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
942           RedisVirtualIP: {get_attr: [RedisVirtualIP, ip_address]}
943           SwiftHashSuffix: {get_param: SwiftHashSuffix}
944           SwiftMountCheck: {get_param: SwiftMountCheck}
945           SwiftMinPartHours: {get_param: SwiftMinPartHours}
946           SwiftPartPower: {get_param: SwiftPartPower}
947           SwiftPassword: {get_param: SwiftPassword}
948           SwiftReplicas: { get_param: SwiftReplicas}
949           TimeZone: {get_param: TimeZone}
950           VirtualIP: {get_attr: [VipMap, net_ip_map, ctlplane]} # deprecated. Use per service VIP settings instead now.
951           PublicVirtualIP: {get_attr: [VipMap, net_ip_map, external]}
952           ServiceNetMap: {get_param: ServiceNetMap}
953           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
954           CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
955           CinderApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
956           HeatApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
957           GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
958           GlanceRegistryVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
959           NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
960           SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
961           MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
962           KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
963           KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
964           NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
965           NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
966           SaharaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
967           UpdateIdentifier: {get_param: UpdateIdentifier}
968           Hostname:
969             str_replace:
970               template: {get_param: ControllerHostnameFormat}
971               params:
972                 '%stackname%': {get_param: 'OS::stack_name'}
973           NodeIndex: '%index%'
974           ServerMetadata: {get_param: ServerMetadata}
975           SchedulerHints: {get_param: ControllerSchedulerHints}
976
977   Compute:
978     type: OS::Heat::ResourceGroup
979     depends_on: Networks
980     properties:
981       count: {get_param: ComputeCount}
982       removal_policies: {get_param: ComputeRemovalPolicies}
983       resource_def:
984         type: OS::TripleO::Compute
985         properties:
986           AdminPassword: {get_param: AdminPassword}
987           CeilometerComputeAgent: {get_param: CeilometerComputeAgent}
988           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
989           CeilometerPassword: {get_param: CeilometerPassword}
990           CinderEnableNfsBackend: {get_param: CinderEnableNfsBackend}
991           CinderEnableRbdBackend: {get_param: CinderEnableRbdBackend}
992           Debug: {get_param: Debug}
993           ExtraConfig: {get_param: ExtraConfig}
994           Flavor: {get_param: OvercloudComputeFlavor}
995           GlanceHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
996           Image: {get_param: NovaImage}
997           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
998           KeyName: {get_param: KeyName}
999           KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1000           KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1001           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
1002           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
1003           NeutronEnableL2Pop : {get_param: NeutronEnableL2Pop}
1004           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
1005           NeutronHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1006           NeutronNetworkType: {get_param: NeutronNetworkType}
1007           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
1008           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
1009           NeutronPassword: {get_param: NeutronPassword}
1010           NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
1011           NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
1012           NeutronDVR: {get_param: NeutronDVR}
1013           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
1014           NeutronAgentMode: {get_param: NeutronComputeAgentMode}
1015           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
1016           NeutronCorePlugin: {get_param: NeutronCorePlugin}
1017           NeutronServicePlugins: {get_param: NeutronServicePlugins}
1018           NeutronTypeDrivers: {get_param: NeutronTypeDrivers}
1019           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
1020           NeutronAgentExtensions: {get_param: NeutronAgentExtensions}
1021           # L3 HA and Failover is not relevant for Computes, should be removed
1022           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
1023           NeutronL3HA: {get_param: NeutronL3HA}
1024           NovaApiHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1025           NovaComputeDriver: {get_param: NovaComputeDriver}
1026           NovaComputeExtraConfig: {get_param: NovaComputeExtraConfig}
1027           NovaComputeLibvirtType: {get_param: NovaComputeLibvirtType}
1028           NovaComputeLibvirtVifDriver: {get_param: NovaComputeLibvirtVifDriver}
1029           NovaEnableRbdBackend: {get_param: NovaEnableRbdBackend}
1030           NovaPublicIP: {get_attr: [VipMap, net_ip_map, external]}
1031           NovaPassword: {get_param: NovaPassword}
1032           NovaOVSBridge: {get_param: NovaOVSBridge}
1033           NovaSecurityGroupAPI: {get_param: NovaSecurityGroupAPI}
1034           NtpServer: {get_param: NtpServer}
1035           RabbitHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1036           RabbitPassword: {get_param: RabbitPassword}
1037           RabbitUserName: {get_param: RabbitUserName}
1038           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
1039           RabbitClientPort: {get_param: RabbitClientPort}
1040           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
1041           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
1042           ServiceNetMap: {get_param: ServiceNetMap}
1043           TimeZone: {get_param: TimeZone}
1044           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1045           UpdateIdentifier: {get_param: UpdateIdentifier}
1046           Hostname:
1047             str_replace:
1048               template: {get_param: ComputeHostnameFormat}
1049               params:
1050                 '%stackname%': {get_param: 'OS::stack_name'}
1051           CloudDomain: {get_param: CloudDomain}
1052           ServerMetadata: {get_param: ServerMetadata}
1053           SchedulerHints: {get_param: NovaComputeSchedulerHints}
1054
1055   BlockStorage:
1056     type: OS::Heat::ResourceGroup
1057     depends_on: Networks
1058     properties:
1059       count: {get_param: BlockStorageCount}
1060       removal_policies: {get_param: BlockStorageRemovalPolicies}
1061       resource_def:
1062         type: OS::TripleO::BlockStorage
1063         properties:
1064           Debug: {get_param: Debug}
1065           Image: {get_param: BlockStorageImage}
1066           CinderISCSIHelper: {get_param: CinderISCSIHelper}
1067           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
1068           # Purpose of the dedicated BlockStorage nodes should be to use their local LVM
1069           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
1070           CinderPassword: {get_param: CinderPassword}
1071           KeyName: {get_param: KeyName}
1072           Flavor: {get_param: OvercloudBlockStorageFlavor}
1073           VirtualIP: {get_attr: [VipMap, net_ip_map, ctlplane]}
1074           GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1075           RabbitPassword: {get_param: RabbitPassword}
1076           RabbitUserName: {get_param: RabbitUserName}
1077           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
1078           RabbitClientPort: {get_param: RabbitClientPort}
1079           TimeZone: {get_param: TimeZone}
1080           NtpServer: {get_param: NtpServer}
1081           UpdateIdentifier: {get_param: UpdateIdentifier}
1082           Hostname:
1083             str_replace:
1084               template: {get_param: BlockStorageHostnameFormat}
1085               params:
1086                 '%stackname%': {get_param: 'OS::stack_name'}
1087           ServiceNetMap: {get_param: ServiceNetMap}
1088           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1089           MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1090           ExtraConfig: {get_param: ExtraConfig}
1091           BlockStorageExtraConfig: {get_param: BlockStorageExtraConfig}
1092           CloudDomain: {get_param: CloudDomain}
1093           ServerMetadata: {get_param: ServerMetadata}
1094           SchedulerHints: {get_param: BlockStorageSchedulerHints}
1095
1096   ObjectStorage:
1097     type: OS::Heat::ResourceGroup
1098     depends_on: Networks
1099     properties:
1100       count: {get_param: ObjectStorageCount}
1101       removal_policies: {get_param: ObjectStorageRemovalPolicies}
1102       resource_def:
1103         type: OS::TripleO::ObjectStorage
1104         properties:
1105           KeyName: {get_param: KeyName}
1106           Flavor: {get_param: OvercloudSwiftStorageFlavor}
1107           HashSuffix: {get_param: SwiftHashSuffix}
1108           MountCheck: {get_param: SwiftMountCheck}
1109           MinPartHours: {get_param: SwiftMinPartHours}
1110           PartPower: {get_param: SwiftPartPower}
1111           Image: {get_param: SwiftStorageImage}
1112           Replicas: { get_param: SwiftReplicas}
1113           TimeZone: {get_param: TimeZone}
1114           NtpServer: {get_param: NtpServer}
1115           UpdateIdentifier: {get_param: UpdateIdentifier}
1116           ServiceNetMap: {get_param: ServiceNetMap}
1117           Hostname:
1118             str_replace:
1119               template: {get_param: ObjectStorageHostnameFormat}
1120               params:
1121                 '%stackname%': {get_param: 'OS::stack_name'}
1122           ExtraConfig: {get_param: ExtraConfig}
1123           ObjectStorageExtraConfig: {get_param: ObjectStorageExtraConfig}
1124           CloudDomain: {get_param: CloudDomain}
1125           ServerMetadata: {get_param: ServerMetadata}
1126           SchedulerHints: {get_param: ObjectStorageSchedulerHints}
1127
1128   CephStorage:
1129     type: OS::Heat::ResourceGroup
1130     depends_on: Networks
1131     properties:
1132       count: {get_param: CephStorageCount}
1133       removal_policies: {get_param: CephStorageRemovalPolicies}
1134       resource_def:
1135         type: OS::TripleO::CephStorage
1136         properties:
1137           Image: {get_param: CephStorageImage}
1138           KeyName: {get_param: KeyName}
1139           Flavor: {get_param: OvercloudCephStorageFlavor}
1140           NtpServer: {get_param: NtpServer}
1141           ServiceNetMap: {get_param: ServiceNetMap}
1142           TimeZone: {get_param: TimeZone}
1143           UpdateIdentifier: {get_param: UpdateIdentifier}
1144           Hostname:
1145             str_replace:
1146               template: {get_param: CephStorageHostnameFormat}
1147               params:
1148                 '%stackname%': {get_param: 'OS::stack_name'}
1149           ExtraConfig: {get_param: ExtraConfig}
1150           CephStorageExtraConfig: {get_param: CephStorageExtraConfig}
1151           CloudDomain: {get_param: CloudDomain}
1152           ServerMetadata: {get_param: ServerMetadata}
1153           SchedulerHints: {get_param: CephStorageSchedulerHints}
1154
1155   ControllerIpListMap:
1156     type: OS::TripleO::Network::Ports::NetIpListMap
1157     properties:
1158       ControlPlaneIpList: {get_attr: [Controller, ip_address]}
1159       ExternalIpList: {get_attr: [Controller, external_ip_address]}
1160       InternalApiIpList: {get_attr: [Controller, internal_api_ip_address]}
1161       StorageIpList: {get_attr: [Controller, storage_ip_address]}
1162       StorageMgmtIpList: {get_attr: [Controller, storage_mgmt_ip_address]}
1163       TenantIpList: {get_attr: [Controller, tenant_ip_address]}
1164       ManagementIpList: {get_attr: [Controller, management_ip_address]}
1165
1166   allNodesConfig:
1167     type: OS::TripleO::AllNodes::SoftwareConfig
1168     properties:
1169       compute_hosts: {get_attr: [Compute, hosts_entry]}
1170       controller_hosts: {get_attr: [Controller, hosts_entry]}
1171       controller_ips: {get_attr: [Controller, ip_address]}
1172       block_storage_hosts: {get_attr: [BlockStorage, hosts_entry]}
1173       object_storage_hosts: {get_attr: [ObjectStorage, hosts_entry]}
1174       ceph_storage_hosts: {get_attr: [CephStorage, hosts_entry]}
1175       controller_names: {get_attr: [Controller, hostname]}
1176       rabbit_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1177       mongo_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
1178       redis_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
1179       memcache_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
1180       mysql_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1181       horizon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1182       heat_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1183       swift_proxy_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1184       ceilometer_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1185       nova_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1186       nova_metadata_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1187       glance_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1188       glance_registry_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1189       cinder_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1190       neutron_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1191       keystone_public_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1192       keystone_admin_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1193       sahara_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1194       DeployIdentifier: {get_param: DeployIdentifier}
1195       UpdateIdentifier: {get_param: UpdateIdentifier}
1196
1197   MysqlRootPassword:
1198     type: OS::Heat::RandomString
1199     properties:
1200       length: 10
1201
1202   MysqlClusterUniquePart:
1203     type: OS::Heat::RandomString
1204     properties:
1205       length: 10
1206
1207   RabbitCookie:
1208     type: OS::Heat::RandomString
1209     properties:
1210       length: 20
1211       salt: {get_param: RabbitCookieSalt}
1212
1213   # creates the network architecture
1214   Networks:
1215     type: OS::TripleO::Network
1216
1217   ControlVirtualIP:
1218     type: OS::Neutron::Port
1219     depends_on: Networks
1220     properties:
1221       name: control_virtual_ip
1222       network: {get_param: NeutronControlPlaneID}
1223       fixed_ips: {get_param: ControlFixedIPs}
1224       replacement_policy: AUTO
1225
1226   RedisVirtualIP:
1227     depends_on: Networks
1228     type: OS::TripleO::Network::Ports::RedisVipPort
1229     properties:
1230       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1231       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
1232       PortName: redis_virtual_ip
1233       NetworkName: {get_param: [ServiceNetMap, RedisNetwork]}
1234       ServiceName: redis
1235
1236   # The public VIP is on the External net, falls back to ctlplane
1237   PublicVirtualIP:
1238     depends_on: Networks
1239     type: OS::TripleO::Network::Ports::ExternalVipPort
1240     properties:
1241       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1242       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
1243       PortName: public_virtual_ip
1244       FixedIPs: {get_param: PublicVirtualFixedIPs}
1245
1246   InternalApiVirtualIP:
1247     depends_on: Networks
1248     type: OS::TripleO::Network::Ports::InternalApiVipPort
1249     properties:
1250       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1251       PortName: internal_api_virtual_ip
1252
1253   StorageVirtualIP:
1254     depends_on: Networks
1255     type: OS::TripleO::Network::Ports::StorageVipPort
1256     properties:
1257       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1258       PortName: storage_virtual_ip
1259
1260   StorageMgmtVirtualIP:
1261     depends_on: Networks
1262     type: OS::TripleO::Network::Ports::StorageMgmtVipPort
1263     properties:
1264       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1265       PortName: storage_management_virtual_ip
1266
1267   VipMap:
1268     type: OS::TripleO::Network::Ports::NetVipMap
1269     properties:
1270       ControlPlaneIp: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1271       ExternalIp: {get_attr: [PublicVirtualIP, ip_address]}
1272       InternalApiIp: {get_attr: [InternalApiVirtualIP, ip_address]}
1273       StorageIp: {get_attr: [StorageVirtualIP, ip_address]}
1274       StorageMgmtIp: {get_attr: [StorageMgmtVirtualIP, ip_address]}
1275       # No tenant or management VIP required
1276
1277   VipConfig:
1278     type: OS::TripleO::VipConfig
1279
1280   VipDeployment:
1281     type: OS::Heat::StructuredDeployments
1282     properties:
1283       config: {get_resource: VipConfig}
1284       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1285       input_values:
1286         # service VIP mappings
1287         keystone_admin_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1288         keystone_public_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1289         neutron_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1290         cinder_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1291         glance_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1292         glance_registry_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1293         swift_proxy_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1294         nova_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1295         nova_metadata_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1296         ceilometer_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1297         heat_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1298         horizon_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1299         redis_vip: {get_attr: [RedisVirtualIP, ip_address]}
1300         mysql_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1301         rabbit_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1302         # direct configuration of Virtual IPs for each network
1303         control_virtual_ip: {get_attr: [VipMap, net_ip_map, ctlplane]}
1304         public_virtual_ip: {get_attr: [VipMap, net_ip_map, external]}
1305         internal_api_virtual_ip: {get_attr: [VipMap, net_ip_map, internal_api]}
1306         sahara_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1307         storage_virtual_ip: {get_attr: [VipMap, net_ip_map, storage]}
1308         storage_mgmt_virtual_ip: {get_attr: [VipMap, net_ip_map, storage_mgmt]}
1309
1310   ControllerBootstrapNodeConfig:
1311     type: OS::TripleO::BootstrapNode::SoftwareConfig
1312     properties:
1313       bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
1314       bootstrap_nodeid_ip: {get_attr: [Controller, resource.0.ip_address]}
1315
1316   ControllerBootstrapNodeDeployment:
1317     type: OS::Heat::StructuredDeployments
1318     properties:
1319       config: {get_attr: [ControllerBootstrapNodeConfig, config_id]}
1320       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1321
1322   ControllerSwiftDeployment:
1323     type: OS::Heat::StructuredDeployments
1324     properties:
1325       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
1326       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1327
1328   ObjectStorageSwiftDeployment:
1329     type: OS::Heat::StructuredDeployments
1330     properties:
1331       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
1332       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1333
1334   SwiftDevicesAndProxyConfig:
1335     type: OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig
1336     properties:
1337       controller_swift_devices: {get_attr: [Controller, swift_device]}
1338       object_store_swift_devices: {get_attr: [ObjectStorage, swift_device]}
1339       controller_swift_proxy_memcaches: {get_attr: [Controller, swift_proxy_memcache]}
1340
1341   ComputeCephDeployment:
1342     type: OS::Heat::StructuredDeployments
1343     properties:
1344       config: {get_attr: [CephClusterConfig, config_id]}
1345       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1346
1347   ControllerCephDeployment:
1348     type: OS::Heat::StructuredDeployments
1349     properties:
1350       config: {get_attr: [CephClusterConfig, config_id]}
1351       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1352
1353   CephStorageCephDeployment:
1354     type: OS::Heat::StructuredDeployments
1355     properties:
1356       config: {get_attr: [CephClusterConfig, config_id]}
1357       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1358
1359   CephClusterConfig:
1360     type: OS::TripleO::CephClusterConfig::SoftwareConfig
1361     properties:
1362       ceph_storage_count: {get_param: CephStorageCount}
1363       ceph_fsid: {get_param: CephClusterFSID}
1364       ceph_mon_key: {get_param: CephMonKey}
1365       ceph_admin_key: {get_param: CephAdminKey}
1366       ceph_client_key: {get_param: CephClientKey}
1367       ceph_external_mon_ips: {get_param: CephExternalMonHost}
1368       ceph_mon_names: {get_attr: [Controller, hostname]}
1369       ceph_mon_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
1370
1371   ControllerClusterConfig:
1372     type: OS::Heat::StructuredConfig
1373     properties:
1374       group: os-apply-config
1375       config:
1376         corosync:
1377           nodes: {get_attr: [Controller, corosync_node]}
1378         horizon:
1379           caches:
1380             memcached:
1381               nodes: {get_attr: [Controller, hostname]}
1382         mysql:
1383           nodes: {get_attr: [Controller, corosync_node]}
1384         haproxy:
1385           nodes: {get_attr: [Controller, corosync_node]}
1386
1387   ControllerClusterDeployment:
1388     type: OS::Heat::StructuredDeployments
1389     properties:
1390       config: {get_resource: ControllerClusterConfig}
1391       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1392
1393   ControllerAllNodesDeployment:
1394     type: OS::Heat::StructuredDeployments
1395     properties:
1396       config: {get_attr: [allNodesConfig, config_id]}
1397       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1398
1399   ComputeAllNodesDeployment:
1400     type: OS::Heat::StructuredDeployments
1401     properties:
1402       config: {get_attr: [allNodesConfig, config_id]}
1403       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1404
1405   BlockStorageAllNodesDeployment:
1406     type: OS::Heat::StructuredDeployments
1407     properties:
1408       config: {get_attr: [allNodesConfig, config_id]}
1409       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1410
1411   ObjectStorageAllNodesDeployment:
1412     type: OS::Heat::StructuredDeployments
1413     properties:
1414       config: {get_attr: [allNodesConfig, config_id]}
1415       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1416
1417   CephStorageAllNodesDeployment:
1418     type: OS::Heat::StructuredDeployments
1419     properties:
1420       config: {get_attr: [allNodesConfig, config_id]}
1421       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1422
1423   # All Nodes Validations
1424   AllNodesValidationConfig:
1425     type: OS::TripleO::AllNodes::Validation
1426     properties:
1427       PingTestIps:
1428         list_join:
1429         - ' '
1430         - - {get_attr: [Controller, resource.0.external_ip_address]}
1431           - {get_attr: [Controller, resource.0.internal_api_ip_address]}
1432           - {get_attr: [Controller, resource.0.storage_ip_address]}
1433           - {get_attr: [Controller, resource.0.storage_mgmt_ip_address]}
1434           - {get_attr: [Controller, resource.0.tenant_ip_address]}
1435
1436   ControllerAllNodesValidationDeployment:
1437     type: OS::Heat::StructuredDeployments
1438     depends_on: ControllerAllNodesDeployment
1439     properties:
1440       config: {get_resource: AllNodesValidationConfig}
1441       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1442
1443   ComputeAllNodesValidationDeployment:
1444     type: OS::Heat::StructuredDeployments
1445     depends_on: ComputeAllNodesDeployment
1446     properties:
1447       config: {get_resource: AllNodesValidationConfig}
1448       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1449
1450   BlockStorageAllNodesValidationDeployment:
1451     type: OS::Heat::StructuredDeployments
1452     depends_on: BlockStorageAllNodesDeployment
1453     properties:
1454       config: {get_resource: AllNodesValidationConfig}
1455       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1456
1457   ObjectStorageAllNodesValidationDeployment:
1458     type: OS::Heat::StructuredDeployments
1459     depends_on: ObjectStorageAllNodesDeployment
1460     properties:
1461       config: {get_resource: AllNodesValidationConfig}
1462       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1463
1464   CephStorageAllNodesValidationDeployment:
1465     type: OS::Heat::StructuredDeployments
1466     depends_on: CephStorageAllNodesDeployment
1467     properties:
1468       config: {get_resource: AllNodesValidationConfig}
1469       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1470
1471   # Optional ExtraConfig for all nodes - all roles are passed in here, but
1472   # the nested template may configure each role differently (or not at all)
1473   AllNodesExtraConfig:
1474     type: OS::TripleO::AllNodesExtraConfig
1475     properties:
1476       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
1477       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
1478       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1479       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1480       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1481
1482   # Nested stack deployment runs after all other controller deployments
1483   ControllerNodesPostDeployment:
1484     type: OS::TripleO::ControllerPostDeployment
1485     depends_on: [ControllerBootstrapNodeDeployment, ControllerAllNodesDeployment, ControllerSwiftDeployment, ControllerCephDeployment]
1486     properties:
1487       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1488       NodeConfigIdentifiers:
1489         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1490         controller_config: {get_attr: [Controller, attributes, config_identifier]}
1491         deployment_identifier: {get_param: DeployIdentifier}
1492
1493   ComputeNodesPostDeployment:
1494     type: OS::TripleO::ComputePostDeployment
1495     depends_on: [ComputeAllNodesDeployment, ComputeCephDeployment]
1496     properties:
1497       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1498       NodeConfigIdentifiers:
1499         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1500         compute_config: {get_attr: [Compute, attributes, config_identifier]}
1501         deployment_identifier: {get_param: DeployIdentifier}
1502
1503   ObjectStorageNodesPostDeployment:
1504     type: OS::TripleO::ObjectStoragePostDeployment
1505     depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment]
1506     properties:
1507       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1508       NodeConfigIdentifiers:
1509         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1510         objectstorage_config: {get_attr: [ObjectStorage, attributes, config_identifier]}
1511         deployment_identifier: {get_param: DeployIdentifier}
1512
1513   BlockStorageNodesPostDeployment:
1514     type: OS::TripleO::BlockStoragePostDeployment
1515     depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment]
1516     properties:
1517       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1518       NodeConfigIdentifiers:
1519         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1520         blockstorage_config: {get_attr: [BlockStorage, attributes, config_identifier]}
1521         deployment_identifier: {get_param: DeployIdentifier}
1522
1523   CephStorageNodesPostDeployment:
1524     type: OS::TripleO::CephStoragePostDeployment
1525     depends_on: [ControllerNodesPostDeployment, CephStorageCephDeployment, CephStorageAllNodesDeployment]
1526     properties:
1527       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1528       NodeConfigIdentifiers:
1529         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1530         cephstorage_config: {get_attr: [CephStorage, attributes, config_identifier]}
1531         deployment_identifier: {get_param: DeployIdentifier}
1532
1533 outputs:
1534   KeystoneURL:
1535     description: URL for the Overcloud Keystone service
1536     value: {get_attr: [EndpointMap, endpoint_map, KeystonePublic, uri]}
1537   KeystoneAdminVip:
1538     description: Keystone Admin VIP endpoint
1539     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1540   PublicVip:
1541     description: Controller VIP for public API endpoints
1542     value: {get_attr: [VipMap, net_ip_map, external]}
1543   CeilometerInternalVip:
1544     description: VIP for Ceilometer API internal endpoint
1545     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1546   CinderInternalVip:
1547     description: VIP for Cinder API internal endpoint
1548     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1549   GlanceInternalVip:
1550     description: VIP for Glance API internal endpoint
1551     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1552   HeatInternalVip:
1553     description: VIP for Heat API internal endpoint
1554     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1555   KeystoneInternalVip:
1556     description: VIP for Keystone API internal endpoint
1557     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1558   NeutronInternalVip:
1559     description: VIP for Neutron API internal endpoint
1560     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1561   NovaInternalVip:
1562     description: VIP for Nova API internal endpoint
1563     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1564   SaharaInternalVip:
1565     description: VIP for Sahara API internal endpoint
1566     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1567   SwiftInternalVip:
1568     description: VIP for Swift Proxy internal endpoint
1569     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1570   HostsEntry:
1571     description: |
1572       The content that should be appended to your /etc/hosts if you want to get
1573       hostname-based access to the deployed nodes (useful for testing without
1574       setting up a DNS).
1575     value: {get_attr: [allNodesConfig, hosts_entries]}