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