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