Merge "Add Redis as a Pacemaker resource"
[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   CinderEnableIscsiBackend:
46     default: true
47     description: Whether to enable or not the Iscsi backend for Cinder
48     type: boolean
49   CloudName:
50     default: ''
51     description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
52     type: string
53   ControlFixedIPs:
54     default: []
55     description: Should be used for arbitrary ips.
56     type: json
57   Debug:
58     default: ''
59     description: Set to True to enable debugging on all services.
60     type: string
61   DefaultSignalTransport:
62     default: CFN_SIGNAL
63     description: Transport to use for software-config signals.
64     type: string
65     constraints:
66       - allowed_values: [ CFN_SIGNAL, HEAT_SIGNAL, NO_SIGNAL ]
67   GlancePort:
68     default: "9292"
69     description: Glance port.
70     type: string
71   GlanceProtocol:
72     default: http
73     description: Protocol to use when connecting to glance, set to https for SSL.
74     type: string
75   ImageUpdatePolicy:
76     default: 'REBUILD_PRESERVE_EPHEMERAL'
77     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
78     type: string
79   KeyName:
80     default: default
81     description: Name of an existing EC2 KeyPair to enable SSH access to the instances
82     type: string
83     constraints:
84       - custom_constraint: nova.keypair
85   NeutronBridgeMappings:
86     description: >
87       The OVS logical->physical bridge mappings to use. See the Neutron
88       documentation for details. Defaults to mapping br-ex - the external
89       bridge on hosts - to a physical name 'datacentre' which can be used
90       to create provider networks (and we use this for the default floating
91       network) - if changing this either use different post-install network
92       scripts or be sure to keep 'datacentre' as a mapping network name.
93     type: string
94     default: "datacentre:br-ex"
95   NeutronControlPlaneID:
96     default: ''
97     type: string
98     description: Neutron ID for ctlplane network.
99   NeutronEnableTunnelling:
100     type: string
101     default: "True"
102   NeutronFlatNetworks:
103     type: string
104     default: 'datacentre'
105     description: >
106       If set, flat networks to configure in neutron plugins. Defaults to
107       'datacentre' to permit external network creation.
108   NeutronNetworkType:
109     default: 'gre'
110     description: The tenant network type for Neutron, either gre or vxlan.
111     type: string
112   NeutronPassword:
113     default: unset
114     description: The password for the neutron service account, used by neutron agents.
115     type: string
116     hidden: true
117   NeutronPublicInterface:
118     default: nic1
119     description: What interface to bridge onto br-ex for network nodes.
120     type: string
121   NeutronPublicInterfaceTag:
122     default: ''
123     description: >
124       VLAN tag for creating a public VLAN. The tag will be used to
125       create an access port on the exterior bridge for each control plane node,
126       and that port will be given the IP address returned by neutron from the
127       public network. Set CONTROLEXTRA=overcloud-vlan-port.yaml when compiling
128       overcloud.yaml to include the deployment of VLAN ports to the control
129       plane.
130     type: string
131   NeutronComputeAgentMode:
132     default: 'dvr'
133     description: Agent mode for the neutron-l3-agent on the compute hosts
134     type: string
135   NeutronAgentMode:
136     default: 'dvr_snat'
137     description: Agent mode for the neutron-l3-agent on the controller hosts
138     type: string
139   NeutronDVR:
140     default: 'False'
141     description: Whether to configure Neutron Distributed Virtual Routers
142     type: string
143   NeutronMetadataProxySharedSecret:
144     default: 'unset'
145     description: Shared secret to prevent spoofing
146     type: string
147   NeutronTunnelTypes:
148     default: 'gre'
149     description: |
150         The tunnel types for the Neutron tenant network. To specify multiple
151         values, use a comma separated string, like so: 'gre,vxlan'
152     type: string
153   NeutronMechanismDrivers:
154     default: 'openvswitch'
155     description: |
156         The mechanism drivers for the Neutron tenant network. To specify multiple
157         values, use a comma separated string, like so: 'openvswitch,l2_population'
158     type: string
159   NeutronAllowL3AgentFailover:
160     default: 'True'
161     description: Allow automatic l3-agent failover
162     type: string
163   NeutronL3HA:
164     default: 'False'
165     description: Whether to enable l3-agent HA
166     type: string
167   NovaPassword:
168     default: unset
169     description: The password for the nova service account, used by nova-api.
170     type: string
171     hidden: true
172   NtpServer:
173     type: string
174     default: ''
175   PublicVirtualFixedIPs:
176     default: []
177     description: >
178         Control the IP allocation for the PublicVirtualInterface port. E.g.
179         [{'ip_address':'1.2.3.4'}]
180     type: json
181   PublicVirtualNetwork:
182     default: 'ctlplane'
183     type: string
184     description: >
185         Neutron network to allocate public virtual IP port on.
186   RabbitCookieSalt:
187     type: string
188     default: unset
189     description: Salt for the rabbit cookie, change this to force the randomly generated rabbit cookie to change.
190   # FIXME: 'guest' is provisioned in RabbitMQ by default, we should create a user if these are changed
191   RabbitUserName:
192     default: guest
193     description: The username for RabbitMQ
194     type: string
195   RabbitPassword:
196     default: guest
197     description: The password for RabbitMQ
198     type: string
199     hidden: true
200   RabbitClientUseSSL:
201     default: false
202     description: >
203         Rabbit client subscriber parameter to specify
204         an SSL connection to the RabbitMQ host.
205     type: string
206   RabbitClientPort:
207     default: 5672
208     description: Set rabbit subscriber port, change this if using SSL
209     type: number
210   SnmpdReadonlyUserName:
211     default: ro_snmp_user
212     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
213     type: string
214   SnmpdReadonlyUserPassword:
215     default: unset
216     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
217     type: string
218     hidden: true
219
220   # Controller-specific params
221   AdminToken:
222     default: unset
223     description: The keystone auth secret.
224     type: string
225     hidden: true
226   CinderEnableRbdBackend:
227     default: false
228     description: Whether to enable or not the Rbd backend for Cinder
229     type: boolean
230   CinderLVMLoopDeviceSize:
231     default: 5000
232     description: The size of the loopback file used by the cinder LVM driver.
233     type: number
234   CinderPassword:
235     default: unset
236     description: The password for the cinder service account, used by cinder-api.
237     type: string
238     hidden: true
239   CinderISCSIHelper:
240     default: tgtadm
241     description: The iSCSI helper to use with cinder.
242     type: string
243   ControllerCount:
244     type: number
245     default: 1
246   controllerExtraConfig:
247     default: {}
248     description: |
249       Controller specific configuration to inject into the cluster. Same
250       structure as ExtraConfig.
251     type: json
252   controllerImage:
253     type: string
254     default: overcloud-control
255     constraints:
256       - custom_constraint: glance.image
257   OvercloudControlFlavor:
258     description: Flavor for control nodes to request when deploying.
259     type: string
260     constraints:
261       - custom_constraint: nova.flavor
262   ControlVirtualInterface:
263     default: 'br-ex'
264     description: Interface where virtual ip will be assigned.
265     type: string
266   EnableGalera:
267     default: true
268     description: Whether to use Galera instead of regular MariaDB.
269     type: boolean
270   EnablePacemaker:
271     default: false
272     description: If enabled services will be monitored by Pacemaker; it
273       will manage VIPs as well, in place of Keepalived.
274     type: boolean
275   ControllerEnableCephStorage:
276     default: false
277     description: Whether to deploy Ceph Storage (OSD) on the Controller
278     type: boolean
279   ControllerEnableSwiftStorage:
280     default: true
281     description: Whether to enable Swift Storage on the Controller
282     type: boolean
283   ExtraConfig:
284     default: {}
285     description: |
286       Additional configuration to inject into the cluster. The JSON should have
287       the following structure:
288         {"FILEKEY":
289           {"config":
290             [{"section": "SECTIONNAME",
291               "values":
292                 [{"option": "OPTIONNAME",
293                   "value": "VALUENAME"
294                  }
295                 ]
296              }
297             ]
298           }
299         }
300       For instance:
301         {"nova":
302           {"config":
303             [{"section": "default",
304               "values":
305                 [{"option": "force_config_drive",
306                   "value": "always"
307                  }
308                 ]
309              },
310              {"section": "cells",
311               "values":
312                 [{"option": "driver",
313                   "value": "nova.cells.rpc_driver.CellsRPCDriver"
314                  }
315                 ]
316              }
317             ]
318           }
319         }
320     type: json
321   GlanceLogFile:
322     description: The filepath of the file to use for logging messages from Glance.
323     type: string
324     default: ''
325   GlanceNotifierStrategy:
326     description: Strategy to use for Glance notification queue
327     type: string
328     default: noop
329   GlancePassword:
330     default: unset
331     description: The password for the glance service account, used by the glance services.
332     type: string
333     hidden: true
334   GlanceBackend:
335     default: swift
336     description: The short name of the Glance backend to use. Should be one
337       of swift, rbd or file
338     type: string
339     constraints:
340     - allowed_values: ['swift', 'file', 'rbd']
341   HeatPassword:
342     default: unset
343     description: The password for the Heat service account, used by the Heat services.
344     type: string
345     hidden: true
346   HeatStackDomainAdminPassword:
347     description: Password for heat_domain_admin user.
348     type: string
349     default: ''
350     hidden: true
351   KeystoneCACertificate:
352     default: ''
353     description: Keystone self-signed certificate authority certificate.
354     type: string
355   KeystoneSigningCertificate:
356     default: ''
357     description: Keystone certificate for verifying token validity.
358     type: string
359   KeystoneSigningKey:
360     default: ''
361     description: Keystone key for signing tokens.
362     type: string
363     hidden: true
364   KeystoneSSLCertificate:
365     default: ''
366     description: Keystone certificate for verifying token validity.
367     type: string
368   KeystoneSSLCertificateKey:
369     default: ''
370     description: Keystone key for signing tokens.
371     type: string
372     hidden: true
373   MysqlInnodbBufferPoolSize:
374     description: >
375         Specifies the size of the buffer pool in megabytes. Setting to
376         zero should be interpreted as "no value" and will defer to the
377         lower level default.
378     type: number
379     default: 0
380   NeutronDnsmasqOptions:
381     default: 'dhcp-option-force=26,1400'
382     description: Dnsmasq options for neutron-dhcp-agent. The default value here forces MTU to be set to 1400 to account for the tunnel overhead.
383     type: string
384   NeutronPublicInterfaceDefaultRoute:
385     default: ''
386     description: A custom default route for the NeutronPublicInterface.
387     type: string
388   NeutronPublicInterfaceIP:
389     default: ''
390     description: A custom IP address to put onto the NeutronPublicInterface.
391     type: string
392   NeutronPublicInterfaceRawDevice:
393     default: ''
394     description: If set, the public interface is a vlan with this device as the raw device.
395     type: string
396   PublicVirtualInterface:
397     default: 'br-ex'
398     description: >
399         Specifies the interface where the public-facing virtual ip will be assigned.
400         This should be int_public when a VLAN is being used.
401     type: string
402   RedisVirtualIP:
403     type: string
404     default: ''  # Has to be here because of the ignored empty value bug
405   SSLCertificate:
406     default: ''
407     description: If set, the contents of an SSL certificate .crt file for encrypting SSL endpoints.
408     type: string
409     hidden: true
410   SSLKey:
411     default: ''
412     description: If set, the contents of an SSL certificate .key file for encrypting SSL endpoints.
413     type: string
414     hidden: true
415   SSLCACertificate:
416     default: ''
417     description: If set, the contents of an SSL certificate authority file.
418     type: string
419   SwiftHashSuffix:
420     default: unset
421     description: A random string to be used as a salt when hashing to determine mappings in the ring.
422     type: string
423     hidden: true
424   SwiftPassword:
425     default: unset
426     description: The password for the swift service account, used by the swift proxy services.
427     type: string
428     hidden: true
429   SwiftMountCheck:
430     default: 'false'
431     description: Value of mount_check in Swift account/container/object -server.conf
432     type: boolean
433   SwiftMinPartHours:
434     type: number
435     default: 1
436     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
437   SwiftPartPower:
438     default: 10
439     description: Partition Power to use when building Swift rings
440     type: number
441   SwiftReplicas:
442     type: number
443     default: 3
444     description: How many replicas to use in the swift rings.
445
446 # Compute-specific params
447   CeilometerComputeAgent:
448     description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly
449     type: string
450     default: ''
451     constraints:
452     - allowed_values: ['', Present]
453   ComputeCount:
454     type: number
455     default: 1
456   HypervisorNeutronPhysicalBridge:
457     default: 'br-ex'
458     description: >
459       An OVS bridge to create on each hypervisor. This defaults to br-ex the
460       same as the control plane nodes, as we have a uniform configuration of
461       the openvswitch agent. Typically should not need to be changed.
462     type: string
463   HypervisorNeutronPublicInterface:
464     default: nic1
465     description: What interface to add to the HypervisorNeutronPhysicalBridge.
466     type: string
467   NeutronNetworkVLANRanges:
468     default: 'datacentre'
469     description: >
470       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
471       Neutron documentation for permitted values. Defaults to permitting any
472       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
473     type: comma_delimited_list
474   NovaComputeDriver:
475     type: string
476     default: libvirt.LibvirtDriver
477   NovaComputeExtraConfig:
478     default: {}
479     description: |
480       NovaCompute specific configuration to inject into the cluster. Same
481       structure as ExtraConfig.
482     type: json
483   NovaComputeLibvirtType:
484     default: ''
485     type: string
486   NovaEnableRbdBackend:
487     default: false
488     description: Whether to enable or not the Rbd backend for Nova
489     type: boolean
490   NovaImage:
491     type: string
492     default: overcloud-compute
493     constraints:
494       - custom_constraint: glance.image
495   OvercloudComputeFlavor:
496     description: Use this flavor
497     type: string
498     constraints:
499       - custom_constraint: nova.flavor
500   ServiceNetMap:
501     default:
502       NeutronLocalIp: tenant
503       CeilometerApiNetwork: internal_api
504       MongoDbNetwork: internal_api
505       CinderApiNetwork: internal_api
506       CinderIscsiNetwork: storage
507       GlanceApiNetwork: storage
508       GlanceRegistryNetwork: internal_api
509       KeystoneAdminApiNetwork: internal_api
510       KeystonePublicApiNetwork: internal_api
511       NeutronApiNetwork: internal_api
512       HeatApiNetwork: internal_api
513       NovaApiNetwork: internal_api
514       NovaMetadataNetwork: internal_api
515       SwiftMgmtNetwork: storage_mgmt
516       SwiftProxyNetwork: storage
517       HorizonNetwork: internal_api
518       MemcachedNetwork: internal_api
519       RabbitMqNetwork: internal_api
520       RedisNetwork: internal_api
521       MysqlNetwork: internal_api
522       CephClusterNetwork: storage_mgmt
523       CephPublicNetwork: storage
524     description: Mapping of service_name -> network name. Typically set
525                  via parameter_defaults in the resource registry.
526     type: json
527
528 # Block storage specific parameters
529   BlockStorageCount:
530     type: number
531     default: 0
532   BlockStorageImage:
533     default: overcloud-cinder-volume
534     type: string
535   OvercloudBlockStorageFlavor:
536     description: Flavor for block storage nodes to request when deploying.
537     type: string
538     constraints:
539       - custom_constraint: nova.flavor
540
541 # Object storage specific parameters
542   ObjectStorageCount:
543     type: number
544     default: 0
545   OvercloudSwiftStorageFlavor:
546     description: Flavor for Swift storage nodes to request when deploying.
547     type: string
548     constraints:
549       - custom_constraint: nova.flavor
550   SwiftStorageImage:
551     default: overcloud-swift-storage
552     type: string
553
554 # Ceph storage specific parameters
555   CephStorageCount:
556     type: number
557     default: 0
558   CephStorageImage:
559     default: overcloud-ceph-storage
560     type: string
561   OvercloudCephStorageFlavor:
562     default: baremetal
563     description: Flavor for Ceph storage nodes to request when deploying.
564     type: string
565     constraints:
566       - custom_constraint: nova.flavor
567
568 # Identifiers to trigger tasks on nodes
569   UpdateIdentifier:
570     default: ''
571     type: string
572     description: >
573       Setting to a previously unused value during stack-update will trigger
574       package update on all nodes
575
576 resources:
577
578   HeatAuthEncryptionKey:
579     type: OS::Heat::RandomString
580
581   PcsdPassword:
582     type: OS::Heat::RandomString
583     properties:
584       length: 16
585
586   HorizonSecret:
587     type: OS::Heat::RandomString
588     properties:
589       length: 10
590
591   Controller:
592     type: OS::Heat::ResourceGroup
593     depends_on: Networks
594     properties:
595       count: {get_param: ControllerCount}
596       resource_def:
597         type: OS::TripleO::Controller
598         properties:
599           AdminPassword: {get_param: AdminPassword}
600           AdminToken: {get_param: AdminToken}
601           CeilometerBackend: {get_param: CeilometerBackend}
602           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
603           CeilometerPassword: {get_param: CeilometerPassword}
604           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
605           CinderPassword: {get_param: CinderPassword}
606           CinderISCSIHelper: {get_param: CinderISCSIHelper}
607           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
608           CinderEnableRbdBackend: {get_param: CinderEnableRbdBackend}
609           CloudName: {get_param: CloudName}
610           ControlVirtualInterface: {get_param: ControlVirtualInterface}
611           ControllerExtraConfig: {get_param: controllerExtraConfig}
612           Debug: {get_param: Debug}
613           EnableGalera: {get_param: EnableGalera}
614           EnablePacemaker: {get_param: EnablePacemaker}
615           EnableCephStorage: {get_param: ControllerEnableCephStorage}
616           EnableSwiftStorage: {get_param: ControllerEnableSwiftStorage}
617           ExtraConfig: {get_param: ExtraConfig}
618           Flavor: {get_param: OvercloudControlFlavor}
619           GlancePort: {get_param: GlancePort}
620           GlanceProtocol: {get_param: GlanceProtocol}
621           GlancePassword: {get_param: GlancePassword}
622           GlanceBackend: {get_param: GlanceBackend}
623           GlanceNotifierStrategy: {get_param: GlanceNotifierStrategy}
624           GlanceLogFile: {get_param: GlanceLogFile}
625           HeatPassword: {get_param: HeatPassword}
626           HeatStackDomainAdminPassword: {get_param: HeatStackDomainAdminPassword}
627           HeatAuthEncryptionKey: {get_resource: HeatAuthEncryptionKey}
628           HorizonSecret: {get_resource: HorizonSecret}
629           Image: {get_param: controllerImage}
630           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
631           KeyName: {get_param: KeyName}
632           KeystoneCACertificate: {get_param: KeystoneCACertificate}
633           KeystoneSigningCertificate: {get_param: KeystoneSigningCertificate}
634           KeystoneSigningKey: {get_param: KeystoneSigningKey}
635           KeystoneSSLCertificate: {get_param: KeystoneSSLCertificate}
636           KeystoneSSLCertificateKey: {get_param: KeystoneSSLCertificateKey}
637           MysqlClusterUniquePart: {get_attr: [MysqlClusterUniquePart, value]}
638           MysqlInnodbBufferPoolSize: {get_param: MysqlInnodbBufferPoolSize}
639           MysqlRootPassword: {get_attr: [MysqlRootPassword, value]}
640           NeutronPublicInterfaceIP: {get_param: NeutronPublicInterfaceIP}
641           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
642           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
643           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
644           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
645           NeutronPublicInterface: {get_param: NeutronPublicInterface}
646           NeutronPublicInterfaceDefaultRoute: {get_param: NeutronPublicInterfaceDefaultRoute}
647           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
648           NeutronPassword: {get_param: NeutronPassword}
649           NeutronDnsmasqOptions: {get_param: NeutronDnsmasqOptions}
650           NeutronDVR: {get_param: NeutronDVR}
651           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
652           NeutronAgentMode: {get_param: NeutronAgentMode}
653           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
654           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
655           NeutronL3HA: {get_param: NeutronL3HA}
656           NeutronNetworkType: {get_param: NeutronNetworkType}
657           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
658           NovaPassword: {get_param: NovaPassword}
659           NtpServer: {get_param: NtpServer}
660           PcsdPassword: {get_resource: PcsdPassword}
661           PublicVirtualInterface: {get_param: PublicVirtualInterface}
662           RabbitPassword: {get_param: RabbitPassword}
663           RabbitUserName: {get_param: RabbitUserName}
664           RabbitCookie: {get_attr: [RabbitCookie, value]}
665           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
666           RabbitClientPort: {get_param: RabbitClientPort}
667           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
668           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
669           RedisVirtualIP: {get_param: RedisVirtualIP}
670           SSLCertificate: {get_param: SSLCertificate}
671           SSLKey: {get_param: SSLKey}
672           SSLCACertificate: {get_param: SSLCACertificate}
673           SwiftHashSuffix: {get_param: SwiftHashSuffix}
674           SwiftMountCheck: {get_param: SwiftMountCheck}
675           SwiftMinPartHours: {get_param: SwiftMinPartHours}
676           SwiftPartPower: {get_param: SwiftPartPower}
677           SwiftPassword: {get_param: SwiftPassword}
678           SwiftReplicas: { get_param: SwiftReplicas}
679           VirtualIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} # deprecated. Use per service VIP settings instead now.
680           PublicVirtualIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]} # deprecated. Use per service VIP settings instead now.
681           ServiceNetMap: {get_param: ServiceNetMap}
682           HeatApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
683           GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
684           MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
685           KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
686           NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
687           UpdateIdentifier: {get_param: UpdateIdentifier}
688
689   Compute:
690     type: OS::Heat::ResourceGroup
691     depends_on: Networks
692     properties:
693       count: {get_param: ComputeCount}
694       resource_def:
695         type: OS::TripleO::Compute
696         properties:
697           AdminPassword: {get_param: AdminPassword}
698           CeilometerComputeAgent: {get_param: CeilometerComputeAgent}
699           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
700           CeilometerPassword: {get_param: CeilometerPassword}
701           Debug: {get_param: Debug}
702           ExtraConfig: {get_param: ExtraConfig}
703           Flavor: {get_param: OvercloudComputeFlavor}
704           GlanceHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
705           GlancePort: {get_param: GlancePort}
706           GlanceProtocol: {get_param: GlanceProtocol}
707           Image: {get_param: NovaImage}
708           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
709           KeyName: {get_param: KeyName}
710           KeystoneHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
711           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
712           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
713           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
714           NeutronHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
715           NeutronNetworkType: {get_param: NeutronNetworkType}
716           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
717           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
718           NeutronPassword: {get_param: NeutronPassword}
719           NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
720           NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
721           NeutronDVR: {get_param: NeutronDVR}
722           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
723           NeutronAgentMode: {get_param: NeutronComputeAgentMode}
724           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
725           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
726           # L3 HA and Failover is not relevant for Computes, should be removed
727           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
728           NeutronL3HA: {get_param: NeutronL3HA}
729           NovaApiHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
730           NovaComputeDriver: {get_param: NovaComputeDriver}
731           NovaComputeExtraConfig: {get_param: NovaComputeExtraConfig}
732           NovaComputeLibvirtType: {get_param: NovaComputeLibvirtType}
733           NovaEnableRbdBackend: {get_param: NovaEnableRbdBackend}
734           NovaPublicIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
735           NovaPassword: {get_param: NovaPassword}
736           NtpServer: {get_param: NtpServer}
737           RabbitHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
738           RabbitPassword: {get_param: RabbitPassword}
739           RabbitUserName: {get_param: RabbitUserName}
740           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
741           RabbitClientPort: {get_param: RabbitClientPort}
742           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
743           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
744           ServiceNetMap: {get_param: ServiceNetMap}
745           UpdateIdentifier: {get_param: UpdateIdentifier}
746
747   BlockStorage:
748     type: OS::Heat::ResourceGroup
749     depends_on: Networks
750     properties:
751       count: {get_param: BlockStorageCount}
752       resource_def:
753         type: OS::TripleO::BlockStorage
754         properties:
755           Debug: {get_param: Debug}
756           Image: {get_param: BlockStorageImage}
757           CinderISCSIHelper: {get_param: CinderISCSIHelper}
758           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
759           # Purpose of the dedicated BlockStorage nodes should be to use their local LVM
760           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
761           CinderPassword: {get_param: CinderPassword}
762           VirtualIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
763           KeyName: {get_param: KeyName}
764           Flavor: {get_param: OvercloudBlockStorageFlavor}
765           RabbitPassword: {get_param: RabbitPassword}
766           RabbitUserName: {get_param: RabbitUserName}
767           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
768           RabbitClientPort: {get_param: RabbitClientPort}
769           NtpServer: {get_param: NtpServer}
770           UpdateIdentifier: {get_param: UpdateIdentifier}
771
772   ObjectStorage:
773     type: OS::Heat::ResourceGroup
774     depends_on: Networks
775     properties:
776       count: {get_param: ObjectStorageCount}
777       resource_def:
778         type: OS::TripleO::ObjectStorage
779         properties:
780           KeyName: {get_param: KeyName}
781           Flavor: {get_param: OvercloudSwiftStorageFlavor}
782           HashSuffix: {get_param: SwiftHashSuffix}
783           MountCheck: {get_param: SwiftMountCheck}
784           MinPartHours: {get_param: SwiftMinPartHours}
785           PartPower: {get_param: SwiftPartPower}
786           Image: {get_param: SwiftStorageImage}
787           Replicas: { get_param: SwiftReplicas}
788           NtpServer: {get_param: NtpServer}
789           UpdateIdentifier: {get_param: UpdateIdentifier}
790
791   CephStorage:
792     type: OS::Heat::ResourceGroup
793     depends_on: Networks
794     properties:
795       count: {get_param: CephStorageCount}
796       resource_def:
797         type: OS::TripleO::CephStorage
798         properties:
799           Image: {get_param: CephStorageImage}
800           KeyName: {get_param: KeyName}
801           Flavor: {get_param: OvercloudCephStorageFlavor}
802           NtpServer: {get_param: NtpServer}
803           ServiceNetMap: {get_param: ServiceNetMap}
804           UpdateIdentifier: {get_param: UpdateIdentifier}
805
806   ControllerIpListMap:
807     type: OS::TripleO::Network::Ports::NetIpListMap
808     properties:
809       ExternalIpList: {get_attr: [Controller, external_ip_address]}
810       InternalApiIpList: {get_attr: [Controller, internal_api_ip_address]}
811       StorageIpList: {get_attr: [Controller, storage_ip_address]}
812       StorageMgmtIpList: {get_attr: [Controller, storage_mgmt_ip_address]}
813       TenantIpList: {get_attr: [Controller, tenant_ip_address]}
814
815   allNodesConfig:
816     type: OS::TripleO::AllNodes::SoftwareConfig
817     properties:
818       compute_hosts: {get_attr: [Compute, hosts_entry]}
819       controller_hosts: {get_attr: [Controller, hosts_entry]}
820       controller_ips: {get_attr: [Controller, ip_address]}
821       block_storage_hosts: {get_attr: [BlockStorage, hosts_entry]}
822       object_storage_hosts: {get_attr: [ObjectStorage, hosts_entry]}
823       ceph_storage_hosts: {get_attr: [CephStorage, hosts_entry]}
824       controller_names: {get_attr: [Controller, hostname]}
825       rabbit_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
826       mongo_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
827       redis_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
828       memcache_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
829       mysql_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
830       horizon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
831       heat_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
832       swift_proxy_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
833       ceilometer_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
834       nova_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
835       nova_metadata_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
836       glance_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
837       glance_registry_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
838       cinder_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
839       neutron_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
840       keystone_public_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
841       keystone_admin_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
842
843   MysqlRootPassword:
844     type: OS::Heat::RandomString
845     properties:
846       length: 10
847
848   MysqlClusterUniquePart:
849     type: OS::Heat::RandomString
850     properties:
851       length: 10
852
853   RabbitCookie:
854     type: OS::Heat::RandomString
855     properties:
856       length: 20
857       salt: {get_param: RabbitCookieSalt}
858
859   # creates the network architecture
860   Networks:
861     type: OS::TripleO::Network
862
863   ControlVirtualIP:
864     type: OS::Neutron::Port
865     depends_on: Networks
866     properties:
867       name: control_virtual_ip
868       network_id: {get_param: NeutronControlPlaneID}
869       fixed_ips: {get_param: ControlFixedIPs}
870       replacement_policy: AUTO
871
872   # same as external
873   PublicVirtualIP:
874     type: OS::Neutron::Port
875     depends_on: Networks
876     properties:
877       name: public_virtual_ip
878       network: {get_param: PublicVirtualNetwork}
879       fixed_ips: {get_param: PublicVirtualFixedIPs}
880       replacement_policy: AUTO
881
882   InternalApiVirtualIP:
883     depends_on: Networks
884     type: OS::TripleO::Controller::Ports::InternalApiPort
885     properties:
886       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
887       PortName: internal_api_virtual_ip
888
889   StorageVirtualIP:
890     depends_on: Networks
891     type: OS::TripleO::Controller::Ports::StoragePort
892     properties:
893       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
894       PortName: storage_virtual_ip
895
896   StorageMgmtVirtualIP:
897     depends_on: Networks
898     type: OS::TripleO::Controller::Ports::StorageMgmtPort
899     properties:
900       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
901       PortName: storage_management_virtual_ip
902
903   VipMap:
904     type: OS::TripleO::Network::Ports::NetIpMap
905     properties:
906       ExternalIp: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
907       InternalApiIp: {get_attr: [InternalApiVirtualIP, ip_address]}
908       StorageIp: {get_attr: [StorageVirtualIP, ip_address]}
909       StorageMgmtIp: {get_attr: [StorageMgmtVirtualIP, ip_address]}
910       # No tenant VIP required
911
912   VipConfig:
913     type: OS::TripleO::VipConfig
914
915   VipDeployment:
916     type: OS::Heat::StructuredDeployments
917     properties:
918       config: {get_resource: VipConfig}
919       servers: {get_attr: [Controller, attributes, nova_server_resource]}
920       input_values:
921         # service VIP mappings
922         keystone_admin_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
923         keystone_public_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
924         neutron_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
925         cinder_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
926         glance_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
927         glance_registry_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
928         swift_proxy_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
929         nova_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
930         nova_metadata_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
931         ceilometer_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
932         heat_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
933         horizon_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
934         redis_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
935         mysql_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
936         rabbit_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
937         # direct configuration of Virtual IPs for each network
938         control_virtual_ip: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
939         public_virtual_ip: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
940         internal_api_virtual_ip: {get_attr: [InternalApiVirtualIP, ip_address]}
941         storage_virtual_ip: {get_attr: [StorageVirtualIP, ip_address]}
942         storage_mgmt_virtual_ip: {get_attr: [StorageMgmtVirtualIP, ip_address]}
943
944   ControllerBootstrapNodeConfig:
945     type: OS::TripleO::BootstrapNode::SoftwareConfig
946     properties:
947       bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
948       bootstrap_nodeid_ip: {get_attr: [Controller, resource.0.ip_address]}
949
950   ControllerBootstrapNodeDeployment:
951     type: OS::Heat::StructuredDeployments
952     properties:
953       config: {get_attr: [ControllerBootstrapNodeConfig, config_id]}
954       servers: {get_attr: [Controller, attributes, nova_server_resource]}
955       signal_transport: NO_SIGNAL
956
957   ControllerSwiftDeployment:
958     type: OS::Heat::StructuredDeployments
959     properties:
960       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
961       servers: {get_attr: [Controller, attributes, nova_server_resource]}
962       signal_transport: NO_SIGNAL
963
964   ObjectStorageSwiftDeployment:
965     type: OS::Heat::StructuredDeployments
966     properties:
967       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
968       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
969       signal_transport: NO_SIGNAL
970
971   SwiftDevicesAndProxyConfig:
972     type: OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig
973     properties:
974       controller_swift_devices: {get_attr: [Controller, swift_device]}
975       object_store_swift_devices: {get_attr: [ObjectStorage, swift_device]}
976       controller_swift_proxy_memcaches: {get_attr: [Controller, swift_proxy_memcache]}
977
978   ComputeCephDeployment:
979     type: OS::Heat::StructuredDeployments
980     properties:
981       config: {get_attr: [CephClusterConfig, config_id]}
982       servers: {get_attr: [Compute, attributes, nova_server_resource]}
983
984   ControllerCephDeployment:
985     type: OS::Heat::StructuredDeployments
986     properties:
987       config: {get_attr: [CephClusterConfig, config_id]}
988       servers: {get_attr: [Controller, attributes, nova_server_resource]}
989
990   CephStorageCephDeployment:
991     type: OS::Heat::StructuredDeployments
992     properties:
993       config: {get_attr: [CephClusterConfig, config_id]}
994       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
995
996   CephClusterConfig:
997     type: OS::TripleO::CephClusterConfig::SoftwareConfig
998     properties:
999       ceph_fsid: {get_param: CephClusterFSID}
1000       ceph_mon_key: {get_param: CephMonKey}
1001       ceph_admin_key: {get_param: CephAdminKey}
1002       ceph_mon_names: {get_attr: [Controller, hostname]}
1003       ceph_mon_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
1004
1005   ControllerClusterConfig:
1006     type: OS::Heat::StructuredConfig
1007     properties:
1008       config:
1009         corosync:
1010           nodes: {get_attr: [Controller, corosync_node]}
1011         horizon:
1012           caches:
1013             memcached:
1014               nodes: {get_attr: [Controller, hostname]}
1015         mysql:
1016           nodes: {get_attr: [Controller, corosync_node]}
1017         haproxy:
1018           nodes: {get_attr: [Controller, corosync_node]}
1019
1020   ControllerClusterDeployment:
1021     type: OS::Heat::StructuredDeployments
1022     properties:
1023       config: {get_resource: ControllerClusterConfig}
1024       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1025       signal_transport: NO_SIGNAL
1026
1027   ControllerAllNodesDeployment:
1028     type: OS::Heat::StructuredDeployments
1029     properties:
1030       config: {get_attr: [allNodesConfig, config_id]}
1031       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1032
1033   ComputeAllNodesDeployment:
1034     type: OS::Heat::StructuredDeployments
1035     properties:
1036       config: {get_attr: [allNodesConfig, config_id]}
1037       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1038
1039   BlockStorageAllNodesDeployment:
1040     type: OS::Heat::StructuredDeployments
1041     properties:
1042       config: {get_attr: [allNodesConfig, config_id]}
1043       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1044
1045   ObjectStorageAllNodesDeployment:
1046     type: OS::Heat::StructuredDeployments
1047     properties:
1048       config: {get_attr: [allNodesConfig, config_id]}
1049       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1050
1051   CephStorageAllNodesDeployment:
1052     type: OS::Heat::StructuredDeployments
1053     properties:
1054       config: {get_attr: [allNodesConfig, config_id]}
1055       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1056
1057   # Nested stack deployment runs after all other controller deployments
1058   ControllerNodesPostDeployment:
1059     type: OS::TripleO::ControllerPostDeployment
1060     depends_on: [ControllerBootstrapNodeDeployment, ControllerAllNodesDeployment, ControllerSwiftDeployment, ControllerCephDeployment]
1061     properties:
1062       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1063
1064   ComputeNodesPostDeployment:
1065     type: OS::TripleO::ComputePostDeployment
1066     depends_on: [ComputeAllNodesDeployment, ComputeCephDeployment]
1067     properties:
1068       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1069
1070   ObjectStorageNodesPostDeployment:
1071     type: OS::TripleO::ObjectStoragePostDeployment
1072     depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment]
1073     properties:
1074       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1075
1076   BlockStorageNodesPostDeployment:
1077     type: OS::TripleO::BlockStoragePostDeployment
1078     depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment]
1079     properties:
1080       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1081
1082   CephStorageNodesPostDeployment:
1083     type: OS::TripleO::CephStoragePostDeployment
1084     depends_on: [ControllerNodesPostDeployment, CephStorageCephDeployment, CephStorageAllNodesDeployment]
1085     properties:
1086       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1087
1088 outputs:
1089   KeystoneURL:
1090     description: URL for the Overcloud Keystone service
1091     value:
1092       list_join:
1093       - ''
1094       - - http://
1095         - {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
1096         - :5000/v2.0/