Merge "Add virtual IPs for split out networks"
[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: string
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: external
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: external
515       MemcachedNetwork: internal_api
516       RabbitMqNetwork: internal_api
517       RedisNetwork: internal_api
518       MysqlNetwork: internal_api
519     description: Mapping of service_name -> network name. Typically set
520                  via parameter_defaults in the resource registry.
521     type: json
522
523 # Block storage specific parameters
524   BlockStorageCount:
525     type: number
526     default: 0
527   BlockStorageImage:
528     default: overcloud-cinder-volume
529     type: string
530   OvercloudBlockStorageFlavor:
531     description: Flavor for block storage nodes to request when deploying.
532     type: string
533     constraints:
534       - custom_constraint: nova.flavor
535
536 # Object storage specific parameters
537   ObjectStorageCount:
538     type: number
539     default: 0
540   OvercloudSwiftStorageFlavor:
541     description: Flavor for Swift storage nodes to request when deploying.
542     type: string
543     constraints:
544       - custom_constraint: nova.flavor
545   SwiftStorageImage:
546     default: overcloud-swift-storage
547     type: string
548
549 # Ceph storage specific parameters
550   CephStorageCount:
551     type: number
552     default: 0
553   CephStorageImage:
554     default: overcloud-ceph-storage
555     type: string
556   OvercloudCephStorageFlavor:
557     default: baremetal
558     description: Flavor for Ceph storage nodes to request when deploying.
559     type: string
560     constraints:
561       - custom_constraint: nova.flavor
562
563 resources:
564
565   HeatAuthEncryptionKey:
566     type: OS::Heat::RandomString
567
568   PcsdPassword:
569     type: OS::Heat::RandomString
570     properties:
571       length: 16
572
573   HorizonSecret:
574     type: OS::Heat::RandomString
575     properties:
576       length: 10
577
578   Controller:
579     type: OS::Heat::ResourceGroup
580     depends_on: Networks
581     properties:
582       count: {get_param: ControllerCount}
583       resource_def:
584         type: OS::TripleO::Controller
585         properties:
586           AdminPassword: {get_param: AdminPassword}
587           AdminToken: {get_param: AdminToken}
588           CeilometerBackend: {get_param: CeilometerBackend}
589           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
590           CeilometerPassword: {get_param: CeilometerPassword}
591           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
592           CinderPassword: {get_param: CinderPassword}
593           CinderISCSIHelper: {get_param: CinderISCSIHelper}
594           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
595           CinderEnableRbdBackend: {get_param: CinderEnableRbdBackend}
596           CloudName: {get_param: CloudName}
597           ControlVirtualInterface: {get_param: ControlVirtualInterface}
598           ControllerExtraConfig: {get_param: controllerExtraConfig}
599           Debug: {get_param: Debug}
600           EnableGalera: {get_param: EnableGalera}
601           EnablePacemaker: {get_param: EnablePacemaker}
602           EnableCephStorage: {get_param: ControllerEnableCephStorage}
603           EnableSwiftStorage: {get_param: ControllerEnableSwiftStorage}
604           ExtraConfig: {get_param: ExtraConfig}
605           Flavor: {get_param: OvercloudControlFlavor}
606           GlancePort: {get_param: GlancePort}
607           GlanceProtocol: {get_param: GlanceProtocol}
608           GlancePassword: {get_param: GlancePassword}
609           GlanceBackend: {get_param: GlanceBackend}
610           GlanceNotifierStrategy: {get_param: GlanceNotifierStrategy}
611           GlanceLogFile: {get_param: GlanceLogFile}
612           HeatPassword: {get_param: HeatPassword}
613           HeatStackDomainAdminPassword: {get_param: HeatStackDomainAdminPassword}
614           HeatAuthEncryptionKey: {get_resource: HeatAuthEncryptionKey}
615           HorizonSecret: {get_resource: HorizonSecret}
616           Image: {get_param: controllerImage}
617           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
618           KeyName: {get_param: KeyName}
619           KeystoneCACertificate: {get_param: KeystoneCACertificate}
620           KeystoneSigningCertificate: {get_param: KeystoneSigningCertificate}
621           KeystoneSigningKey: {get_param: KeystoneSigningKey}
622           KeystoneSSLCertificate: {get_param: KeystoneSSLCertificate}
623           KeystoneSSLCertificateKey: {get_param: KeystoneSSLCertificateKey}
624           MysqlClusterUniquePart: {get_attr: [MysqlClusterUniquePart, value]}
625           MysqlInnodbBufferPoolSize: {get_param: MysqlInnodbBufferPoolSize}
626           MysqlRootPassword: {get_attr: [MysqlRootPassword, value]}
627           NeutronPublicInterfaceIP: {get_param: NeutronPublicInterfaceIP}
628           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
629           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
630           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
631           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
632           NeutronPublicInterface: {get_param: NeutronPublicInterface}
633           NeutronPublicInterfaceDefaultRoute: {get_param: NeutronPublicInterfaceDefaultRoute}
634           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
635           NeutronPassword: {get_param: NeutronPassword}
636           NeutronDnsmasqOptions: {get_param: NeutronDnsmasqOptions}
637           NeutronDVR: {get_param: NeutronDVR}
638           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
639           NeutronAgentMode: {get_param: NeutronAgentMode}
640           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
641           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
642           NeutronL3HA: {get_param: NeutronL3HA}
643           NeutronNetworkType: {get_param: NeutronNetworkType}
644           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
645           NovaPassword: {get_param: NovaPassword}
646           NtpServer: {get_param: NtpServer}
647           PcsdPassword: {get_resource: PcsdPassword}
648           PublicVirtualInterface: {get_param: PublicVirtualInterface}
649           RabbitPassword: {get_param: RabbitPassword}
650           RabbitUserName: {get_param: RabbitUserName}
651           RabbitCookie: {get_attr: [RabbitCookie, value]}
652           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
653           RabbitClientPort: {get_param: RabbitClientPort}
654           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
655           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
656           SSLCertificate: {get_param: SSLCertificate}
657           SSLKey: {get_param: SSLKey}
658           SSLCACertificate: {get_param: SSLCACertificate}
659           SwiftHashSuffix: {get_param: SwiftHashSuffix}
660           SwiftMountCheck: {get_param: SwiftMountCheck}
661           SwiftMinPartHours: {get_param: SwiftMinPartHours}
662           SwiftPartPower: {get_param: SwiftPartPower}
663           SwiftPassword: {get_param: SwiftPassword}
664           SwiftReplicas: { get_param: SwiftReplicas}
665           VirtualIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
666           PublicVirtualIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
667           ServiceNetMap: {get_param: ServiceNetMap}
668
669   Compute:
670     type: OS::Heat::ResourceGroup
671     depends_on: Networks
672     properties:
673       count: {get_param: ComputeCount}
674       resource_def:
675         type: OS::TripleO::Compute
676         properties:
677           AdminPassword: {get_param: AdminPassword}
678           CeilometerComputeAgent: {get_param: CeilometerComputeAgent}
679           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
680           CeilometerPassword: {get_param: CeilometerPassword}
681           Debug: {get_param: Debug}
682           ExtraConfig: {get_param: ExtraConfig}
683           Flavor: {get_param: OvercloudComputeFlavor}
684           GlanceHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
685           GlancePort: {get_param: GlancePort}
686           GlanceProtocol: {get_param: GlanceProtocol}
687           Image: {get_param: NovaImage}
688           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
689           KeyName: {get_param: KeyName}
690           KeystoneHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
691           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
692           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
693           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
694           NeutronHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
695           NeutronNetworkType: {get_param: NeutronNetworkType}
696           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
697           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
698           NeutronPassword: {get_param: NeutronPassword}
699           NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
700           NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
701           NeutronDVR: {get_param: NeutronDVR}
702           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
703           NeutronAgentMode: {get_param: NeutronComputeAgentMode}
704           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
705           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
706           # L3 HA and Failover is not relevant for Computes, should be removed
707           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
708           NeutronL3HA: {get_param: NeutronL3HA}
709           NovaApiHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
710           NovaComputeDriver: {get_param: NovaComputeDriver}
711           NovaComputeExtraConfig: {get_param: NovaComputeExtraConfig}
712           NovaComputeLibvirtType: {get_param: NovaComputeLibvirtType}
713           NovaEnableRbdBackend: {get_param: NovaEnableRbdBackend}
714           NovaPublicIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
715           NovaPassword: {get_param: NovaPassword}
716           NtpServer: {get_param: NtpServer}
717           RabbitHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
718           RabbitPassword: {get_param: RabbitPassword}
719           RabbitUserName: {get_param: RabbitUserName}
720           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
721           RabbitClientPort: {get_param: RabbitClientPort}
722           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
723           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
724           ServiceNetMap: {get_param: ServiceNetMap}
725
726   BlockStorage:
727     type: OS::Heat::ResourceGroup
728     depends_on: Networks
729     properties:
730       count: {get_param: BlockStorageCount}
731       resource_def:
732         type: OS::TripleO::BlockStorage
733         properties:
734           Debug: {get_param: Debug}
735           Image: {get_param: BlockStorageImage}
736           CinderISCSIHelper: {get_param: CinderISCSIHelper}
737           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
738           # Purpose of the dedicated BlockStorage nodes should be to use their local LVM
739           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
740           CinderPassword: {get_param: CinderPassword}
741           VirtualIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
742           KeyName: {get_param: KeyName}
743           Flavor: {get_param: OvercloudBlockStorageFlavor}
744           RabbitPassword: {get_param: RabbitPassword}
745           RabbitUserName: {get_param: RabbitUserName}
746           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
747           RabbitClientPort: {get_param: RabbitClientPort}
748           NtpServer: {get_param: NtpServer}
749
750   ObjectStorage:
751     type: OS::Heat::ResourceGroup
752     depends_on: Networks
753     properties:
754       count: {get_param: ObjectStorageCount}
755       resource_def:
756         type: OS::TripleO::ObjectStorage
757         properties:
758           KeyName: {get_param: KeyName}
759           Flavor: {get_param: OvercloudSwiftStorageFlavor}
760           HashSuffix: {get_param: SwiftHashSuffix}
761           MountCheck: {get_param: SwiftMountCheck}
762           MinPartHours: {get_param: SwiftMinPartHours}
763           PartPower: {get_param: SwiftPartPower}
764           Image: {get_param: SwiftStorageImage}
765           Replicas: { get_param: SwiftReplicas}
766           NtpServer: {get_param: NtpServer}
767
768   CephStorage:
769     type: OS::Heat::ResourceGroup
770     depends_on: Networks
771     properties:
772       count: {get_param: CephStorageCount}
773       resource_def:
774         type: OS::TripleO::CephStorage
775         properties:
776           Image: {get_param: CephStorageImage}
777           KeyName: {get_param: KeyName}
778           Flavor: {get_param: OvercloudCephStorageFlavor}
779           NtpServer: {get_param: NtpServer}
780
781   ControllerIpListMap:
782     type: OS::TripleO::Network::Ports::NetIpListMap
783     properties:
784       ExternalIpList: {get_attr: [Controller, external_ip_address]}
785       InternalApiIpList: {get_attr: [Controller, internal_api_ip_address]}
786       StorageIpList: {get_attr: [Controller, storage_ip_address]}
787       StorageMgmtIpList: {get_attr: [Controller, storage_mgmt_ip_address]}
788       TenantIpList: {get_attr: [Controller, tenant_ip_address]}
789
790   allNodesConfig:
791     type: OS::TripleO::AllNodes::SoftwareConfig
792     properties:
793       compute_hosts: {get_attr: [Compute, hosts_entry]}
794       controller_hosts: {get_attr: [Controller, hosts_entry]}
795       controller_ips: {get_attr: [Controller, ip_address]}
796       block_storage_hosts: {get_attr: [BlockStorage, hosts_entry]}
797       object_storage_hosts: {get_attr: [ObjectStorage, hosts_entry]}
798       ceph_storage_hosts: {get_attr: [CephStorage, hosts_entry]}
799       controller_names: {get_attr: [Controller, hostname]}
800       rabbit_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
801       mongo_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
802       redis_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
803       memcache_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
804       mysql_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
805       horizon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
806       heat_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
807       swift_proxy_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
808       ceilometer_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
809       nova_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
810       nova_metadata_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
811       glance_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
812       glance_registry_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
813       cinder_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
814       neutron_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
815       keystone_public_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
816       keystone_admin_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
817
818   MysqlRootPassword:
819     type: OS::Heat::RandomString
820     properties:
821       length: 10
822
823   MysqlClusterUniquePart:
824     type: OS::Heat::RandomString
825     properties:
826       length: 10
827
828   RabbitCookie:
829     type: OS::Heat::RandomString
830     properties:
831       length: 20
832       salt: {get_param: RabbitCookieSalt}
833
834   # creates the network architecture
835   Networks:
836     type: OS::TripleO::Network
837
838   ControlVirtualIP:
839     type: OS::Neutron::Port
840     depends_on: Networks
841     properties:
842       name: control_virtual_ip
843       network_id: {get_param: NeutronControlPlaneID}
844       fixed_ips: {get_param: ControlFixedIPs}
845       replacement_policy: AUTO
846
847   # same as external
848   PublicVirtualIP:
849     type: OS::Neutron::Port
850     depends_on: Networks
851     properties:
852       name: public_virtual_ip
853       network: {get_param: PublicVirtualNetwork}
854       fixed_ips: {get_param: PublicVirtualFixedIPs}
855       replacement_policy: AUTO
856
857   InternalApiVirtualIP:
858     depends_on: Networks
859     type: OS::TripleO::Controller::Ports::InternalApiPort
860     properties:
861       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
862       PortName: internal_api_virtual_ip
863
864   StorageVirtualIP:
865     depends_on: Networks
866     type: OS::TripleO::Controller::Ports::StoragePort
867     properties:
868       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
869       PortName: storage_virtual_ip
870
871   StorageMgmtVirtualIP:
872     depends_on: Networks
873     type: OS::TripleO::Controller::Ports::StorageMgmtPort
874     properties:
875       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
876       PortName: storage_management_virtual_ip
877
878   VipMap:
879     type: OS::TripleO::Network::Ports::NetIpMap
880     properties:
881       ExternalIp: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
882       InternalApiIp: {get_attr: [InternalApiVirtualIP, ip_address]}
883       StorageIp: {get_attr: [StorageVirtualIP, ip_address]}
884       StorageMgmtIp: {get_attr: [StorageMgmtVirtualIP, ip_address]}
885       # No tenant VIP required
886
887   VipConfig:
888     type: OS::TripleO::VipConfig
889
890   VipDeployment:
891     type: OS::Heat::StructuredDeployments
892     properties:
893       config: {get_resource: VipConfig}
894       servers: {get_attr: [Controller, attributes, nova_server_resource]}
895       input_values:
896         # service VIP mappings
897         keystone_admin_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
898         keystone_public_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
899         neutron_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
900         cinder_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
901         glance_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
902         glance_registry_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
903         swift_proxy_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
904         nova_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
905         nova_metadata_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
906         ceilometer_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
907         heat_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
908         horizon_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
909         redis_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
910         mysql_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
911         rabbit_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
912         # direct configuration of Virtual IPs for each network
913         internal_api_virtual_ip: {get_attr: [InternalApiVirtualIP, ip_address]}
914         storage_virtual_ip: {get_attr: [StorageVirtualIP, ip_address]}
915         storage_mgmt_virtual_ip: {get_attr: [StorageMgmtVirtualIP, ip_address]}
916
917   ControllerBootstrapNodeConfig:
918     type: OS::TripleO::BootstrapNode::SoftwareConfig
919     properties:
920       bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
921       bootstrap_nodeid_ip: {get_attr: [Controller, resource.0.ip_address]}
922
923   ControllerBootstrapNodeDeployment:
924     type: OS::Heat::StructuredDeployments
925     properties:
926       config: {get_attr: [ControllerBootstrapNodeConfig, config_id]}
927       servers: {get_attr: [Controller, attributes, nova_server_resource]}
928       signal_transport: NO_SIGNAL
929
930   ControllerSwiftDeployment:
931     type: OS::Heat::StructuredDeployments
932     properties:
933       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
934       servers: {get_attr: [Controller, attributes, nova_server_resource]}
935       signal_transport: NO_SIGNAL
936
937   ObjectStorageSwiftDeployment:
938     type: OS::Heat::StructuredDeployments
939     properties:
940       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
941       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
942       signal_transport: NO_SIGNAL
943
944   SwiftDevicesAndProxyConfig:
945     type: OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig
946     properties:
947       controller_swift_devices: {get_attr: [Controller, swift_device]}
948       object_store_swift_devices: {get_attr: [ObjectStorage, swift_device]}
949       controller_swift_proxy_memcaches: {get_attr: [Controller, swift_proxy_memcache]}
950
951   ComputeCephDeployment:
952     type: OS::Heat::StructuredDeployments
953     properties:
954       config: {get_attr: [CephClusterConfig, config_id]}
955       servers: {get_attr: [Compute, attributes, nova_server_resource]}
956
957   ControllerCephDeployment:
958     type: OS::Heat::StructuredDeployments
959     properties:
960       config: {get_attr: [CephClusterConfig, config_id]}
961       servers: {get_attr: [Controller, attributes, nova_server_resource]}
962
963   CephStorageCephDeployment:
964     type: OS::Heat::StructuredDeployments
965     properties:
966       config: {get_attr: [CephClusterConfig, config_id]}
967       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
968
969   CephClusterConfig:
970     type: OS::TripleO::CephClusterConfig::SoftwareConfig
971     properties:
972       ceph_fsid: {get_param: CephClusterFSID}
973       ceph_mon_key: {get_param: CephMonKey}
974       ceph_admin_key: {get_param: CephAdminKey}
975       ceph_mon_names: {get_attr: [Controller, hostname]}
976       ceph_mon_ips: {get_attr: [Controller, ip_address]}
977
978   ControllerClusterConfig:
979     type: OS::Heat::StructuredConfig
980     properties:
981       config:
982         corosync:
983           nodes: {get_attr: [Controller, corosync_node]}
984         horizon:
985           caches:
986             memcached:
987               nodes: {get_attr: [Controller, hostname]}
988         mysql:
989           nodes: {get_attr: [Controller, corosync_node]}
990         haproxy:
991           nodes: {get_attr: [Controller, corosync_node]}
992
993   ControllerClusterDeployment:
994     type: OS::Heat::StructuredDeployments
995     properties:
996       config: {get_resource: ControllerClusterConfig}
997       servers: {get_attr: [Controller, attributes, nova_server_resource]}
998       signal_transport: NO_SIGNAL
999
1000   ControllerAllNodesDeployment:
1001     type: OS::Heat::StructuredDeployments
1002     properties:
1003       config: {get_attr: [allNodesConfig, config_id]}
1004       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1005
1006   ComputeAllNodesDeployment:
1007     type: OS::Heat::StructuredDeployments
1008     properties:
1009       config: {get_attr: [allNodesConfig, config_id]}
1010       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1011
1012   BlockStorageAllNodesDeployment:
1013     type: OS::Heat::StructuredDeployments
1014     properties:
1015       config: {get_attr: [allNodesConfig, config_id]}
1016       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1017
1018   ObjectStorageAllNodesDeployment:
1019     type: OS::Heat::StructuredDeployments
1020     properties:
1021       config: {get_attr: [allNodesConfig, config_id]}
1022       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1023
1024   CephStorageAllNodesDeployment:
1025     type: OS::Heat::StructuredDeployments
1026     properties:
1027       config: {get_attr: [allNodesConfig, config_id]}
1028       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1029
1030   # Nested stack deployment runs after all other controller deployments
1031   ControllerNodesPostDeployment:
1032     type: OS::TripleO::ControllerPostDeployment
1033     depends_on: [ControllerBootstrapNodeDeployment, ControllerAllNodesDeployment, ControllerSwiftDeployment, ControllerCephDeployment]
1034     properties:
1035       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1036
1037   ComputeNodesPostDeployment:
1038     type: OS::TripleO::ComputePostDeployment
1039     depends_on: [ComputeAllNodesDeployment, ComputeCephDeployment]
1040     properties:
1041       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1042
1043   ObjectStorageNodesPostDeployment:
1044     type: OS::TripleO::ObjectStoragePostDeployment
1045     depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment]
1046     properties:
1047       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1048
1049   BlockStorageNodesPostDeployment:
1050     type: OS::TripleO::BlockStoragePostDeployment
1051     depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment]
1052     properties:
1053       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1054
1055   CephStorageNodesPostDeployment:
1056     type: OS::TripleO::CephStoragePostDeployment
1057     depends_on: [ControllerNodesPostDeployment, CephStorageCephDeployment, CephStorageAllNodesDeployment]
1058     properties:
1059       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1060
1061 outputs:
1062   KeystoneURL:
1063     description: URL for the Overcloud Keystone service
1064     value:
1065       list_join:
1066       - ''
1067       - - http://
1068         - {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
1069         - :5000/v2.0/