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