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