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