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