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