Merge "Remove unsafe "unset" defaults"
[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
1129   allNodesConfig:
1130     type: OS::TripleO::AllNodes::SoftwareConfig
1131     properties:
1132       compute_hosts: {get_attr: [Compute, hosts_entry]}
1133       controller_hosts: {get_attr: [Controller, hosts_entry]}
1134       controller_ips: {get_attr: [Controller, ip_address]}
1135       block_storage_hosts: {get_attr: [BlockStorage, hosts_entry]}
1136       object_storage_hosts: {get_attr: [ObjectStorage, hosts_entry]}
1137       ceph_storage_hosts: {get_attr: [CephStorage, hosts_entry]}
1138       controller_names: {get_attr: [Controller, hostname]}
1139       rabbit_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1140       mongo_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
1141       redis_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
1142       memcache_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
1143       mysql_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1144       horizon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1145       heat_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1146       swift_proxy_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1147       ceilometer_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1148       nova_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1149       nova_metadata_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1150       glance_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1151       glance_registry_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1152       cinder_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1153       neutron_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1154       keystone_public_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1155       keystone_admin_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1156       DeployIdentifier: {get_param: DeployIdentifier}
1157       UpdateIdentifier: {get_param: UpdateIdentifier}
1158
1159   MysqlRootPassword:
1160     type: OS::Heat::RandomString
1161     properties:
1162       length: 10
1163
1164   MysqlClusterUniquePart:
1165     type: OS::Heat::RandomString
1166     properties:
1167       length: 10
1168
1169   RabbitCookie:
1170     type: OS::Heat::RandomString
1171     properties:
1172       length: 20
1173       salt: {get_param: RabbitCookieSalt}
1174
1175   # creates the network architecture
1176   Networks:
1177     type: OS::TripleO::Network
1178
1179   ControlVirtualIP:
1180     type: OS::Neutron::Port
1181     depends_on: Networks
1182     properties:
1183       name: control_virtual_ip
1184       network: {get_param: NeutronControlPlaneID}
1185       fixed_ips: {get_param: ControlFixedIPs}
1186       replacement_policy: AUTO
1187
1188   RedisVirtualIP:
1189     depends_on: Networks
1190     type: OS::TripleO::Network::Ports::RedisVipPort
1191     properties:
1192       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1193       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
1194       PortName: redis_virtual_ip
1195       NetworkName: {get_param: [ServiceNetMap, RedisNetwork]}
1196       ServiceName: redis
1197
1198   # The public VIP is on the External net, falls back to ctlplane
1199   PublicVirtualIP:
1200     depends_on: Networks
1201     type: OS::TripleO::Network::Ports::ExternalVipPort
1202     properties:
1203       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1204       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
1205       PortName: public_virtual_ip
1206       FixedIPs: {get_param: PublicVirtualFixedIPs}
1207
1208   InternalApiVirtualIP:
1209     depends_on: Networks
1210     type: OS::TripleO::Network::Ports::InternalApiVipPort
1211     properties:
1212       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1213       PortName: internal_api_virtual_ip
1214
1215   StorageVirtualIP:
1216     depends_on: Networks
1217     type: OS::TripleO::Network::Ports::StorageVipPort
1218     properties:
1219       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1220       PortName: storage_virtual_ip
1221
1222   StorageMgmtVirtualIP:
1223     depends_on: Networks
1224     type: OS::TripleO::Network::Ports::StorageMgmtVipPort
1225     properties:
1226       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1227       PortName: storage_management_virtual_ip
1228
1229   VipMap:
1230     type: OS::TripleO::Network::Ports::NetVipMap
1231     properties:
1232       ControlPlaneIp: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1233       ExternalIp: {get_attr: [PublicVirtualIP, ip_address]}
1234       InternalApiIp: {get_attr: [InternalApiVirtualIP, ip_address]}
1235       StorageIp: {get_attr: [StorageVirtualIP, ip_address]}
1236       StorageMgmtIp: {get_attr: [StorageMgmtVirtualIP, ip_address]}
1237       # No tenant VIP required
1238
1239   VipConfig:
1240     type: OS::TripleO::VipConfig
1241
1242   VipDeployment:
1243     type: OS::Heat::StructuredDeployments
1244     properties:
1245       config: {get_resource: VipConfig}
1246       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1247       input_values:
1248         # service VIP mappings
1249         keystone_admin_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1250         keystone_public_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1251         neutron_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1252         cinder_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1253         glance_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1254         glance_registry_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1255         swift_proxy_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1256         nova_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1257         nova_metadata_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1258         ceilometer_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1259         heat_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1260         horizon_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1261         redis_vip: {get_attr: [RedisVirtualIP, ip_address]}
1262         mysql_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1263         rabbit_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1264         # direct configuration of Virtual IPs for each network
1265         control_virtual_ip: {get_attr: [VipMap, net_ip_map, ctlplane]}
1266         public_virtual_ip: {get_attr: [VipMap, net_ip_map, external]}
1267         internal_api_virtual_ip: {get_attr: [VipMap, net_ip_map, internal_api]}
1268         storage_virtual_ip: {get_attr: [VipMap, net_ip_map, storage]}
1269         storage_mgmt_virtual_ip: {get_attr: [VipMap, net_ip_map, storage_mgmt]}
1270
1271   ControllerBootstrapNodeConfig:
1272     type: OS::TripleO::BootstrapNode::SoftwareConfig
1273     properties:
1274       bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
1275       bootstrap_nodeid_ip: {get_attr: [Controller, resource.0.ip_address]}
1276
1277   ControllerBootstrapNodeDeployment:
1278     type: OS::Heat::StructuredDeployments
1279     properties:
1280       config: {get_attr: [ControllerBootstrapNodeConfig, config_id]}
1281       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1282
1283   ControllerSwiftDeployment:
1284     type: OS::Heat::StructuredDeployments
1285     properties:
1286       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
1287       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1288
1289   ObjectStorageSwiftDeployment:
1290     type: OS::Heat::StructuredDeployments
1291     properties:
1292       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
1293       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1294
1295   SwiftDevicesAndProxyConfig:
1296     type: OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig
1297     properties:
1298       controller_swift_devices: {get_attr: [Controller, swift_device]}
1299       object_store_swift_devices: {get_attr: [ObjectStorage, swift_device]}
1300       controller_swift_proxy_memcaches: {get_attr: [Controller, swift_proxy_memcache]}
1301
1302   ComputeCephDeployment:
1303     type: OS::Heat::StructuredDeployments
1304     properties:
1305       config: {get_attr: [CephClusterConfig, config_id]}
1306       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1307
1308   ControllerCephDeployment:
1309     type: OS::Heat::StructuredDeployments
1310     properties:
1311       config: {get_attr: [CephClusterConfig, config_id]}
1312       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1313
1314   CephStorageCephDeployment:
1315     type: OS::Heat::StructuredDeployments
1316     properties:
1317       config: {get_attr: [CephClusterConfig, config_id]}
1318       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1319
1320   CephClusterConfig:
1321     type: OS::TripleO::CephClusterConfig::SoftwareConfig
1322     properties:
1323       ceph_storage_count: {get_param: CephStorageCount}
1324       ceph_fsid: {get_param: CephClusterFSID}
1325       ceph_mon_key: {get_param: CephMonKey}
1326       ceph_admin_key: {get_param: CephAdminKey}
1327       ceph_client_key: {get_param: CephClientKey}
1328       ceph_external_mon_ips: {get_param: CephExternalMonHost}
1329       ceph_mon_names: {get_attr: [Controller, hostname]}
1330       ceph_mon_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
1331
1332   ControllerClusterConfig:
1333     type: OS::Heat::StructuredConfig
1334     properties:
1335       group: os-apply-config
1336       config:
1337         corosync:
1338           nodes: {get_attr: [Controller, corosync_node]}
1339         horizon:
1340           caches:
1341             memcached:
1342               nodes: {get_attr: [Controller, hostname]}
1343         mysql:
1344           nodes: {get_attr: [Controller, corosync_node]}
1345         haproxy:
1346           nodes: {get_attr: [Controller, corosync_node]}
1347
1348   ControllerClusterDeployment:
1349     type: OS::Heat::StructuredDeployments
1350     properties:
1351       config: {get_resource: ControllerClusterConfig}
1352       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1353
1354   ControllerAllNodesDeployment:
1355     type: OS::Heat::StructuredDeployments
1356     properties:
1357       config: {get_attr: [allNodesConfig, config_id]}
1358       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1359
1360   ComputeAllNodesDeployment:
1361     type: OS::Heat::StructuredDeployments
1362     properties:
1363       config: {get_attr: [allNodesConfig, config_id]}
1364       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1365
1366   BlockStorageAllNodesDeployment:
1367     type: OS::Heat::StructuredDeployments
1368     properties:
1369       config: {get_attr: [allNodesConfig, config_id]}
1370       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1371
1372   ObjectStorageAllNodesDeployment:
1373     type: OS::Heat::StructuredDeployments
1374     properties:
1375       config: {get_attr: [allNodesConfig, config_id]}
1376       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1377
1378   CephStorageAllNodesDeployment:
1379     type: OS::Heat::StructuredDeployments
1380     properties:
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       config: {get_resource: AllNodesValidationConfig}
1402       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1403
1404   ComputeAllNodesValidationDeployment:
1405     type: OS::Heat::StructuredDeployments
1406     depends_on: ComputeAllNodesDeployment
1407     properties:
1408       config: {get_resource: AllNodesValidationConfig}
1409       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1410
1411   BlockStorageAllNodesValidationDeployment:
1412     type: OS::Heat::StructuredDeployments
1413     depends_on: BlockStorageAllNodesDeployment
1414     properties:
1415       config: {get_resource: AllNodesValidationConfig}
1416       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1417
1418   ObjectStorageAllNodesValidationDeployment:
1419     type: OS::Heat::StructuredDeployments
1420     depends_on: ObjectStorageAllNodesDeployment
1421     properties:
1422       config: {get_resource: AllNodesValidationConfig}
1423       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1424
1425   CephStorageAllNodesValidationDeployment:
1426     type: OS::Heat::StructuredDeployments
1427     depends_on: CephStorageAllNodesDeployment
1428     properties:
1429       config: {get_resource: AllNodesValidationConfig}
1430       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1431
1432   # Optional ExtraConfig for all nodes - all roles are passed in here, but
1433   # the nested template may configure each role differently (or not at all)
1434   AllNodesExtraConfig:
1435     type: OS::TripleO::AllNodesExtraConfig
1436     properties:
1437       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
1438       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
1439       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1440       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1441       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1442
1443   # Nested stack deployment runs after all other controller deployments
1444   ControllerNodesPostDeployment:
1445     type: OS::TripleO::ControllerPostDeployment
1446     depends_on: [ControllerBootstrapNodeDeployment, ControllerAllNodesDeployment, ControllerSwiftDeployment, ControllerCephDeployment]
1447     properties:
1448       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1449       NodeConfigIdentifiers:
1450         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1451         controller_config: {get_attr: [Controller, attributes, config_identifier]}
1452         deployment_identifier: {get_param: DeployIdentifier}
1453
1454   ComputeNodesPostDeployment:
1455     type: OS::TripleO::ComputePostDeployment
1456     depends_on: [ComputeAllNodesDeployment, ComputeCephDeployment]
1457     properties:
1458       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1459       NodeConfigIdentifiers:
1460         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1461         compute_config: {get_attr: [Compute, attributes, config_identifier]}
1462         deployment_identifier: {get_param: DeployIdentifier}
1463
1464   ObjectStorageNodesPostDeployment:
1465     type: OS::TripleO::ObjectStoragePostDeployment
1466     depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment]
1467     properties:
1468       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1469       NodeConfigIdentifiers:
1470         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1471         objectstorage_config: {get_attr: [ObjectStorage, attributes, config_identifier]}
1472         deployment_identifier: {get_param: DeployIdentifier}
1473
1474   BlockStorageNodesPostDeployment:
1475     type: OS::TripleO::BlockStoragePostDeployment
1476     depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment]
1477     properties:
1478       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1479       NodeConfigIdentifiers:
1480         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1481         blockstorage_config: {get_attr: [BlockStorage, attributes, config_identifier]}
1482         deployment_identifier: {get_param: DeployIdentifier}
1483
1484   CephStorageNodesPostDeployment:
1485     type: OS::TripleO::CephStoragePostDeployment
1486     depends_on: [ControllerNodesPostDeployment, CephStorageCephDeployment, CephStorageAllNodesDeployment]
1487     properties:
1488       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1489       NodeConfigIdentifiers:
1490         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1491         cephstorage_config: {get_attr: [CephStorage, attributes, config_identifier]}
1492         deployment_identifier: {get_param: DeployIdentifier}
1493
1494 outputs:
1495   KeystoneURL:
1496     description: URL for the Overcloud Keystone service
1497     value: {get_attr: [EndpointMap, endpoint_map, KeystonePublic, uri]}
1498   KeystoneAdminVip:
1499     description: Keystone Admin VIP endpoint
1500     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1501   PublicVip:
1502     description: Controller VIP for public API endpoints
1503     value: {get_attr: [VipMap, net_ip_map, external]}
1504   CeilometerInternalVip:
1505     description: VIP for Ceilometer API internal endpoint
1506     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1507   CinderInternalVip:
1508     description: VIP for Cinder API internal endpoint
1509     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1510   GlanceInternalVip:
1511     description: VIP for Glance API internal endpoint
1512     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1513   HeatInternalVip:
1514     description: VIP for Heat API internal endpoint
1515     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1516   KeystoneInternalVip:
1517     description: VIP for Keystone API internal endpoint
1518     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1519   NeutronInternalVip:
1520     description: VIP for Neutron API internal endpoint
1521     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1522   NovaInternalVip:
1523     description: VIP for Nova API internal endpoint
1524     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1525   SwiftInternalVip:
1526     description: VIP for Swift Proxy internal endpoint
1527     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1528   HostsEntry:
1529     description: |
1530       The content that should be appended to your /etc/hosts if you want to get
1531       hostname-based access to the deployed nodes (useful for testing without
1532       setting up a DNS).
1533     value: {get_attr: [allNodesConfig, hosts_entries]}