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