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