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