Merge "puppet: allow config of ad-hoc Neutron settings"
[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:4094", ]
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:4094", ]
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       name: VipDeployment
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       name: ControllerBootstrapNodeDeployment
1320       config: {get_attr: [ControllerBootstrapNodeConfig, config_id]}
1321       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1322
1323   ControllerSwiftDeployment:
1324     type: OS::Heat::StructuredDeployments
1325     properties:
1326       name: ControllerSwiftDeployment
1327       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
1328       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1329
1330   ObjectStorageSwiftDeployment:
1331     type: OS::Heat::StructuredDeployments
1332     properties:
1333       name: ObjectStorageSwiftDeployment
1334       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
1335       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1336
1337   SwiftDevicesAndProxyConfig:
1338     type: OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig
1339     properties:
1340       controller_swift_devices: {get_attr: [Controller, swift_device]}
1341       object_store_swift_devices: {get_attr: [ObjectStorage, swift_device]}
1342       controller_swift_proxy_memcaches: {get_attr: [Controller, swift_proxy_memcache]}
1343
1344   ComputeCephDeployment:
1345     type: OS::Heat::StructuredDeployments
1346     properties:
1347       name: ComputeCephDeployment
1348       config: {get_attr: [CephClusterConfig, config_id]}
1349       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1350
1351   ControllerCephDeployment:
1352     type: OS::Heat::StructuredDeployments
1353     properties:
1354       name: ControllerCephDeployment
1355       config: {get_attr: [CephClusterConfig, config_id]}
1356       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1357
1358   CephStorageCephDeployment:
1359     type: OS::Heat::StructuredDeployments
1360     properties:
1361       name: CephStorageCephDeployment
1362       config: {get_attr: [CephClusterConfig, config_id]}
1363       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1364
1365   CephClusterConfig:
1366     type: OS::TripleO::CephClusterConfig::SoftwareConfig
1367     properties:
1368       ceph_storage_count: {get_param: CephStorageCount}
1369       ceph_fsid: {get_param: CephClusterFSID}
1370       ceph_mon_key: {get_param: CephMonKey}
1371       ceph_admin_key: {get_param: CephAdminKey}
1372       ceph_client_key: {get_param: CephClientKey}
1373       ceph_external_mon_ips: {get_param: CephExternalMonHost}
1374       ceph_mon_names: {get_attr: [Controller, hostname]}
1375       ceph_mon_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
1376
1377   ControllerClusterConfig:
1378     type: OS::Heat::StructuredConfig
1379     properties:
1380       group: os-apply-config
1381       config:
1382         corosync:
1383           nodes: {get_attr: [Controller, corosync_node]}
1384         horizon:
1385           caches:
1386             memcached:
1387               nodes: {get_attr: [Controller, hostname]}
1388         mysql:
1389           nodes: {get_attr: [Controller, corosync_node]}
1390         haproxy:
1391           nodes: {get_attr: [Controller, corosync_node]}
1392
1393   ControllerClusterDeployment:
1394     type: OS::Heat::StructuredDeployments
1395     properties:
1396       name: ControllerClusterDeployment
1397       config: {get_resource: ControllerClusterConfig}
1398       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1399
1400   ControllerAllNodesDeployment:
1401     type: OS::Heat::StructuredDeployments
1402     properties:
1403       name: ControllerAllNodesDeployment
1404       config: {get_attr: [allNodesConfig, config_id]}
1405       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1406
1407   ComputeAllNodesDeployment:
1408     type: OS::Heat::StructuredDeployments
1409     properties:
1410       name: ComputeAllNodesDeployment
1411       config: {get_attr: [allNodesConfig, config_id]}
1412       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1413
1414   BlockStorageAllNodesDeployment:
1415     type: OS::Heat::StructuredDeployments
1416     properties:
1417       name: BlockStorageAllNodesDeployment
1418       config: {get_attr: [allNodesConfig, config_id]}
1419       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1420
1421   ObjectStorageAllNodesDeployment:
1422     type: OS::Heat::StructuredDeployments
1423     properties:
1424       name: ObjectStorageAllNodesDeployment
1425       config: {get_attr: [allNodesConfig, config_id]}
1426       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1427
1428   CephStorageAllNodesDeployment:
1429     type: OS::Heat::StructuredDeployments
1430     properties:
1431       name: CephStorageAllNodesDeployment
1432       config: {get_attr: [allNodesConfig, config_id]}
1433       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1434
1435   # All Nodes Validations
1436   AllNodesValidationConfig:
1437     type: OS::TripleO::AllNodes::Validation
1438     properties:
1439       PingTestIps:
1440         list_join:
1441         - ' '
1442         - - {get_attr: [Controller, resource.0.external_ip_address]}
1443           - {get_attr: [Controller, resource.0.internal_api_ip_address]}
1444           - {get_attr: [Controller, resource.0.storage_ip_address]}
1445           - {get_attr: [Controller, resource.0.storage_mgmt_ip_address]}
1446           - {get_attr: [Controller, resource.0.tenant_ip_address]}
1447
1448   ControllerAllNodesValidationDeployment:
1449     type: OS::Heat::StructuredDeployments
1450     depends_on: ControllerAllNodesDeployment
1451     properties:
1452       name: ControllerAllNodesValidationDeployment
1453       config: {get_resource: AllNodesValidationConfig}
1454       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1455
1456   ComputeAllNodesValidationDeployment:
1457     type: OS::Heat::StructuredDeployments
1458     depends_on: ComputeAllNodesDeployment
1459     properties:
1460       name: ComputeAllNodesValidationDeployment
1461       config: {get_resource: AllNodesValidationConfig}
1462       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1463
1464   BlockStorageAllNodesValidationDeployment:
1465     type: OS::Heat::StructuredDeployments
1466     depends_on: BlockStorageAllNodesDeployment
1467     properties:
1468       name: BlockStorageAllNodesValidationDeployment
1469       config: {get_resource: AllNodesValidationConfig}
1470       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1471
1472   ObjectStorageAllNodesValidationDeployment:
1473     type: OS::Heat::StructuredDeployments
1474     depends_on: ObjectStorageAllNodesDeployment
1475     properties:
1476       name: ObjectStorageAllNodesValidationDeployment
1477       config: {get_resource: AllNodesValidationConfig}
1478       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1479
1480   CephStorageAllNodesValidationDeployment:
1481     type: OS::Heat::StructuredDeployments
1482     depends_on: CephStorageAllNodesDeployment
1483     properties:
1484       name: CephStorageAllNodesValidationDeployment
1485       config: {get_resource: AllNodesValidationConfig}
1486       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1487
1488   # Optional ExtraConfig for all nodes - all roles are passed in here, but
1489   # the nested template may configure each role differently (or not at all)
1490   AllNodesExtraConfig:
1491     type: OS::TripleO::AllNodesExtraConfig
1492     properties:
1493       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
1494       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
1495       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1496       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1497       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1498
1499   # Nested stack deployment runs after all other controller deployments
1500   ControllerNodesPostDeployment:
1501     type: OS::TripleO::ControllerPostDeployment
1502     depends_on: [ControllerBootstrapNodeDeployment, ControllerAllNodesDeployment, ControllerSwiftDeployment, ControllerCephDeployment]
1503     properties:
1504       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1505       NodeConfigIdentifiers:
1506         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1507         controller_config: {get_attr: [Controller, attributes, config_identifier]}
1508         deployment_identifier: {get_param: DeployIdentifier}
1509
1510   ComputeNodesPostDeployment:
1511     type: OS::TripleO::ComputePostDeployment
1512     depends_on: [ComputeAllNodesDeployment, ComputeCephDeployment]
1513     properties:
1514       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1515       NodeConfigIdentifiers:
1516         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1517         compute_config: {get_attr: [Compute, attributes, config_identifier]}
1518         deployment_identifier: {get_param: DeployIdentifier}
1519
1520   ObjectStorageNodesPostDeployment:
1521     type: OS::TripleO::ObjectStoragePostDeployment
1522     depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment]
1523     properties:
1524       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1525       NodeConfigIdentifiers:
1526         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1527         objectstorage_config: {get_attr: [ObjectStorage, attributes, config_identifier]}
1528         deployment_identifier: {get_param: DeployIdentifier}
1529
1530   BlockStorageNodesPostDeployment:
1531     type: OS::TripleO::BlockStoragePostDeployment
1532     depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment]
1533     properties:
1534       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1535       NodeConfigIdentifiers:
1536         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1537         blockstorage_config: {get_attr: [BlockStorage, attributes, config_identifier]}
1538         deployment_identifier: {get_param: DeployIdentifier}
1539
1540   CephStorageNodesPostDeployment:
1541     type: OS::TripleO::CephStoragePostDeployment
1542     depends_on: [ControllerNodesPostDeployment, CephStorageCephDeployment, CephStorageAllNodesDeployment]
1543     properties:
1544       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1545       NodeConfigIdentifiers:
1546         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1547         cephstorage_config: {get_attr: [CephStorage, attributes, config_identifier]}
1548         deployment_identifier: {get_param: DeployIdentifier}
1549
1550 outputs:
1551   KeystoneURL:
1552     description: URL for the Overcloud Keystone service
1553     value: {get_attr: [EndpointMap, endpoint_map, KeystonePublic, uri]}
1554   KeystoneAdminVip:
1555     description: Keystone Admin VIP endpoint
1556     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1557   PublicVip:
1558     description: Controller VIP for public API endpoints
1559     value: {get_attr: [VipMap, net_ip_map, external]}
1560   CeilometerInternalVip:
1561     description: VIP for Ceilometer API internal endpoint
1562     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1563   CinderInternalVip:
1564     description: VIP for Cinder API internal endpoint
1565     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1566   GlanceInternalVip:
1567     description: VIP for Glance API internal endpoint
1568     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1569   HeatInternalVip:
1570     description: VIP for Heat API internal endpoint
1571     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1572   KeystoneInternalVip:
1573     description: VIP for Keystone API internal endpoint
1574     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1575   NeutronInternalVip:
1576     description: VIP for Neutron API internal endpoint
1577     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1578   NovaInternalVip:
1579     description: VIP for Nova API internal endpoint
1580     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1581   SaharaInternalVip:
1582     description: VIP for Sahara API internal endpoint
1583     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1584   SwiftInternalVip:
1585     description: VIP for Swift Proxy internal endpoint
1586     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1587   HostsEntry:
1588     description: |
1589       The content that should be appended to your /etc/hosts if you want to get
1590       hostname-based access to the deployed nodes (useful for testing without
1591       setting up a DNS).
1592     value: {get_attr: [allNodesConfig, hosts_entries]}