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