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