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