Remove Redis VirtualIP from params and build it from Neutron::Port
[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   SSLCertificate:
403     default: ''
404     description: If set, the contents of an SSL certificate .crt file for encrypting SSL endpoints.
405     type: string
406     hidden: true
407   SSLKey:
408     default: ''
409     description: If set, the contents of an SSL certificate .key file for encrypting SSL endpoints.
410     type: string
411     hidden: true
412   SSLCACertificate:
413     default: ''
414     description: If set, the contents of an SSL certificate authority file.
415     type: string
416   SwiftHashSuffix:
417     default: unset
418     description: A random string to be used as a salt when hashing to determine mappings in the ring.
419     type: string
420     hidden: true
421   SwiftPassword:
422     default: unset
423     description: The password for the swift service account, used by the swift proxy services.
424     type: string
425     hidden: true
426   SwiftMountCheck:
427     default: 'false'
428     description: Value of mount_check in Swift account/container/object -server.conf
429     type: boolean
430   SwiftMinPartHours:
431     type: number
432     default: 1
433     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
434   SwiftPartPower:
435     default: 10
436     description: Partition Power to use when building Swift rings
437     type: number
438   SwiftReplicas:
439     type: number
440     default: 3
441     description: How many replicas to use in the swift rings.
442
443 # Compute-specific params
444   CeilometerComputeAgent:
445     description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly
446     type: string
447     default: ''
448     constraints:
449     - allowed_values: ['', Present]
450   ComputeCount:
451     type: number
452     default: 1
453   HypervisorNeutronPhysicalBridge:
454     default: 'br-ex'
455     description: >
456       An OVS bridge to create on each hypervisor. This defaults to br-ex the
457       same as the control plane nodes, as we have a uniform configuration of
458       the openvswitch agent. Typically should not need to be changed.
459     type: string
460   HypervisorNeutronPublicInterface:
461     default: nic1
462     description: What interface to add to the HypervisorNeutronPhysicalBridge.
463     type: string
464   NeutronNetworkVLANRanges:
465     default: 'datacentre'
466     description: >
467       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
468       Neutron documentation for permitted values. Defaults to permitting any
469       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
470     type: comma_delimited_list
471   NovaComputeDriver:
472     type: string
473     default: libvirt.LibvirtDriver
474   NovaComputeExtraConfig:
475     default: {}
476     description: |
477       NovaCompute specific configuration to inject into the cluster. Same
478       structure as ExtraConfig.
479     type: json
480   NovaComputeLibvirtType:
481     default: ''
482     type: string
483   NovaEnableRbdBackend:
484     default: false
485     description: Whether to enable or not the Rbd backend for Nova
486     type: boolean
487   NovaImage:
488     type: string
489     default: overcloud-compute
490     constraints:
491       - custom_constraint: glance.image
492   OvercloudComputeFlavor:
493     description: Use this flavor
494     type: string
495     constraints:
496       - custom_constraint: nova.flavor
497   ServiceNetMap:
498     default:
499       NeutronLocalIp: tenant
500       CeilometerApiNetwork: internal_api
501       MongoDbNetwork: internal_api
502       CinderApiNetwork: internal_api
503       CinderIscsiNetwork: storage
504       GlanceApiNetwork: storage
505       GlanceRegistryNetwork: internal_api
506       KeystoneAdminApiNetwork: internal_api
507       KeystonePublicApiNetwork: internal_api
508       NeutronApiNetwork: internal_api
509       HeatApiNetwork: internal_api
510       NovaApiNetwork: internal_api
511       NovaMetadataNetwork: internal_api
512       SwiftMgmtNetwork: storage_mgmt
513       SwiftProxyNetwork: storage
514       HorizonNetwork: internal_api
515       MemcachedNetwork: internal_api
516       RabbitMqNetwork: internal_api
517       RedisNetwork: internal_api
518       MysqlNetwork: internal_api
519       CephClusterNetwork: storage_mgmt
520       CephPublicNetwork: storage
521     description: Mapping of service_name -> network name. Typically set
522                  via parameter_defaults in the resource registry.
523     type: json
524
525 # Block storage specific parameters
526   BlockStorageCount:
527     type: number
528     default: 0
529   BlockStorageImage:
530     default: overcloud-cinder-volume
531     type: string
532   OvercloudBlockStorageFlavor:
533     description: Flavor for block storage nodes to request when deploying.
534     type: string
535     constraints:
536       - custom_constraint: nova.flavor
537
538 # Object storage specific parameters
539   ObjectStorageCount:
540     type: number
541     default: 0
542   OvercloudSwiftStorageFlavor:
543     description: Flavor for Swift storage nodes to request when deploying.
544     type: string
545     constraints:
546       - custom_constraint: nova.flavor
547   SwiftStorageImage:
548     default: overcloud-swift-storage
549     type: string
550
551 # Ceph storage specific parameters
552   CephStorageCount:
553     type: number
554     default: 0
555   CephStorageImage:
556     default: overcloud-ceph-storage
557     type: string
558   OvercloudCephStorageFlavor:
559     default: baremetal
560     description: Flavor for Ceph storage nodes to request when deploying.
561     type: string
562     constraints:
563       - custom_constraint: nova.flavor
564
565 # Identifiers to trigger tasks on nodes
566   UpdateIdentifier:
567     default: ''
568     type: string
569     description: >
570       Setting to a previously unused value during stack-update will trigger
571       package update on all nodes
572
573 resources:
574
575   HeatAuthEncryptionKey:
576     type: OS::Heat::RandomString
577
578   PcsdPassword:
579     type: OS::Heat::RandomString
580     properties:
581       length: 16
582
583   HorizonSecret:
584     type: OS::Heat::RandomString
585     properties:
586       length: 10
587
588   Controller:
589     type: OS::Heat::ResourceGroup
590     depends_on: Networks
591     properties:
592       count: {get_param: ControllerCount}
593       resource_def:
594         type: OS::TripleO::Controller
595         properties:
596           AdminPassword: {get_param: AdminPassword}
597           AdminToken: {get_param: AdminToken}
598           CeilometerBackend: {get_param: CeilometerBackend}
599           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
600           CeilometerPassword: {get_param: CeilometerPassword}
601           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
602           CinderPassword: {get_param: CinderPassword}
603           CinderISCSIHelper: {get_param: CinderISCSIHelper}
604           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
605           CinderEnableRbdBackend: {get_param: CinderEnableRbdBackend}
606           CloudName: {get_param: CloudName}
607           ControlVirtualInterface: {get_param: ControlVirtualInterface}
608           ControllerExtraConfig: {get_param: controllerExtraConfig}
609           Debug: {get_param: Debug}
610           EnableGalera: {get_param: EnableGalera}
611           EnablePacemaker: {get_param: EnablePacemaker}
612           EnableCephStorage: {get_param: ControllerEnableCephStorage}
613           EnableSwiftStorage: {get_param: ControllerEnableSwiftStorage}
614           ExtraConfig: {get_param: ExtraConfig}
615           Flavor: {get_param: OvercloudControlFlavor}
616           GlancePort: {get_param: GlancePort}
617           GlanceProtocol: {get_param: GlanceProtocol}
618           GlancePassword: {get_param: GlancePassword}
619           GlanceBackend: {get_param: GlanceBackend}
620           GlanceNotifierStrategy: {get_param: GlanceNotifierStrategy}
621           GlanceLogFile: {get_param: GlanceLogFile}
622           HeatPassword: {get_param: HeatPassword}
623           HeatStackDomainAdminPassword: {get_param: HeatStackDomainAdminPassword}
624           HeatAuthEncryptionKey: {get_resource: HeatAuthEncryptionKey}
625           HorizonSecret: {get_resource: HorizonSecret}
626           Image: {get_param: controllerImage}
627           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
628           KeyName: {get_param: KeyName}
629           KeystoneCACertificate: {get_param: KeystoneCACertificate}
630           KeystoneSigningCertificate: {get_param: KeystoneSigningCertificate}
631           KeystoneSigningKey: {get_param: KeystoneSigningKey}
632           KeystoneSSLCertificate: {get_param: KeystoneSSLCertificate}
633           KeystoneSSLCertificateKey: {get_param: KeystoneSSLCertificateKey}
634           MysqlClusterUniquePart: {get_attr: [MysqlClusterUniquePart, value]}
635           MysqlInnodbBufferPoolSize: {get_param: MysqlInnodbBufferPoolSize}
636           MysqlRootPassword: {get_attr: [MysqlRootPassword, value]}
637           NeutronPublicInterfaceIP: {get_param: NeutronPublicInterfaceIP}
638           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
639           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
640           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
641           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
642           NeutronPublicInterface: {get_param: NeutronPublicInterface}
643           NeutronPublicInterfaceDefaultRoute: {get_param: NeutronPublicInterfaceDefaultRoute}
644           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
645           NeutronPassword: {get_param: NeutronPassword}
646           NeutronDnsmasqOptions: {get_param: NeutronDnsmasqOptions}
647           NeutronDVR: {get_param: NeutronDVR}
648           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
649           NeutronAgentMode: {get_param: NeutronAgentMode}
650           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
651           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
652           NeutronL3HA: {get_param: NeutronL3HA}
653           NeutronNetworkType: {get_param: NeutronNetworkType}
654           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
655           NovaPassword: {get_param: NovaPassword}
656           NtpServer: {get_param: NtpServer}
657           PcsdPassword: {get_resource: PcsdPassword}
658           PublicVirtualInterface: {get_param: PublicVirtualInterface}
659           RabbitPassword: {get_param: RabbitPassword}
660           RabbitUserName: {get_param: RabbitUserName}
661           RabbitCookie: {get_attr: [RabbitCookie, value]}
662           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
663           RabbitClientPort: {get_param: RabbitClientPort}
664           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
665           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
666           RedisVirtualIP: {get_attr: [RedisVirtualIP, ip_address]}
667           SSLCertificate: {get_param: SSLCertificate}
668           SSLKey: {get_param: SSLKey}
669           SSLCACertificate: {get_param: SSLCACertificate}
670           SwiftHashSuffix: {get_param: SwiftHashSuffix}
671           SwiftMountCheck: {get_param: SwiftMountCheck}
672           SwiftMinPartHours: {get_param: SwiftMinPartHours}
673           SwiftPartPower: {get_param: SwiftPartPower}
674           SwiftPassword: {get_param: SwiftPassword}
675           SwiftReplicas: { get_param: SwiftReplicas}
676           VirtualIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} # deprecated. Use per service VIP settings instead now.
677           PublicVirtualIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]} # deprecated. Use per service VIP settings instead now.
678           ServiceNetMap: {get_param: ServiceNetMap}
679           HeatApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
680           GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
681           MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
682           KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
683           NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
684           UpdateIdentifier: {get_param: UpdateIdentifier}
685
686   Compute:
687     type: OS::Heat::ResourceGroup
688     depends_on: Networks
689     properties:
690       count: {get_param: ComputeCount}
691       resource_def:
692         type: OS::TripleO::Compute
693         properties:
694           AdminPassword: {get_param: AdminPassword}
695           CeilometerComputeAgent: {get_param: CeilometerComputeAgent}
696           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
697           CeilometerPassword: {get_param: CeilometerPassword}
698           Debug: {get_param: Debug}
699           ExtraConfig: {get_param: ExtraConfig}
700           Flavor: {get_param: OvercloudComputeFlavor}
701           GlanceHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
702           GlancePort: {get_param: GlancePort}
703           GlanceProtocol: {get_param: GlanceProtocol}
704           Image: {get_param: NovaImage}
705           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
706           KeyName: {get_param: KeyName}
707           KeystoneHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
708           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
709           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
710           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
711           NeutronHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
712           NeutronNetworkType: {get_param: NeutronNetworkType}
713           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
714           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
715           NeutronPassword: {get_param: NeutronPassword}
716           NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
717           NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
718           NeutronDVR: {get_param: NeutronDVR}
719           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
720           NeutronAgentMode: {get_param: NeutronComputeAgentMode}
721           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
722           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
723           # L3 HA and Failover is not relevant for Computes, should be removed
724           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
725           NeutronL3HA: {get_param: NeutronL3HA}
726           NovaApiHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
727           NovaComputeDriver: {get_param: NovaComputeDriver}
728           NovaComputeExtraConfig: {get_param: NovaComputeExtraConfig}
729           NovaComputeLibvirtType: {get_param: NovaComputeLibvirtType}
730           NovaEnableRbdBackend: {get_param: NovaEnableRbdBackend}
731           NovaPublicIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
732           NovaPassword: {get_param: NovaPassword}
733           NtpServer: {get_param: NtpServer}
734           RabbitHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
735           RabbitPassword: {get_param: RabbitPassword}
736           RabbitUserName: {get_param: RabbitUserName}
737           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
738           RabbitClientPort: {get_param: RabbitClientPort}
739           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
740           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
741           ServiceNetMap: {get_param: ServiceNetMap}
742           UpdateIdentifier: {get_param: UpdateIdentifier}
743
744   BlockStorage:
745     type: OS::Heat::ResourceGroup
746     depends_on: Networks
747     properties:
748       count: {get_param: BlockStorageCount}
749       resource_def:
750         type: OS::TripleO::BlockStorage
751         properties:
752           Debug: {get_param: Debug}
753           Image: {get_param: BlockStorageImage}
754           CinderISCSIHelper: {get_param: CinderISCSIHelper}
755           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
756           # Purpose of the dedicated BlockStorage nodes should be to use their local LVM
757           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
758           CinderPassword: {get_param: CinderPassword}
759           VirtualIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
760           KeyName: {get_param: KeyName}
761           Flavor: {get_param: OvercloudBlockStorageFlavor}
762           RabbitPassword: {get_param: RabbitPassword}
763           RabbitUserName: {get_param: RabbitUserName}
764           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
765           RabbitClientPort: {get_param: RabbitClientPort}
766           NtpServer: {get_param: NtpServer}
767           UpdateIdentifier: {get_param: UpdateIdentifier}
768
769   ObjectStorage:
770     type: OS::Heat::ResourceGroup
771     depends_on: Networks
772     properties:
773       count: {get_param: ObjectStorageCount}
774       resource_def:
775         type: OS::TripleO::ObjectStorage
776         properties:
777           KeyName: {get_param: KeyName}
778           Flavor: {get_param: OvercloudSwiftStorageFlavor}
779           HashSuffix: {get_param: SwiftHashSuffix}
780           MountCheck: {get_param: SwiftMountCheck}
781           MinPartHours: {get_param: SwiftMinPartHours}
782           PartPower: {get_param: SwiftPartPower}
783           Image: {get_param: SwiftStorageImage}
784           Replicas: { get_param: SwiftReplicas}
785           NtpServer: {get_param: NtpServer}
786           UpdateIdentifier: {get_param: UpdateIdentifier}
787
788   CephStorage:
789     type: OS::Heat::ResourceGroup
790     depends_on: Networks
791     properties:
792       count: {get_param: CephStorageCount}
793       resource_def:
794         type: OS::TripleO::CephStorage
795         properties:
796           Image: {get_param: CephStorageImage}
797           KeyName: {get_param: KeyName}
798           Flavor: {get_param: OvercloudCephStorageFlavor}
799           NtpServer: {get_param: NtpServer}
800           ServiceNetMap: {get_param: ServiceNetMap}
801           UpdateIdentifier: {get_param: UpdateIdentifier}
802
803   ControllerIpListMap:
804     type: OS::TripleO::Network::Ports::NetIpListMap
805     properties:
806       ExternalIpList: {get_attr: [Controller, external_ip_address]}
807       InternalApiIpList: {get_attr: [Controller, internal_api_ip_address]}
808       StorageIpList: {get_attr: [Controller, storage_ip_address]}
809       StorageMgmtIpList: {get_attr: [Controller, storage_mgmt_ip_address]}
810       TenantIpList: {get_attr: [Controller, tenant_ip_address]}
811
812   allNodesConfig:
813     type: OS::TripleO::AllNodes::SoftwareConfig
814     properties:
815       compute_hosts: {get_attr: [Compute, hosts_entry]}
816       controller_hosts: {get_attr: [Controller, hosts_entry]}
817       controller_ips: {get_attr: [Controller, ip_address]}
818       block_storage_hosts: {get_attr: [BlockStorage, hosts_entry]}
819       object_storage_hosts: {get_attr: [ObjectStorage, hosts_entry]}
820       ceph_storage_hosts: {get_attr: [CephStorage, hosts_entry]}
821       controller_names: {get_attr: [Controller, hostname]}
822       rabbit_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
823       mongo_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
824       redis_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
825       memcache_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
826       mysql_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
827       horizon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
828       heat_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
829       swift_proxy_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
830       ceilometer_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
831       nova_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
832       nova_metadata_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
833       glance_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
834       glance_registry_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
835       cinder_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
836       neutron_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
837       keystone_public_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
838       keystone_admin_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
839
840   MysqlRootPassword:
841     type: OS::Heat::RandomString
842     properties:
843       length: 10
844
845   MysqlClusterUniquePart:
846     type: OS::Heat::RandomString
847     properties:
848       length: 10
849
850   RabbitCookie:
851     type: OS::Heat::RandomString
852     properties:
853       length: 20
854       salt: {get_param: RabbitCookieSalt}
855
856   # creates the network architecture
857   Networks:
858     type: OS::TripleO::Network
859
860   ControlVirtualIP:
861     type: OS::Neutron::Port
862     depends_on: Networks
863     properties:
864       name: control_virtual_ip
865       network_id: {get_param: NeutronControlPlaneID}
866       fixed_ips: {get_param: ControlFixedIPs}
867       replacement_policy: AUTO
868
869   RedisVirtualIP:
870     depends_on: Networks
871     type: OS::TripleO::Controller::Ports::RedisVipPort
872     properties:
873       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
874       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
875       PortName: redis_virtual_ip
876       NetworkName: {get_param: [ServiceNetMap, RedisNetwork]}
877
878   # same as external
879   PublicVirtualIP:
880     type: OS::Neutron::Port
881     depends_on: Networks
882     properties:
883       name: public_virtual_ip
884       network: {get_param: PublicVirtualNetwork}
885       fixed_ips: {get_param: PublicVirtualFixedIPs}
886       replacement_policy: AUTO
887
888   InternalApiVirtualIP:
889     depends_on: Networks
890     type: OS::TripleO::Controller::Ports::InternalApiPort
891     properties:
892       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
893       PortName: internal_api_virtual_ip
894
895   StorageVirtualIP:
896     depends_on: Networks
897     type: OS::TripleO::Controller::Ports::StoragePort
898     properties:
899       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
900       PortName: storage_virtual_ip
901
902   StorageMgmtVirtualIP:
903     depends_on: Networks
904     type: OS::TripleO::Controller::Ports::StorageMgmtPort
905     properties:
906       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
907       PortName: storage_management_virtual_ip
908
909   VipMap:
910     type: OS::TripleO::Network::Ports::NetIpMap
911     properties:
912       ExternalIp: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
913       InternalApiIp: {get_attr: [InternalApiVirtualIP, ip_address]}
914       StorageIp: {get_attr: [StorageVirtualIP, ip_address]}
915       StorageMgmtIp: {get_attr: [StorageMgmtVirtualIP, ip_address]}
916       # No tenant VIP required
917
918   VipConfig:
919     type: OS::TripleO::VipConfig
920
921   VipDeployment:
922     type: OS::Heat::StructuredDeployments
923     properties:
924       config: {get_resource: VipConfig}
925       servers: {get_attr: [Controller, attributes, nova_server_resource]}
926       input_values:
927         # service VIP mappings
928         keystone_admin_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
929         keystone_public_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
930         neutron_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
931         cinder_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
932         glance_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
933         glance_registry_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
934         swift_proxy_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
935         nova_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
936         nova_metadata_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
937         ceilometer_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
938         heat_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
939         horizon_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
940         redis_vip: {get_attr: [RedisVirtualIP, ip_address]}
941         mysql_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
942         rabbit_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
943         # direct configuration of Virtual IPs for each network
944         control_virtual_ip: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
945         public_virtual_ip: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
946         internal_api_virtual_ip: {get_attr: [InternalApiVirtualIP, ip_address]}
947         storage_virtual_ip: {get_attr: [StorageVirtualIP, ip_address]}
948         storage_mgmt_virtual_ip: {get_attr: [StorageMgmtVirtualIP, ip_address]}
949
950   ControllerBootstrapNodeConfig:
951     type: OS::TripleO::BootstrapNode::SoftwareConfig
952     properties:
953       bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
954       bootstrap_nodeid_ip: {get_attr: [Controller, resource.0.ip_address]}
955
956   ControllerBootstrapNodeDeployment:
957     type: OS::Heat::StructuredDeployments
958     properties:
959       config: {get_attr: [ControllerBootstrapNodeConfig, config_id]}
960       servers: {get_attr: [Controller, attributes, nova_server_resource]}
961       signal_transport: NO_SIGNAL
962
963   ControllerSwiftDeployment:
964     type: OS::Heat::StructuredDeployments
965     properties:
966       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
967       servers: {get_attr: [Controller, attributes, nova_server_resource]}
968       signal_transport: NO_SIGNAL
969
970   ObjectStorageSwiftDeployment:
971     type: OS::Heat::StructuredDeployments
972     properties:
973       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
974       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
975       signal_transport: NO_SIGNAL
976
977   SwiftDevicesAndProxyConfig:
978     type: OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig
979     properties:
980       controller_swift_devices: {get_attr: [Controller, swift_device]}
981       object_store_swift_devices: {get_attr: [ObjectStorage, swift_device]}
982       controller_swift_proxy_memcaches: {get_attr: [Controller, swift_proxy_memcache]}
983
984   ComputeCephDeployment:
985     type: OS::Heat::StructuredDeployments
986     properties:
987       config: {get_attr: [CephClusterConfig, config_id]}
988       servers: {get_attr: [Compute, attributes, nova_server_resource]}
989
990   ControllerCephDeployment:
991     type: OS::Heat::StructuredDeployments
992     properties:
993       config: {get_attr: [CephClusterConfig, config_id]}
994       servers: {get_attr: [Controller, attributes, nova_server_resource]}
995
996   CephStorageCephDeployment:
997     type: OS::Heat::StructuredDeployments
998     properties:
999       config: {get_attr: [CephClusterConfig, config_id]}
1000       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1001
1002   CephClusterConfig:
1003     type: OS::TripleO::CephClusterConfig::SoftwareConfig
1004     properties:
1005       ceph_fsid: {get_param: CephClusterFSID}
1006       ceph_mon_key: {get_param: CephMonKey}
1007       ceph_admin_key: {get_param: CephAdminKey}
1008       ceph_mon_names: {get_attr: [Controller, hostname]}
1009       ceph_mon_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
1010
1011   ControllerClusterConfig:
1012     type: OS::Heat::StructuredConfig
1013     properties:
1014       config:
1015         corosync:
1016           nodes: {get_attr: [Controller, corosync_node]}
1017         horizon:
1018           caches:
1019             memcached:
1020               nodes: {get_attr: [Controller, hostname]}
1021         mysql:
1022           nodes: {get_attr: [Controller, corosync_node]}
1023         haproxy:
1024           nodes: {get_attr: [Controller, corosync_node]}
1025
1026   ControllerClusterDeployment:
1027     type: OS::Heat::StructuredDeployments
1028     properties:
1029       config: {get_resource: ControllerClusterConfig}
1030       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1031       signal_transport: NO_SIGNAL
1032
1033   ControllerAllNodesDeployment:
1034     type: OS::Heat::StructuredDeployments
1035     properties:
1036       config: {get_attr: [allNodesConfig, config_id]}
1037       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1038
1039   ComputeAllNodesDeployment:
1040     type: OS::Heat::StructuredDeployments
1041     properties:
1042       config: {get_attr: [allNodesConfig, config_id]}
1043       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1044
1045   BlockStorageAllNodesDeployment:
1046     type: OS::Heat::StructuredDeployments
1047     properties:
1048       config: {get_attr: [allNodesConfig, config_id]}
1049       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1050
1051   ObjectStorageAllNodesDeployment:
1052     type: OS::Heat::StructuredDeployments
1053     properties:
1054       config: {get_attr: [allNodesConfig, config_id]}
1055       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1056
1057   CephStorageAllNodesDeployment:
1058     type: OS::Heat::StructuredDeployments
1059     properties:
1060       config: {get_attr: [allNodesConfig, config_id]}
1061       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1062
1063   # Nested stack deployment runs after all other controller deployments
1064   ControllerNodesPostDeployment:
1065     type: OS::TripleO::ControllerPostDeployment
1066     depends_on: [ControllerBootstrapNodeDeployment, ControllerAllNodesDeployment, ControllerSwiftDeployment, ControllerCephDeployment]
1067     properties:
1068       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1069
1070   ComputeNodesPostDeployment:
1071     type: OS::TripleO::ComputePostDeployment
1072     depends_on: [ComputeAllNodesDeployment, ComputeCephDeployment]
1073     properties:
1074       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1075
1076   ObjectStorageNodesPostDeployment:
1077     type: OS::TripleO::ObjectStoragePostDeployment
1078     depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment]
1079     properties:
1080       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1081
1082   BlockStorageNodesPostDeployment:
1083     type: OS::TripleO::BlockStoragePostDeployment
1084     depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment]
1085     properties:
1086       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1087
1088   CephStorageNodesPostDeployment:
1089     type: OS::TripleO::CephStoragePostDeployment
1090     depends_on: [ControllerNodesPostDeployment, CephStorageCephDeployment, CephStorageAllNodesDeployment]
1091     properties:
1092       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1093
1094 outputs:
1095   KeystoneURL:
1096     description: URL for the Overcloud Keystone service
1097     value:
1098       list_join:
1099       - ''
1100       - - http://
1101         - {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
1102         - :5000/v2.0/