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