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