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