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