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