Add TimeZone parameter for all node types
[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: ''
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   TimeZone:
278     default: 'UTC'
279     description: The timezone to be set on nodes.
280     type: string
281   CloudDomain:
282     default: 'localdomain'
283     type: string
284     description: >
285       The DNS domain used for the hosts. This should match the dhcp_domain
286       configured in the Undercloud neutron. Defaults to localdomain.
287   ServerMetadata:
288     default: {}
289     description: >
290       Extra properties or metadata passed to Nova for the created nodes in
291       the overcloud. It's accessible via the Nova metadata API.
292     type: json
293
294   # Controller-specific params
295   AdminToken:
296     description: The keystone auth secret.
297     type: string
298     hidden: true
299   CinderLVMLoopDeviceSize:
300     default: 5000
301     description: The size of the loopback file used by the cinder LVM driver.
302     type: number
303   CinderNfsMountOptions:
304     default: ''
305     description: >
306       Mount options for NFS mounts used by Cinder NFS backend. Effective
307       when CinderEnableNfsBackend is true.
308     type: string
309   CinderNfsServers:
310     default: ''
311     description: >
312       NFS servers used by Cinder NFS backend. Effective when
313       CinderEnableNfsBackend is true.
314     type: comma_delimited_list
315   CinderPassword:
316     description: The password for the cinder service account, used by cinder-api.
317     type: string
318     hidden: true
319   CinderISCSIHelper:
320     default: tgtadm
321     description: The iSCSI helper to use with cinder.
322     type: string
323   ControllerCount:
324     type: number
325     default: 1
326     constraints:
327       - range: {min: 1}
328   controllerExtraConfig:
329     default: {}
330     description: |
331       Controller specific configuration to inject into the cluster. Same
332       structure as ExtraConfig.
333     type: json
334   controllerImage:
335     type: string
336     default: overcloud-control
337     constraints:
338       - custom_constraint: glance.image
339   OvercloudControlFlavor:
340     description: Flavor for control nodes to request when deploying.
341     type: string
342     constraints:
343       - custom_constraint: nova.flavor
344   ControlVirtualInterface:
345     default: 'br-ex'
346     description: Interface where virtual ip will be assigned.
347     type: string
348   EnableFencing:
349     default: false
350     description: Whether to enable fencing in Pacemaker or not.
351     type: boolean
352   EnableGalera:
353     default: true
354     description: Whether to use Galera instead of regular MariaDB.
355     type: boolean
356   ControllerEnableCephStorage:
357     default: false
358     description: Whether to deploy Ceph Storage (OSD) on the Controller
359     type: boolean
360   ControllerEnableSwiftStorage:
361     default: true
362     description: Whether to enable Swift Storage on the Controller
363     type: boolean
364   ControllerSchedulerHints:
365     type: json
366     description: Optional scheduler hints to pass to nova
367     default: {}
368   ExtraConfig:
369     default: {}
370     description: |
371       Additional configuration to inject into the cluster. The format required
372       may be implementation specific, e.g puppet hieradata.  Any role specific
373       ExtraConfig, e.g controllerExtraConfig takes precedence over ExtraConfig.
374     type: json
375   FencingConfig:
376     default: {}
377     description: |
378       Pacemaker fencing configuration. The JSON should have
379       the following structure:
380         {
381           "devices": [
382             {
383               "agent": "AGENT_NAME",
384               "host_mac": "HOST_MAC_ADDRESS",
385               "params": {"PARAM_NAME": "PARAM_VALUE"}
386             }
387           ]
388         }
389       For instance:
390         {
391           "devices": [
392             {
393               "agent": "fence_xvm",
394               "host_mac": "52:54:00:aa:bb:cc",
395               "params": {
396                 "multicast_address": "225.0.0.12",
397                 "port": "baremetal_0",
398                 "manage_fw": true,
399                 "manage_key_file": true,
400                 "key_file": "/etc/fence_xvm.key",
401                 "key_file_password": "abcdef"
402               }
403             }
404           ]
405         }
406     type: json
407   GlanceLogFile:
408     description: The filepath of the file to use for logging messages from Glance.
409     type: string
410     default: ''
411   GlanceNotifierStrategy:
412     description: Strategy to use for Glance notification queue
413     type: string
414     default: noop
415   GlancePassword:
416     description: The password for the glance service account, used by the glance services.
417     type: string
418     hidden: true
419   GlanceBackend:
420     default: swift
421     description: The short name of the Glance backend to use. Should be one
422       of swift, rbd or file
423     type: string
424     constraints:
425     - allowed_values: ['swift', 'file', 'rbd']
426   HeatPassword:
427     description: The password for the Heat service account, used by the Heat services.
428     type: string
429     hidden: true
430   HeatStackDomainAdminPassword:
431     description: Password for heat_domain_admin user.
432     type: string
433     hidden: true
434   InstanceNameTemplate:
435     default: 'instance-%08x'
436     description: Template string to be used to generate instance names
437     type: string
438   KeystoneCACertificate:
439     default: ''
440     description: Keystone self-signed certificate authority certificate.
441     type: string
442   KeystoneSigningCertificate:
443     default: ''
444     description: Keystone certificate for verifying token validity.
445     type: string
446   KeystoneSigningKey:
447     default: ''
448     description: Keystone key for signing tokens.
449     type: string
450     hidden: true
451   KeystoneSSLCertificate:
452     default: ''
453     description: Keystone certificate for verifying token validity.
454     type: string
455   KeystoneSSLCertificateKey:
456     default: ''
457     description: Keystone key for signing tokens.
458     type: string
459     hidden: true
460   KeystoneNotificationDriver:
461     description: Comma-separated list of Oslo notification drivers used by Keystone
462     default: ['messaging']
463     type: comma_delimited_list
464   KeystoneNotificationFormat:
465     description: The Keystone notification format
466     default: 'basic'
467     type: string
468     constraints:
469       - allowed_values: [ 'basic', 'cadf' ]
470   ManageFirewall:
471     default: false
472     description: Whether to manage IPtables rules.
473     type: boolean
474   PurgeFirewallRules:
475     default: false
476     description: Whether IPtables rules should be purged before setting up the ones.
477     type: boolean
478   MysqlInnodbBufferPoolSize:
479     description: >
480         Specifies the size of the buffer pool in megabytes. Setting to
481         zero should be interpreted as "no value" and will defer to the
482         lower level default.
483     type: number
484     default: 0
485   MysqlMaxConnections:
486     description: Configures MySQL max_connections config setting
487     type: number
488     default: 4096
489   NeutronDnsmasqOptions:
490     default: 'dhcp-option-force=26,1400'
491     description: Dnsmasq options for neutron-dhcp-agent. The default value here forces MTU to be set to 1400 to account for the tunnel overhead.
492     type: string
493   NeutronPublicInterfaceDefaultRoute:
494     default: ''
495     description: A custom default route for the NeutronPublicInterface.
496     type: string
497   NeutronPublicInterfaceIP:
498     default: ''
499     description: A custom IP address to put onto the NeutronPublicInterface.
500     type: string
501   NeutronPublicInterfaceRawDevice:
502     default: ''
503     description: If set, the public interface is a vlan with this device as the raw device.
504     type: string
505   PublicVirtualInterface:
506     default: 'br-ex'
507     description: >
508         Specifies the interface where the public-facing virtual ip will be assigned.
509         This should be int_public when a VLAN is being used.
510     type: string
511   SwiftHashSuffix:
512     description: A random string to be used as a salt when hashing to determine mappings in the ring.
513     type: string
514     hidden: true
515   SwiftPassword:
516     description: The password for the swift service account, used by the swift proxy services.
517     type: string
518     hidden: true
519   SwiftMountCheck:
520     default: 'false'
521     description: Value of mount_check in Swift account/container/object -server.conf
522     type: boolean
523   SwiftMinPartHours:
524     type: number
525     default: 1
526     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
527   SwiftPartPower:
528     default: 10
529     description: Partition Power to use when building Swift rings
530     type: number
531   SwiftReplicas:
532     type: number
533     default: 3
534     description: How many replicas to use in the swift rings.
535
536 # Compute-specific params
537   CeilometerComputeAgent:
538     description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly
539     type: string
540     default: ''
541     constraints:
542     - allowed_values: ['', Present]
543   ComputeCount:
544     type: number
545     default: 1
546   HypervisorNeutronPhysicalBridge:
547     default: 'br-ex'
548     description: >
549       An OVS bridge to create on each hypervisor. This defaults to br-ex the
550       same as the control plane nodes, as we have a uniform configuration of
551       the openvswitch agent. Typically should not need to be changed.
552     type: string
553   HypervisorNeutronPublicInterface:
554     default: nic1
555     description: What interface to add to the HypervisorNeutronPhysicalBridge.
556     type: string
557   NeutronNetworkVLANRanges:
558     default: 'datacentre'
559     description: >
560       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
561       Neutron documentation for permitted values. Defaults to permitting any
562       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
563     type: comma_delimited_list
564   NovaComputeDriver:
565     type: string
566     default: libvirt.LibvirtDriver
567   NovaComputeExtraConfig:
568     default: {}
569     description: |
570       NovaCompute specific configuration to inject into the cluster. Same
571       structure as ExtraConfig.
572     type: json
573   NovaComputeLibvirtType:
574     default: ''
575     type: string
576   NovaComputeLibvirtVifDriver:
577     default: ''
578     description: Libvirt VIF driver configuration for the network
579     type: string
580   NovaComputeSchedulerHints:
581     type: json
582     description: Optional scheduler hints to pass to nova
583     default: {}
584   NovaEnableRbdBackend:
585     default: false
586     description: Whether to enable or not the Rbd backend for Nova
587     type: boolean
588   NovaImage:
589     type: string
590     default: overcloud-compute
591     constraints:
592       - custom_constraint: glance.image
593   NovaOVSBridge:
594     default: 'br-int'
595     description: Name of integration bridge used by Open vSwitch
596     type: string
597   NovaSecurityGroupAPI:
598     default: 'neutron'
599     description: The full class name of the security API class
600     type: string
601   OvercloudComputeFlavor:
602     description: Use this flavor
603     type: string
604     constraints:
605       - custom_constraint: nova.flavor
606   ServiceNetMap:
607     default:
608       NeutronTenantNetwork: tenant
609       CeilometerApiNetwork: internal_api
610       MongoDbNetwork: internal_api
611       CinderApiNetwork: internal_api
612       CinderIscsiNetwork: storage
613       GlanceApiNetwork: storage
614       GlanceRegistryNetwork: internal_api
615       KeystoneAdminApiNetwork: ctlplane # allows undercloud to config endpoints
616       KeystonePublicApiNetwork: internal_api
617       NeutronApiNetwork: internal_api
618       HeatApiNetwork: internal_api
619       NovaApiNetwork: internal_api
620       NovaMetadataNetwork: internal_api
621       NovaVncProxyNetwork: internal_api
622       SwiftMgmtNetwork: storage_mgmt
623       SwiftProxyNetwork: storage
624       HorizonNetwork: internal_api
625       MemcachedNetwork: internal_api
626       RabbitMqNetwork: internal_api
627       RedisNetwork: internal_api
628       MysqlNetwork: internal_api
629       CephClusterNetwork: storage_mgmt
630       CephPublicNetwork: storage
631       ControllerHostnameResolveNetwork: internal_api
632       ComputeHostnameResolveNetwork: internal_api
633       BlockStorageHostnameResolveNetwork: internal_api
634       ObjectStorageHostnameResolveNetwork: internal_api
635       CephStorageHostnameResolveNetwork: storage
636     description: Mapping of service_name -> network name. Typically set
637                  via parameter_defaults in the resource registry.
638     type: json
639
640 # Block storage specific parameters
641   BlockStorageCount:
642     type: number
643     default: 0
644   BlockStorageImage:
645     default: overcloud-cinder-volume
646     type: string
647   OvercloudBlockStorageFlavor:
648     description: Flavor for block storage nodes to request when deploying.
649     type: string
650     constraints:
651       - custom_constraint: nova.flavor
652   BlockStorageExtraConfig:
653     default: {}
654     description: |
655       BlockStorage specific configuration to inject into the cluster. Same
656       structure as ExtraConfig.
657     type: json
658   BlockStorageSchedulerHints:
659     type: json
660     description: Optional scheduler hints to pass to nova
661     default: {}
662
663
664 # Object storage specific parameters
665   ObjectStorageCount:
666     type: number
667     default: 0
668   OvercloudSwiftStorageFlavor:
669     description: Flavor for Swift storage nodes to request when deploying.
670     type: string
671     constraints:
672       - custom_constraint: nova.flavor
673   SwiftStorageImage:
674     default: overcloud-swift-storage
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-ceph-storage
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           TimeZone: {get_param: TimeZone}
925           VirtualIP: {get_attr: [VipMap, net_ip_map, ctlplane]} # deprecated. Use per service VIP settings instead now.
926           PublicVirtualIP: {get_attr: [VipMap, net_ip_map, external]}
927           ServiceNetMap: {get_param: ServiceNetMap}
928           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
929           CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
930           CinderApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
931           HeatApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
932           GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
933           GlanceRegistryVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
934           NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
935           SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
936           MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
937           KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
938           KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
939           NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
940           NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
941           UpdateIdentifier: {get_param: UpdateIdentifier}
942           Hostname:
943             str_replace:
944               template: {get_param: ControllerHostnameFormat}
945               params:
946                 '%stackname%': {get_param: 'OS::stack_name'}
947           NodeIndex: '%index%'
948           ServerMetadata: {get_param: ServerMetadata}
949           SchedulerHints: {get_param: ControllerSchedulerHints}
950
951   Compute:
952     type: OS::Heat::ResourceGroup
953     depends_on: Networks
954     properties:
955       count: {get_param: ComputeCount}
956       removal_policies: {get_param: ComputeRemovalPolicies}
957       resource_def:
958         type: OS::TripleO::Compute
959         properties:
960           AdminPassword: {get_param: AdminPassword}
961           CeilometerComputeAgent: {get_param: CeilometerComputeAgent}
962           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
963           CeilometerPassword: {get_param: CeilometerPassword}
964           CinderEnableNfsBackend: {get_param: CinderEnableNfsBackend}
965           CinderEnableRbdBackend: {get_param: CinderEnableRbdBackend}
966           Debug: {get_param: Debug}
967           ExtraConfig: {get_param: ExtraConfig}
968           Flavor: {get_param: OvercloudComputeFlavor}
969           GlanceHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
970           Image: {get_param: NovaImage}
971           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
972           KeyName: {get_param: KeyName}
973           KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
974           KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
975           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
976           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
977           NeutronEnableL2Pop : {get_param: NeutronEnableL2Pop}
978           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
979           NeutronHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
980           NeutronNetworkType: {get_param: NeutronNetworkType}
981           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
982           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
983           NeutronPassword: {get_param: NeutronPassword}
984           NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
985           NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
986           NeutronDVR: {get_param: NeutronDVR}
987           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
988           NeutronAgentMode: {get_param: NeutronComputeAgentMode}
989           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
990           NeutronCorePlugin: {get_param: NeutronCorePlugin}
991           NeutronServicePlugins: {get_param: NeutronServicePlugins}
992           NeutronTypeDrivers: {get_param: NeutronTypeDrivers}
993           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
994           # L3 HA and Failover is not relevant for Computes, should be removed
995           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
996           NeutronL3HA: {get_param: NeutronL3HA}
997           NovaApiHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
998           NovaComputeDriver: {get_param: NovaComputeDriver}
999           NovaComputeExtraConfig: {get_param: NovaComputeExtraConfig}
1000           NovaComputeLibvirtType: {get_param: NovaComputeLibvirtType}
1001           NovaComputeLibvirtVifDriver: {get_param: NovaComputeLibvirtVifDriver}
1002           NovaEnableRbdBackend: {get_param: NovaEnableRbdBackend}
1003           NovaPublicIP: {get_attr: [VipMap, net_ip_map, external]}
1004           NovaPassword: {get_param: NovaPassword}
1005           NovaOVSBridge: {get_param: NovaOVSBridge}
1006           NovaSecurityGroupAPI: {get_param: NovaSecurityGroupAPI}
1007           NtpServer: {get_param: NtpServer}
1008           RabbitHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1009           RabbitPassword: {get_param: RabbitPassword}
1010           RabbitUserName: {get_param: RabbitUserName}
1011           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
1012           RabbitClientPort: {get_param: RabbitClientPort}
1013           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
1014           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
1015           ServiceNetMap: {get_param: ServiceNetMap}
1016           TimeZone: {get_param: TimeZone}
1017           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1018           UpdateIdentifier: {get_param: UpdateIdentifier}
1019           Hostname:
1020             str_replace:
1021               template: {get_param: ComputeHostnameFormat}
1022               params:
1023                 '%stackname%': {get_param: 'OS::stack_name'}
1024           CloudDomain: {get_param: CloudDomain}
1025           ServerMetadata: {get_param: ServerMetadata}
1026           SchedulerHints: {get_param: NovaComputeSchedulerHints}
1027
1028   BlockStorage:
1029     type: OS::Heat::ResourceGroup
1030     depends_on: Networks
1031     properties:
1032       count: {get_param: BlockStorageCount}
1033       removal_policies: {get_param: BlockStorageRemovalPolicies}
1034       resource_def:
1035         type: OS::TripleO::BlockStorage
1036         properties:
1037           Debug: {get_param: Debug}
1038           Image: {get_param: BlockStorageImage}
1039           CinderISCSIHelper: {get_param: CinderISCSIHelper}
1040           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
1041           # Purpose of the dedicated BlockStorage nodes should be to use their local LVM
1042           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
1043           CinderPassword: {get_param: CinderPassword}
1044           KeyName: {get_param: KeyName}
1045           Flavor: {get_param: OvercloudBlockStorageFlavor}
1046           VirtualIP: {get_attr: [VipMap, net_ip_map, ctlplane]}
1047           GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1048           RabbitPassword: {get_param: RabbitPassword}
1049           RabbitUserName: {get_param: RabbitUserName}
1050           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
1051           RabbitClientPort: {get_param: RabbitClientPort}
1052           TimeZone: {get_param: TimeZone}
1053           NtpServer: {get_param: NtpServer}
1054           UpdateIdentifier: {get_param: UpdateIdentifier}
1055           Hostname:
1056             str_replace:
1057               template: {get_param: BlockStorageHostnameFormat}
1058               params:
1059                 '%stackname%': {get_param: 'OS::stack_name'}
1060           ServiceNetMap: {get_param: ServiceNetMap}
1061           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1062           MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1063           ExtraConfig: {get_param: ExtraConfig}
1064           BlockStorageExtraConfig: {get_param: BlockStorageExtraConfig}
1065           CloudDomain: {get_param: CloudDomain}
1066           ServerMetadata: {get_param: ServerMetadata}
1067           SchedulerHints: {get_param: BlockStorageSchedulerHints}
1068
1069   ObjectStorage:
1070     type: OS::Heat::ResourceGroup
1071     depends_on: Networks
1072     properties:
1073       count: {get_param: ObjectStorageCount}
1074       removal_policies: {get_param: ObjectStorageRemovalPolicies}
1075       resource_def:
1076         type: OS::TripleO::ObjectStorage
1077         properties:
1078           KeyName: {get_param: KeyName}
1079           Flavor: {get_param: OvercloudSwiftStorageFlavor}
1080           HashSuffix: {get_param: SwiftHashSuffix}
1081           MountCheck: {get_param: SwiftMountCheck}
1082           MinPartHours: {get_param: SwiftMinPartHours}
1083           PartPower: {get_param: SwiftPartPower}
1084           Image: {get_param: SwiftStorageImage}
1085           Replicas: { get_param: SwiftReplicas}
1086           TimeZone: {get_param: TimeZone}
1087           NtpServer: {get_param: NtpServer}
1088           UpdateIdentifier: {get_param: UpdateIdentifier}
1089           ServiceNetMap: {get_param: ServiceNetMap}
1090           Hostname:
1091             str_replace:
1092               template: {get_param: ObjectStorageHostnameFormat}
1093               params:
1094                 '%stackname%': {get_param: 'OS::stack_name'}
1095           ExtraConfig: {get_param: ExtraConfig}
1096           ObjectStorageExtraConfig: {get_param: ObjectStorageExtraConfig}
1097           CloudDomain: {get_param: CloudDomain}
1098           ServerMetadata: {get_param: ServerMetadata}
1099           SchedulerHints: {get_param: ObjectStorageSchedulerHints}
1100
1101   CephStorage:
1102     type: OS::Heat::ResourceGroup
1103     depends_on: Networks
1104     properties:
1105       count: {get_param: CephStorageCount}
1106       removal_policies: {get_param: CephStorageRemovalPolicies}
1107       resource_def:
1108         type: OS::TripleO::CephStorage
1109         properties:
1110           Image: {get_param: CephStorageImage}
1111           KeyName: {get_param: KeyName}
1112           Flavor: {get_param: OvercloudCephStorageFlavor}
1113           NtpServer: {get_param: NtpServer}
1114           ServiceNetMap: {get_param: ServiceNetMap}
1115           TimeZone: {get_param: TimeZone}
1116           UpdateIdentifier: {get_param: UpdateIdentifier}
1117           Hostname:
1118             str_replace:
1119               template: {get_param: CephStorageHostnameFormat}
1120               params:
1121                 '%stackname%': {get_param: 'OS::stack_name'}
1122           ExtraConfig: {get_param: ExtraConfig}
1123           CephStorageExtraConfig: {get_param: CephStorageExtraConfig}
1124           CloudDomain: {get_param: CloudDomain}
1125           ServerMetadata: {get_param: ServerMetadata}
1126           SchedulerHints: {get_param: CephStorageSchedulerHints}
1127
1128   ControllerIpListMap:
1129     type: OS::TripleO::Network::Ports::NetIpListMap
1130     properties:
1131       ControlPlaneIpList: {get_attr: [Controller, ip_address]}
1132       ExternalIpList: {get_attr: [Controller, external_ip_address]}
1133       InternalApiIpList: {get_attr: [Controller, internal_api_ip_address]}
1134       StorageIpList: {get_attr: [Controller, storage_ip_address]}
1135       StorageMgmtIpList: {get_attr: [Controller, storage_mgmt_ip_address]}
1136       TenantIpList: {get_attr: [Controller, tenant_ip_address]}
1137       ManagementIpList: {get_attr: [Controller, management_ip_address]}
1138
1139   allNodesConfig:
1140     type: OS::TripleO::AllNodes::SoftwareConfig
1141     properties:
1142       compute_hosts: {get_attr: [Compute, hosts_entry]}
1143       controller_hosts: {get_attr: [Controller, hosts_entry]}
1144       controller_ips: {get_attr: [Controller, ip_address]}
1145       block_storage_hosts: {get_attr: [BlockStorage, hosts_entry]}
1146       object_storage_hosts: {get_attr: [ObjectStorage, hosts_entry]}
1147       ceph_storage_hosts: {get_attr: [CephStorage, hosts_entry]}
1148       controller_names: {get_attr: [Controller, hostname]}
1149       rabbit_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1150       mongo_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
1151       redis_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
1152       memcache_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
1153       mysql_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1154       horizon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1155       heat_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1156       swift_proxy_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1157       ceilometer_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1158       nova_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1159       nova_metadata_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1160       glance_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1161       glance_registry_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1162       cinder_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1163       neutron_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1164       keystone_public_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1165       keystone_admin_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1166       DeployIdentifier: {get_param: DeployIdentifier}
1167       UpdateIdentifier: {get_param: UpdateIdentifier}
1168
1169   MysqlRootPassword:
1170     type: OS::Heat::RandomString
1171     properties:
1172       length: 10
1173
1174   MysqlClusterUniquePart:
1175     type: OS::Heat::RandomString
1176     properties:
1177       length: 10
1178
1179   RabbitCookie:
1180     type: OS::Heat::RandomString
1181     properties:
1182       length: 20
1183       salt: {get_param: RabbitCookieSalt}
1184
1185   # creates the network architecture
1186   Networks:
1187     type: OS::TripleO::Network
1188
1189   ControlVirtualIP:
1190     type: OS::Neutron::Port
1191     depends_on: Networks
1192     properties:
1193       name: control_virtual_ip
1194       network: {get_param: NeutronControlPlaneID}
1195       fixed_ips: {get_param: ControlFixedIPs}
1196       replacement_policy: AUTO
1197
1198   RedisVirtualIP:
1199     depends_on: Networks
1200     type: OS::TripleO::Network::Ports::RedisVipPort
1201     properties:
1202       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1203       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
1204       PortName: redis_virtual_ip
1205       NetworkName: {get_param: [ServiceNetMap, RedisNetwork]}
1206       ServiceName: redis
1207
1208   # The public VIP is on the External net, falls back to ctlplane
1209   PublicVirtualIP:
1210     depends_on: Networks
1211     type: OS::TripleO::Network::Ports::ExternalVipPort
1212     properties:
1213       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1214       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
1215       PortName: public_virtual_ip
1216       FixedIPs: {get_param: PublicVirtualFixedIPs}
1217
1218   InternalApiVirtualIP:
1219     depends_on: Networks
1220     type: OS::TripleO::Network::Ports::InternalApiVipPort
1221     properties:
1222       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1223       PortName: internal_api_virtual_ip
1224
1225   StorageVirtualIP:
1226     depends_on: Networks
1227     type: OS::TripleO::Network::Ports::StorageVipPort
1228     properties:
1229       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1230       PortName: storage_virtual_ip
1231
1232   StorageMgmtVirtualIP:
1233     depends_on: Networks
1234     type: OS::TripleO::Network::Ports::StorageMgmtVipPort
1235     properties:
1236       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1237       PortName: storage_management_virtual_ip
1238
1239   VipMap:
1240     type: OS::TripleO::Network::Ports::NetVipMap
1241     properties:
1242       ControlPlaneIp: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1243       ExternalIp: {get_attr: [PublicVirtualIP, ip_address]}
1244       InternalApiIp: {get_attr: [InternalApiVirtualIP, ip_address]}
1245       StorageIp: {get_attr: [StorageVirtualIP, ip_address]}
1246       StorageMgmtIp: {get_attr: [StorageMgmtVirtualIP, ip_address]}
1247       # No tenant or management VIP required
1248
1249   VipConfig:
1250     type: OS::TripleO::VipConfig
1251
1252   VipDeployment:
1253     type: OS::Heat::StructuredDeployments
1254     properties:
1255       config: {get_resource: VipConfig}
1256       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1257       input_values:
1258         # service VIP mappings
1259         keystone_admin_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1260         keystone_public_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1261         neutron_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1262         cinder_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1263         glance_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1264         glance_registry_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1265         swift_proxy_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1266         nova_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1267         nova_metadata_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1268         ceilometer_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1269         heat_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1270         horizon_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1271         redis_vip: {get_attr: [RedisVirtualIP, ip_address]}
1272         mysql_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1273         rabbit_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1274         # direct configuration of Virtual IPs for each network
1275         control_virtual_ip: {get_attr: [VipMap, net_ip_map, ctlplane]}
1276         public_virtual_ip: {get_attr: [VipMap, net_ip_map, external]}
1277         internal_api_virtual_ip: {get_attr: [VipMap, net_ip_map, internal_api]}
1278         storage_virtual_ip: {get_attr: [VipMap, net_ip_map, storage]}
1279         storage_mgmt_virtual_ip: {get_attr: [VipMap, net_ip_map, storage_mgmt]}
1280
1281   ControllerBootstrapNodeConfig:
1282     type: OS::TripleO::BootstrapNode::SoftwareConfig
1283     properties:
1284       bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
1285       bootstrap_nodeid_ip: {get_attr: [Controller, resource.0.ip_address]}
1286
1287   ControllerBootstrapNodeDeployment:
1288     type: OS::Heat::StructuredDeployments
1289     properties:
1290       config: {get_attr: [ControllerBootstrapNodeConfig, config_id]}
1291       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1292
1293   ControllerSwiftDeployment:
1294     type: OS::Heat::StructuredDeployments
1295     properties:
1296       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
1297       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1298
1299   ObjectStorageSwiftDeployment:
1300     type: OS::Heat::StructuredDeployments
1301     properties:
1302       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
1303       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1304
1305   SwiftDevicesAndProxyConfig:
1306     type: OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig
1307     properties:
1308       controller_swift_devices: {get_attr: [Controller, swift_device]}
1309       object_store_swift_devices: {get_attr: [ObjectStorage, swift_device]}
1310       controller_swift_proxy_memcaches: {get_attr: [Controller, swift_proxy_memcache]}
1311
1312   ComputeCephDeployment:
1313     type: OS::Heat::StructuredDeployments
1314     properties:
1315       config: {get_attr: [CephClusterConfig, config_id]}
1316       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1317
1318   ControllerCephDeployment:
1319     type: OS::Heat::StructuredDeployments
1320     properties:
1321       config: {get_attr: [CephClusterConfig, config_id]}
1322       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1323
1324   CephStorageCephDeployment:
1325     type: OS::Heat::StructuredDeployments
1326     properties:
1327       config: {get_attr: [CephClusterConfig, config_id]}
1328       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1329
1330   CephClusterConfig:
1331     type: OS::TripleO::CephClusterConfig::SoftwareConfig
1332     properties:
1333       ceph_storage_count: {get_param: CephStorageCount}
1334       ceph_fsid: {get_param: CephClusterFSID}
1335       ceph_mon_key: {get_param: CephMonKey}
1336       ceph_admin_key: {get_param: CephAdminKey}
1337       ceph_client_key: {get_param: CephClientKey}
1338       ceph_external_mon_ips: {get_param: CephExternalMonHost}
1339       ceph_mon_names: {get_attr: [Controller, hostname]}
1340       ceph_mon_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
1341
1342   ControllerClusterConfig:
1343     type: OS::Heat::StructuredConfig
1344     properties:
1345       group: os-apply-config
1346       config:
1347         corosync:
1348           nodes: {get_attr: [Controller, corosync_node]}
1349         horizon:
1350           caches:
1351             memcached:
1352               nodes: {get_attr: [Controller, hostname]}
1353         mysql:
1354           nodes: {get_attr: [Controller, corosync_node]}
1355         haproxy:
1356           nodes: {get_attr: [Controller, corosync_node]}
1357
1358   ControllerClusterDeployment:
1359     type: OS::Heat::StructuredDeployments
1360     properties:
1361       config: {get_resource: ControllerClusterConfig}
1362       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1363
1364   ControllerAllNodesDeployment:
1365     type: OS::Heat::StructuredDeployments
1366     properties:
1367       config: {get_attr: [allNodesConfig, config_id]}
1368       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1369
1370   ComputeAllNodesDeployment:
1371     type: OS::Heat::StructuredDeployments
1372     properties:
1373       config: {get_attr: [allNodesConfig, config_id]}
1374       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1375
1376   BlockStorageAllNodesDeployment:
1377     type: OS::Heat::StructuredDeployments
1378     properties:
1379       config: {get_attr: [allNodesConfig, config_id]}
1380       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1381
1382   ObjectStorageAllNodesDeployment:
1383     type: OS::Heat::StructuredDeployments
1384     properties:
1385       config: {get_attr: [allNodesConfig, config_id]}
1386       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1387
1388   CephStorageAllNodesDeployment:
1389     type: OS::Heat::StructuredDeployments
1390     properties:
1391       config: {get_attr: [allNodesConfig, config_id]}
1392       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1393
1394   # All Nodes Validations
1395   AllNodesValidationConfig:
1396     type: OS::TripleO::AllNodes::Validation
1397     properties:
1398       PingTestIps:
1399         list_join:
1400         - ' '
1401         - - {get_attr: [Controller, resource.0.external_ip_address]}
1402           - {get_attr: [Controller, resource.0.internal_api_ip_address]}
1403           - {get_attr: [Controller, resource.0.storage_ip_address]}
1404           - {get_attr: [Controller, resource.0.storage_mgmt_ip_address]}
1405           - {get_attr: [Controller, resource.0.tenant_ip_address]}
1406
1407   ControllerAllNodesValidationDeployment:
1408     type: OS::Heat::StructuredDeployments
1409     depends_on: ControllerAllNodesDeployment
1410     properties:
1411       config: {get_resource: AllNodesValidationConfig}
1412       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1413
1414   ComputeAllNodesValidationDeployment:
1415     type: OS::Heat::StructuredDeployments
1416     depends_on: ComputeAllNodesDeployment
1417     properties:
1418       config: {get_resource: AllNodesValidationConfig}
1419       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1420
1421   BlockStorageAllNodesValidationDeployment:
1422     type: OS::Heat::StructuredDeployments
1423     depends_on: BlockStorageAllNodesDeployment
1424     properties:
1425       config: {get_resource: AllNodesValidationConfig}
1426       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1427
1428   ObjectStorageAllNodesValidationDeployment:
1429     type: OS::Heat::StructuredDeployments
1430     depends_on: ObjectStorageAllNodesDeployment
1431     properties:
1432       config: {get_resource: AllNodesValidationConfig}
1433       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1434
1435   CephStorageAllNodesValidationDeployment:
1436     type: OS::Heat::StructuredDeployments
1437     depends_on: CephStorageAllNodesDeployment
1438     properties:
1439       config: {get_resource: AllNodesValidationConfig}
1440       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1441
1442   # Optional ExtraConfig for all nodes - all roles are passed in here, but
1443   # the nested template may configure each role differently (or not at all)
1444   AllNodesExtraConfig:
1445     type: OS::TripleO::AllNodesExtraConfig
1446     properties:
1447       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
1448       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
1449       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1450       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1451       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1452
1453   # Nested stack deployment runs after all other controller deployments
1454   ControllerNodesPostDeployment:
1455     type: OS::TripleO::ControllerPostDeployment
1456     depends_on: [ControllerBootstrapNodeDeployment, ControllerAllNodesDeployment, ControllerSwiftDeployment, ControllerCephDeployment]
1457     properties:
1458       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1459       NodeConfigIdentifiers:
1460         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1461         controller_config: {get_attr: [Controller, attributes, config_identifier]}
1462         deployment_identifier: {get_param: DeployIdentifier}
1463
1464   ComputeNodesPostDeployment:
1465     type: OS::TripleO::ComputePostDeployment
1466     depends_on: [ComputeAllNodesDeployment, ComputeCephDeployment]
1467     properties:
1468       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1469       NodeConfigIdentifiers:
1470         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1471         compute_config: {get_attr: [Compute, attributes, config_identifier]}
1472         deployment_identifier: {get_param: DeployIdentifier}
1473
1474   ObjectStorageNodesPostDeployment:
1475     type: OS::TripleO::ObjectStoragePostDeployment
1476     depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment]
1477     properties:
1478       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1479       NodeConfigIdentifiers:
1480         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1481         objectstorage_config: {get_attr: [ObjectStorage, attributes, config_identifier]}
1482         deployment_identifier: {get_param: DeployIdentifier}
1483
1484   BlockStorageNodesPostDeployment:
1485     type: OS::TripleO::BlockStoragePostDeployment
1486     depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment]
1487     properties:
1488       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1489       NodeConfigIdentifiers:
1490         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1491         blockstorage_config: {get_attr: [BlockStorage, attributes, config_identifier]}
1492         deployment_identifier: {get_param: DeployIdentifier}
1493
1494   CephStorageNodesPostDeployment:
1495     type: OS::TripleO::CephStoragePostDeployment
1496     depends_on: [ControllerNodesPostDeployment, CephStorageCephDeployment, CephStorageAllNodesDeployment]
1497     properties:
1498       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1499       NodeConfigIdentifiers:
1500         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1501         cephstorage_config: {get_attr: [CephStorage, attributes, config_identifier]}
1502         deployment_identifier: {get_param: DeployIdentifier}
1503
1504 outputs:
1505   KeystoneURL:
1506     description: URL for the Overcloud Keystone service
1507     value: {get_attr: [EndpointMap, endpoint_map, KeystonePublic, uri]}
1508   KeystoneAdminVip:
1509     description: Keystone Admin VIP endpoint
1510     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1511   PublicVip:
1512     description: Controller VIP for public API endpoints
1513     value: {get_attr: [VipMap, net_ip_map, external]}
1514   CeilometerInternalVip:
1515     description: VIP for Ceilometer API internal endpoint
1516     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1517   CinderInternalVip:
1518     description: VIP for Cinder API internal endpoint
1519     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1520   GlanceInternalVip:
1521     description: VIP for Glance API internal endpoint
1522     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1523   HeatInternalVip:
1524     description: VIP for Heat API internal endpoint
1525     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1526   KeystoneInternalVip:
1527     description: VIP for Keystone API internal endpoint
1528     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1529   NeutronInternalVip:
1530     description: VIP for Neutron API internal endpoint
1531     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1532   NovaInternalVip:
1533     description: VIP for Nova API internal endpoint
1534     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1535   SwiftInternalVip:
1536     description: VIP for Swift Proxy internal endpoint
1537     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1538   HostsEntry:
1539     description: |
1540       The content that should be appended to your /etc/hosts if you want to get
1541       hostname-based access to the deployed nodes (useful for testing without
1542       setting up a DNS).
1543     value: {get_attr: [allNodesConfig, hosts_entries]}