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