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