eb274c41039a0d5a13d82dc6b0767c38d521ad62
[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     hidden: true
42   CephAdminKey:
43     default: ''
44     description: The Ceph admin client key. Can be created with ceph-authtool --gen-print-key.
45     type: string
46     hidden: true
47   CinderEnableNfsBackend:
48     default: false
49     description: Whether to enable or not the NFS backend for Cinder
50     type: boolean
51   CephClientKey:
52     default: ''
53     description: The Ceph client key. Can be created with ceph-authtool --gen-print-key. Currently only used for external Ceph deployments to create the openstack user keyring.
54     type: string
55     hidden: true
56   CephExternalMonHost:
57     default: ''
58     type: string
59     description: List of externally managed Ceph Mon Host IPs. Only used for external Ceph deployments.
60   CinderEnableIscsiBackend:
61     default: true
62     description: Whether to enable or not the Iscsi backend for Cinder
63     type: boolean
64   CloudName:
65     default: ''
66     description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
67     type: string
68   ControlFixedIPs:
69     default: []
70     description: Should be used for arbitrary ips.
71     type: json
72   Debug:
73     default: ''
74     description: Set to True to enable debugging on all services.
75     type: string
76   GlancePort:
77     default: "9292"
78     description: Glance port.
79     type: string
80   GlanceProtocol:
81     default: http
82     description: Protocol to use when connecting to glance, set to https for SSL.
83     type: string
84   HorizonAllowedHosts:
85     default: '*'
86     description: A list of IP/Hostname allowed to connect to horizon
87     type: comma_delimited_list
88   ImageUpdatePolicy:
89     default: 'REBUILD_PRESERVE_EPHEMERAL'
90     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
91     type: string
92   KeyName:
93     default: default
94     description: Name of an existing EC2 KeyPair to enable SSH access to the instances
95     type: string
96     constraints:
97       - custom_constraint: nova.keypair
98   NeutronExternalNetworkBridge:
99     description: Name of bridge used for external network traffic.
100     type: string
101     default: 'br-ex'
102   NeutronBridgeMappings:
103     description: >
104       The OVS logical->physical bridge mappings to use. See the Neutron
105       documentation for details. Defaults to mapping br-ex - the external
106       bridge on hosts - to a physical name 'datacentre' which can be used
107       to create provider networks (and we use this for the default floating
108       network) - if changing this either use different post-install network
109       scripts or be sure to keep 'datacentre' as a mapping network name.
110     type: string
111     default: "datacentre:br-ex"
112   NeutronControlPlaneID:
113     default: ''
114     type: string
115     description: Neutron ID for ctlplane network.
116   NeutronEnableTunnelling:
117     type: string
118     default: "True"
119   NeutronFlatNetworks:
120     type: string
121     default: 'datacentre'
122     description: >
123       If set, flat networks to configure in neutron plugins. Defaults to
124       'datacentre' to permit external network creation.
125   NeutronNetworkType:
126     default: 'vxlan'
127     description: The tenant network type for Neutron, either gre or vxlan.
128     type: string
129   NeutronPassword:
130     default: unset
131     description: The password for the neutron service account, used by neutron agents.
132     type: string
133     hidden: true
134   NeutronPublicInterface:
135     default: nic1
136     description: What interface to bridge onto br-ex for network nodes.
137     type: string
138   NeutronPublicInterfaceTag:
139     default: ''
140     description: >
141       VLAN tag for creating a public VLAN. The tag will be used to
142       create an access port on the exterior bridge for each control plane node,
143       and that port will be given the IP address returned by neutron from the
144       public network. Set CONTROLEXTRA=overcloud-vlan-port.yaml when compiling
145       overcloud.yaml to include the deployment of VLAN ports to the control
146       plane.
147     type: string
148   NeutronComputeAgentMode:
149     default: 'dvr'
150     description: Agent mode for the neutron-l3-agent on the compute hosts
151     type: string
152   NeutronAgentMode:
153     default: 'dvr_snat'
154     description: Agent mode for the neutron-l3-agent on the controller hosts
155     type: string
156   NeutronDVR:
157     default: 'False'
158     description: Whether to configure Neutron Distributed Virtual Routers
159     type: string
160   NeutronMetadataProxySharedSecret:
161     default: 'unset'
162     description: Shared secret to prevent spoofing
163     type: string
164     hidden: true
165   NeutronTunnelTypes:
166     default: 'vxlan'
167     description: |
168         The tunnel types for the Neutron tenant network. To specify multiple
169         values, use a comma separated string, like so: 'gre,vxlan'
170     type: string
171   NeutronTunnelIdRanges:
172     description: |
173         Comma-separated list of <tun_min>:<tun_max> tuples enumerating ranges
174         of GRE tunnel IDs that are available for tenant network allocation
175     default: ["1:1000", ]
176     type: comma_delimited_list
177   NeutronVniRanges:
178     description: |
179         Comma-separated list of <vni_min>:<vni_max> tuples enumerating ranges
180         of VXLAN VNI IDs that are available for tenant network allocation
181     default: ["1:1000", ]
182     type: comma_delimited_list
183   NeutronCorePlugin:
184     default: 'ml2'
185     description: |
186         The core plugin for Neutron. The value should be the entrypoint to be loaded
187         from neutron.core_plugins namespace.
188     type: string
189   NeutronServicePlugins:
190     default: "router"
191     description: |
192         Comma-separated list of service plugin entrypoints to be loaded from the
193         neutron.service_plugins namespace.
194     type: comma_delimited_list
195   NeutronTypeDrivers:
196     default: "vxlan,vlan,flat,gre"
197     description: |
198         Comma-separated list of network type driver entrypoints to be loaded.
199     type: comma_delimited_list
200   NeutronMechanismDrivers:
201     default: 'openvswitch'
202     description: |
203         The mechanism drivers for the Neutron tenant network. To specify multiple
204         values, use a comma separated string, like so: 'openvswitch,l2_population'
205     type: string
206   NeutronAllowL3AgentFailover:
207     default: 'True'
208     description: Allow automatic l3-agent failover
209     type: string
210   NeutronL3HA:
211     default: 'False'
212     description: Whether to enable l3-agent HA
213     type: string
214   NeutronDhcpAgentsPerNetwork:
215     type: number
216     default: 3
217     description: The number of neutron dhcp agents to schedule per network
218   NovaPassword:
219     default: unset
220     description: The password for the nova service account, used by nova-api.
221     type: string
222     hidden: true
223   NtpServer:
224     default: ''
225     description: Comma-separated list of ntp servers
226     type: comma_delimited_list
227   MongoDbNoJournal:
228     default: false
229     description: Should MongoDb journaling be disabled
230     type: boolean
231   PublicVirtualFixedIPs:
232     default: []
233     description: >
234         Control the IP allocation for the PublicVirtualInterface port. E.g.
235         [{'ip_address':'1.2.3.4'}]
236     type: json
237   RabbitCookieSalt:
238     type: string
239     default: unset
240     description: Salt for the rabbit cookie, change this to force the randomly generated rabbit cookie to change.
241   # FIXME: 'guest' is provisioned in RabbitMQ by default, we should create a user if these are changed
242   RabbitUserName:
243     default: guest
244     description: The username for RabbitMQ
245     type: string
246   RabbitPassword:
247     default: guest
248     description: The password for RabbitMQ
249     type: string
250     hidden: true
251   RabbitClientUseSSL:
252     default: false
253     description: >
254         Rabbit client subscriber parameter to specify
255         an SSL connection to the RabbitMQ host.
256     type: string
257   RabbitClientPort:
258     default: 5672
259     description: Set rabbit subscriber port, change this if using SSL
260     type: number
261   # We need to set this as string because 'unlimited' is a valid setting
262   RabbitFDLimit:
263     default: 16384
264     description: Configures RabbitMQ FD limit
265     type: string
266   SnmpdReadonlyUserName:
267     default: ro_snmp_user
268     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
269     type: string
270   SnmpdReadonlyUserPassword:
271     default: unset
272     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
273     type: string
274     hidden: true
275
276   # Controller-specific params
277   AdminToken:
278     default: unset
279     description: The keystone auth secret.
280     type: string
281     hidden: true
282   CinderEnableRbdBackend:
283     default: false
284     description: Whether to enable or not the Rbd backend for Cinder
285     type: boolean
286   CinderLVMLoopDeviceSize:
287     default: 5000
288     description: The size of the loopback file used by the cinder LVM driver.
289     type: number
290   CinderNfsMountOptions:
291     default: ''
292     description: >
293       Mount options for NFS mounts used by Cinder NFS backend. Effective
294       when CinderEnableNfsBackend is true.
295     type: string
296   CinderNfsServers:
297     default: ''
298     description: >
299       NFS servers used by Cinder NFS backend. Effective when
300       CinderEnableNfsBackend is true.
301     type: comma_delimited_list
302   CinderPassword:
303     default: unset
304     description: The password for the cinder service account, used by cinder-api.
305     type: string
306     hidden: true
307   CinderISCSIHelper:
308     default: tgtadm
309     description: The iSCSI helper to use with cinder.
310     type: string
311   ControllerCount:
312     type: number
313     default: 1
314   controllerExtraConfig:
315     default: {}
316     description: |
317       Controller specific configuration to inject into the cluster. Same
318       structure as ExtraConfig.
319     type: json
320   controllerImage:
321     type: string
322     default: overcloud-control
323     constraints:
324       - custom_constraint: glance.image
325   OvercloudControlFlavor:
326     description: Flavor for control nodes to request when deploying.
327     type: string
328     constraints:
329       - custom_constraint: nova.flavor
330   ControlVirtualInterface:
331     default: 'br-ex'
332     description: Interface where virtual ip will be assigned.
333     type: string
334   EnableFencing:
335     default: false
336     description: Whether to enable fencing in Pacemaker or not.
337     type: boolean
338   EnableGalera:
339     default: true
340     description: Whether to use Galera instead of regular MariaDB.
341     type: boolean
342   ControllerEnableCephStorage:
343     default: false
344     description: Whether to deploy Ceph Storage (OSD) on the Controller
345     type: boolean
346   ControllerEnableSwiftStorage:
347     default: true
348     description: Whether to enable Swift Storage on the Controller
349     type: boolean
350   ExtraConfig:
351     default: {}
352     description: |
353       Additional configuration to inject into the cluster. The format required
354       may be implementation specific, e.g puppet hieradata.  Any role specific
355       ExtraConfig, e.g controllerExtraConfig takes precedence over ExtraConfig.
356     type: json
357   FencingConfig:
358     default: {}
359     description: |
360       Pacemaker fencing configuration. The JSON should have
361       the following structure:
362         {
363           "devices": [
364             {
365               "agent": "AGENT_NAME",
366               "host_mac": "HOST_MAC_ADDRESS",
367               "params": {"PARAM_NAME": "PARAM_VALUE"}
368             }
369           ]
370         }
371       For instance:
372         {
373           "devices": [
374             {
375               "agent": "fence_xvm",
376               "host_mac": "52:54:00:aa:bb:cc",
377               "params": {
378                 "multicast_address": "225.0.0.12",
379                 "port": "baremetal_0",
380                 "manage_fw": true,
381                 "manage_key_file": true,
382                 "key_file": "/etc/fence_xvm.key",
383                 "key_file_password": "abcdef"
384               }
385             }
386           ]
387         }
388     type: json
389   GlanceLogFile:
390     description: The filepath of the file to use for logging messages from Glance.
391     type: string
392     default: ''
393   GlanceNotifierStrategy:
394     description: Strategy to use for Glance notification queue
395     type: string
396     default: noop
397   GlancePassword:
398     default: unset
399     description: The password for the glance service account, used by the glance services.
400     type: string
401     hidden: true
402   GlanceBackend:
403     default: swift
404     description: The short name of the Glance backend to use. Should be one
405       of swift, rbd or file
406     type: string
407     constraints:
408     - allowed_values: ['swift', 'file', 'rbd']
409   HeatPassword:
410     default: unset
411     description: The password for the Heat service account, used by the Heat services.
412     type: string
413     hidden: true
414   HeatStackDomainAdminPassword:
415     description: Password for heat_domain_admin user.
416     type: string
417     default: ''
418     hidden: true
419   KeystoneCACertificate:
420     default: ''
421     description: Keystone self-signed certificate authority certificate.
422     type: string
423   KeystoneSigningCertificate:
424     default: ''
425     description: Keystone certificate for verifying token validity.
426     type: string
427   KeystoneSigningKey:
428     default: ''
429     description: Keystone key for signing tokens.
430     type: string
431     hidden: true
432   KeystoneSSLCertificate:
433     default: ''
434     description: Keystone certificate for verifying token validity.
435     type: string
436   KeystoneSSLCertificateKey:
437     default: ''
438     description: Keystone key for signing tokens.
439     type: string
440     hidden: true
441   KeystoneNotificationDriver:
442     description: Comma-separated list of Oslo notification drivers used by Keystone
443     default: ['messaging']
444     type: comma_delimited_list
445   KeystoneNotificationFormat:
446     description: The Keystone notification format
447     default: 'basic'
448     type: string
449     constraints:
450       - allowed_values: [ 'basic', 'cadf' ]
451   MysqlInnodbBufferPoolSize:
452     description: >
453         Specifies the size of the buffer pool in megabytes. Setting to
454         zero should be interpreted as "no value" and will defer to the
455         lower level default.
456     type: number
457     default: 0
458   MysqlMaxConnections:
459     description: Configures MySQL max_connections config setting
460     type: number
461     default: 4096
462   NeutronDnsmasqOptions:
463     default: 'dhcp-option-force=26,1400'
464     description: Dnsmasq options for neutron-dhcp-agent. The default value here forces MTU to be set to 1400 to account for the tunnel overhead.
465     type: string
466   NeutronPublicInterfaceDefaultRoute:
467     default: ''
468     description: A custom default route for the NeutronPublicInterface.
469     type: string
470   NeutronPublicInterfaceIP:
471     default: ''
472     description: A custom IP address to put onto the NeutronPublicInterface.
473     type: string
474   NeutronPublicInterfaceRawDevice:
475     default: ''
476     description: If set, the public interface is a vlan with this device as the raw device.
477     type: string
478   PublicVirtualInterface:
479     default: 'br-ex'
480     description: >
481         Specifies the interface where the public-facing virtual ip will be assigned.
482         This should be int_public when a VLAN is being used.
483     type: string
484   SSLCertificate:
485     default: ''
486     description: If set, the contents of an SSL certificate .crt file for encrypting SSL endpoints.
487     type: string
488     hidden: true
489   SSLKey:
490     default: ''
491     description: If set, the contents of an SSL certificate .key file for encrypting SSL endpoints.
492     type: string
493     hidden: true
494   SSLCACertificate:
495     default: ''
496     description: If set, the contents of an SSL certificate authority file.
497     type: string
498   SwiftHashSuffix:
499     default: unset
500     description: A random string to be used as a salt when hashing to determine mappings in the ring.
501     type: string
502     hidden: true
503   SwiftPassword:
504     default: unset
505     description: The password for the swift service account, used by the swift proxy services.
506     type: string
507     hidden: true
508   SwiftMountCheck:
509     default: 'false'
510     description: Value of mount_check in Swift account/container/object -server.conf
511     type: boolean
512   SwiftMinPartHours:
513     type: number
514     default: 1
515     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
516   SwiftPartPower:
517     default: 10
518     description: Partition Power to use when building Swift rings
519     type: number
520   SwiftReplicas:
521     type: number
522     default: 3
523     description: How many replicas to use in the swift rings.
524
525 # Compute-specific params
526   CeilometerComputeAgent:
527     description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly
528     type: string
529     default: ''
530     constraints:
531     - allowed_values: ['', Present]
532   ComputeCount:
533     type: number
534     default: 1
535   HypervisorNeutronPhysicalBridge:
536     default: 'br-ex'
537     description: >
538       An OVS bridge to create on each hypervisor. This defaults to br-ex the
539       same as the control plane nodes, as we have a uniform configuration of
540       the openvswitch agent. Typically should not need to be changed.
541     type: string
542   HypervisorNeutronPublicInterface:
543     default: nic1
544     description: What interface to add to the HypervisorNeutronPhysicalBridge.
545     type: string
546   NeutronNetworkVLANRanges:
547     default: 'datacentre'
548     description: >
549       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
550       Neutron documentation for permitted values. Defaults to permitting any
551       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
552     type: comma_delimited_list
553   NovaComputeDriver:
554     type: string
555     default: libvirt.LibvirtDriver
556   NovaComputeExtraConfig:
557     default: {}
558     description: |
559       NovaCompute specific configuration to inject into the cluster. Same
560       structure as ExtraConfig.
561     type: json
562   NovaComputeLibvirtType:
563     default: ''
564     type: string
565   NovaEnableRbdBackend:
566     default: false
567     description: Whether to enable or not the Rbd backend for Nova
568     type: boolean
569   NovaImage:
570     type: string
571     default: overcloud-compute
572     constraints:
573       - custom_constraint: glance.image
574   OvercloudComputeFlavor:
575     description: Use this flavor
576     type: string
577     constraints:
578       - custom_constraint: nova.flavor
579   ServiceNetMap:
580     default:
581       NeutronTenantNetwork: tenant
582       CeilometerApiNetwork: internal_api
583       MongoDbNetwork: internal_api
584       CinderApiNetwork: internal_api
585       CinderIscsiNetwork: storage
586       GlanceApiNetwork: storage
587       GlanceRegistryNetwork: internal_api
588       KeystoneAdminApiNetwork: ctlplane # allows undercloud to config endpoints
589       KeystonePublicApiNetwork: internal_api
590       NeutronApiNetwork: internal_api
591       HeatApiNetwork: internal_api
592       NovaApiNetwork: internal_api
593       NovaMetadataNetwork: internal_api
594       NovaVncProxyNetwork: internal_api
595       SwiftMgmtNetwork: storage_mgmt
596       SwiftProxyNetwork: storage
597       HorizonNetwork: internal_api
598       MemcachedNetwork: internal_api
599       RabbitMqNetwork: internal_api
600       RedisNetwork: internal_api
601       MysqlNetwork: internal_api
602       CephClusterNetwork: storage_mgmt
603       CephPublicNetwork: storage
604       ControllerHostnameResolveNetwork: internal_api
605       ComputeHostnameResolveNetwork: internal_api
606       BlockStorageHostnameResolveNetwork: internal_api
607       ObjectStorageHostnameResolveNetwork: internal_api
608       CephStorageHostnameResolveNetwork: storage
609     description: Mapping of service_name -> network name. Typically set
610                  via parameter_defaults in the resource registry.
611     type: json
612
613 # Block storage specific parameters
614   BlockStorageCount:
615     type: number
616     default: 0
617   BlockStorageImage:
618     default: overcloud-cinder-volume
619     type: string
620   OvercloudBlockStorageFlavor:
621     description: Flavor for block storage nodes to request when deploying.
622     type: string
623     constraints:
624       - custom_constraint: nova.flavor
625   BlockStorageExtraConfig:
626     default: {}
627     description: |
628       BlockStorage specific configuration to inject into the cluster. Same
629       structure as ExtraConfig.
630     type: json
631
632 # Object storage specific parameters
633   ObjectStorageCount:
634     type: number
635     default: 0
636   OvercloudSwiftStorageFlavor:
637     description: Flavor for Swift storage nodes to request when deploying.
638     type: string
639     constraints:
640       - custom_constraint: nova.flavor
641   SwiftStorageImage:
642     default: overcloud-swift-storage
643     type: string
644   ObjectStorageExtraConfig:
645     default: {}
646     description: |
647       ObjectStorage specific configuration to inject into the cluster. Same
648       structure as ExtraConfig.
649     type: json
650
651
652 # Ceph storage specific parameters
653   CephStorageCount:
654     type: number
655     default: 0
656   CephStorageImage:
657     default: overcloud-ceph-storage
658     type: string
659   OvercloudCephStorageFlavor:
660     default: baremetal
661     description: Flavor for Ceph storage nodes to request when deploying.
662     type: string
663     constraints:
664       - custom_constraint: nova.flavor
665   CephStorageExtraConfig:
666     default: {}
667     description: |
668       CephStorage specific configuration to inject into the cluster. Same
669       structure as ExtraConfig.
670     type: json
671
672   # Hostname format for each role
673   # Note %index% is translated into the index of the node, e.g 0/1/2 etc
674   # and %stackname% is replaced with OS::stack_name in the template below.
675   # If you want to use the heat generated names, pass '' (empty string).
676   ControllerHostnameFormat:
677     type: string
678     description: Format for Controller node hostnames
679     default: '%stackname%-controller-%index%'
680   ComputeHostnameFormat:
681     type: string
682     description: Format for Compute node hostnames
683     default: '%stackname%-novacompute-%index%'
684   BlockStorageHostnameFormat:
685     type: string
686     description: Format for BlockStorage node hostnames
687     default: '%stackname%-blockstorage-%index%'
688   ObjectStorageHostnameFormat:
689     type: string
690     description: Format for SwiftStorage node hostnames
691     default: '%stackname%-objectstorage-%index%'
692   CephStorageHostnameFormat:
693     type: string
694     description: Format for CephStorage node hostnames
695     default: '%stackname%-cephstorage-%index%'
696
697   # Identifiers to trigger tasks on nodes
698   UpdateIdentifier:
699     default: ''
700     type: string
701     description: >
702       Setting to a previously unused value during stack-update will trigger
703       package update on all nodes
704
705   # If you want to remove a specific node from a resource group, you can pass
706   # the node name or id as a <Group>RemovalPolicies parameter, for example:
707   # ComputeRemovalPolicies: [{'resource_list': ['0']}]
708   ControllerRemovalPolicies:
709     default: []
710     type: json
711     description: >
712       List of resources to be removed from ControllerResourceGroup when
713       doing an update which requires removal of specific resources.
714   ComputeRemovalPolicies:
715     default: []
716     type: json
717     description: >
718       List of resources to be removed from ComputeResourceGroup when
719       doing an update which requires removal of specific resources.
720   BlockStorageRemovalPolicies:
721     default: []
722     type: json
723     description: >
724       List of resources to be removed from BlockStorageResourceGroup when
725       doing an update which requires removal of specific resources.
726   ObjectStorageRemovalPolicies:
727     default: []
728     type: json
729     description: >
730       List of resources to be removed from ObjectStorageResourceGroup when
731       doing an update which requires removal of specific resources.
732   CephStorageRemovalPolicies:
733     default: []
734     type: json
735     description: >
736       List of resources to be removed from CephStorageResourceGroup when
737       doing an update which requires removal of specific resources.
738
739
740 resources:
741
742   HeatAuthEncryptionKey:
743     type: OS::Heat::RandomString
744
745   PcsdPassword:
746     type: OS::Heat::RandomString
747     properties:
748       length: 16
749
750   HorizonSecret:
751     type: OS::Heat::RandomString
752     properties:
753       length: 10
754
755   Controller:
756     type: OS::Heat::ResourceGroup
757     depends_on: Networks
758     properties:
759       count: {get_param: ControllerCount}
760       removal_policies: {get_param: ControllerRemovalPolicies}
761       resource_def:
762         type: OS::TripleO::Controller
763         properties:
764           AdminPassword: {get_param: AdminPassword}
765           AdminToken: {get_param: AdminToken}
766           CeilometerBackend: {get_param: CeilometerBackend}
767           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
768           CeilometerPassword: {get_param: CeilometerPassword}
769           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
770           CinderNfsMountOptions: {get_param: CinderNfsMountOptions}
771           CinderNfsServers: {get_param: CinderNfsServers}
772           CinderPassword: {get_param: CinderPassword}
773           CinderISCSIHelper: {get_param: CinderISCSIHelper}
774           CinderEnableNfsBackend: {get_param: CinderEnableNfsBackend}
775           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
776           CinderEnableRbdBackend: {get_param: CinderEnableRbdBackend}
777           CloudName: {get_param: CloudName}
778           ControlVirtualInterface: {get_param: ControlVirtualInterface}
779           ControllerExtraConfig: {get_param: controllerExtraConfig}
780           Debug: {get_param: Debug}
781           EnableFencing: {get_param: EnableFencing}
782           EnableGalera: {get_param: EnableGalera}
783           EnableCephStorage: {get_param: ControllerEnableCephStorage}
784           EnableSwiftStorage: {get_param: ControllerEnableSwiftStorage}
785           ExtraConfig: {get_param: ExtraConfig}
786           FencingConfig: {get_param: FencingConfig}
787           Flavor: {get_param: OvercloudControlFlavor}
788           GlancePort: {get_param: GlancePort}
789           GlanceProtocol: {get_param: GlanceProtocol}
790           GlancePassword: {get_param: GlancePassword}
791           GlanceBackend: {get_param: GlanceBackend}
792           GlanceNotifierStrategy: {get_param: GlanceNotifierStrategy}
793           GlanceLogFile: {get_param: GlanceLogFile}
794           HeatPassword: {get_param: HeatPassword}
795           HeatStackDomainAdminPassword: {get_param: HeatStackDomainAdminPassword}
796           HeatAuthEncryptionKey: {get_resource: HeatAuthEncryptionKey}
797           HorizonAllowedHosts: {get_param: HorizonAllowedHosts}
798           HorizonSecret: {get_resource: HorizonSecret}
799           Image: {get_param: controllerImage}
800           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
801           KeyName: {get_param: KeyName}
802           KeystoneCACertificate: {get_param: KeystoneCACertificate}
803           KeystoneSigningCertificate: {get_param: KeystoneSigningCertificate}
804           KeystoneSigningKey: {get_param: KeystoneSigningKey}
805           KeystoneSSLCertificate: {get_param: KeystoneSSLCertificate}
806           KeystoneSSLCertificateKey: {get_param: KeystoneSSLCertificateKey}
807           KeystoneNotificationDriver: {get_param: KeystoneNotificationDriver}
808           KeystoneNotificationFormat: {get_param: KeystoneNotificationFormat}
809           MysqlClusterUniquePart: {get_attr: [MysqlClusterUniquePart, value]}
810           MysqlInnodbBufferPoolSize: {get_param: MysqlInnodbBufferPoolSize}
811           MysqlMaxConnections: {get_param: MysqlMaxConnections}
812           MysqlRootPassword: {get_attr: [MysqlRootPassword, value]}
813           NeutronPublicInterfaceIP: {get_param: NeutronPublicInterfaceIP}
814           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
815           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
816           NeutronExternalNetworkBridge: {get_param: NeutronExternalNetworkBridge}
817           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
818           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
819           NeutronPublicInterface: {get_param: NeutronPublicInterface}
820           NeutronPublicInterfaceDefaultRoute: {get_param: NeutronPublicInterfaceDefaultRoute}
821           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
822           NeutronPassword: {get_param: NeutronPassword}
823           NeutronDnsmasqOptions: {get_param: NeutronDnsmasqOptions}
824           NeutronDVR: {get_param: NeutronDVR}
825           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
826           NeutronAgentMode: {get_param: NeutronAgentMode}
827           NeutronCorePlugin: {get_param: NeutronCorePlugin}
828           NeutronServicePlugins: {get_param: NeutronServicePlugins}
829           NeutronTypeDrivers: {get_param: NeutronTypeDrivers}
830           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
831           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
832           NeutronL3HA: {get_param: NeutronL3HA}
833           NeutronDhcpAgentsPerNetwork: {get_param: NeutronDhcpAgentsPerNetwork}
834           NeutronNetworkType: {get_param: NeutronNetworkType}
835           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
836           NovaPassword: {get_param: NovaPassword}
837           NtpServer: {get_param: NtpServer}
838           MongoDbNoJournal: {get_param: MongoDbNoJournal}
839           PcsdPassword: {get_resource: PcsdPassword}
840           PublicVirtualInterface: {get_param: PublicVirtualInterface}
841           RabbitPassword: {get_param: RabbitPassword}
842           RabbitUserName: {get_param: RabbitUserName}
843           RabbitCookie: {get_attr: [RabbitCookie, value]}
844           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
845           RabbitClientPort: {get_param: RabbitClientPort}
846           RabbitFDLimit: {get_param: RabbitFDLimit}
847           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
848           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
849           RedisVirtualIP: {get_attr: [RedisVirtualIP, ip_address]}
850           SSLCertificate: {get_param: SSLCertificate}
851           SSLKey: {get_param: SSLKey}
852           SSLCACertificate: {get_param: SSLCACertificate}
853           SwiftHashSuffix: {get_param: SwiftHashSuffix}
854           SwiftMountCheck: {get_param: SwiftMountCheck}
855           SwiftMinPartHours: {get_param: SwiftMinPartHours}
856           SwiftPartPower: {get_param: SwiftPartPower}
857           SwiftPassword: {get_param: SwiftPassword}
858           SwiftReplicas: { get_param: SwiftReplicas}
859           VirtualIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} # deprecated. Use per service VIP settings instead now.
860           PublicVirtualIP: {get_attr: [PublicVirtualIP, ip_address]}
861           ServiceNetMap: {get_param: ServiceNetMap}
862           CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
863           CinderApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
864           HeatApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
865           GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
866           GlanceRegistryVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
867           NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
868           SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
869           MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
870           KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
871           KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
872           NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
873           UpdateIdentifier: {get_param: UpdateIdentifier}
874           Hostname:
875             str_replace:
876               template: {get_param: ControllerHostnameFormat}
877               params:
878                 '%stackname%': {get_param: 'OS::stack_name'}
879
880   Compute:
881     type: OS::Heat::ResourceGroup
882     depends_on: Networks
883     properties:
884       count: {get_param: ComputeCount}
885       removal_policies: {get_param: ComputeRemovalPolicies}
886       resource_def:
887         type: OS::TripleO::Compute
888         properties:
889           AdminPassword: {get_param: AdminPassword}
890           CeilometerComputeAgent: {get_param: CeilometerComputeAgent}
891           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
892           CeilometerPassword: {get_param: CeilometerPassword}
893           CinderEnableNfsBackend: {get_param: CinderEnableNfsBackend}
894           Debug: {get_param: Debug}
895           ExtraConfig: {get_param: ExtraConfig}
896           Flavor: {get_param: OvercloudComputeFlavor}
897           GlanceHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
898           GlancePort: {get_param: GlancePort}
899           GlanceProtocol: {get_param: GlanceProtocol}
900           Image: {get_param: NovaImage}
901           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
902           KeyName: {get_param: KeyName}
903           KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
904           KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
905           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
906           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
907           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
908           NeutronHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
909           NeutronNetworkType: {get_param: NeutronNetworkType}
910           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
911           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
912           NeutronPassword: {get_param: NeutronPassword}
913           NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
914           NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
915           NeutronDVR: {get_param: NeutronDVR}
916           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
917           NeutronAgentMode: {get_param: NeutronComputeAgentMode}
918           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
919           NeutronCorePlugin: {get_param: NeutronCorePlugin}
920           NeutronServicePlugins: {get_param: NeutronServicePlugins}
921           NeutronTypeDrivers: {get_param: NeutronTypeDrivers}
922           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
923           # L3 HA and Failover is not relevant for Computes, should be removed
924           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
925           NeutronL3HA: {get_param: NeutronL3HA}
926           NovaApiHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
927           NovaComputeDriver: {get_param: NovaComputeDriver}
928           NovaComputeExtraConfig: {get_param: NovaComputeExtraConfig}
929           NovaComputeLibvirtType: {get_param: NovaComputeLibvirtType}
930           NovaEnableRbdBackend: {get_param: NovaEnableRbdBackend}
931           NovaPublicIP: {get_attr: [PublicVirtualIP, ip_address]}
932           NovaPassword: {get_param: NovaPassword}
933           NtpServer: {get_param: NtpServer}
934           RabbitHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
935           RabbitPassword: {get_param: RabbitPassword}
936           RabbitUserName: {get_param: RabbitUserName}
937           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
938           RabbitClientPort: {get_param: RabbitClientPort}
939           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
940           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
941           ServiceNetMap: {get_param: ServiceNetMap}
942           UpdateIdentifier: {get_param: UpdateIdentifier}
943           Hostname:
944             str_replace:
945               template: {get_param: ComputeHostnameFormat}
946               params:
947                 '%stackname%': {get_param: 'OS::stack_name'}
948
949   BlockStorage:
950     type: OS::Heat::ResourceGroup
951     depends_on: Networks
952     properties:
953       count: {get_param: BlockStorageCount}
954       removal_policies: {get_param: BlockStorageRemovalPolicies}
955       resource_def:
956         type: OS::TripleO::BlockStorage
957         properties:
958           Debug: {get_param: Debug}
959           Image: {get_param: BlockStorageImage}
960           CinderISCSIHelper: {get_param: CinderISCSIHelper}
961           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
962           # Purpose of the dedicated BlockStorage nodes should be to use their local LVM
963           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
964           CinderPassword: {get_param: CinderPassword}
965           KeyName: {get_param: KeyName}
966           Flavor: {get_param: OvercloudBlockStorageFlavor}
967           VirtualIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
968           GlancePort: {get_param: GlancePort}
969           GlanceProtocol: {get_param: GlanceProtocol}
970           GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
971           RabbitPassword: {get_param: RabbitPassword}
972           RabbitUserName: {get_param: RabbitUserName}
973           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
974           RabbitClientPort: {get_param: RabbitClientPort}
975           NtpServer: {get_param: NtpServer}
976           UpdateIdentifier: {get_param: UpdateIdentifier}
977           Hostname:
978             str_replace:
979               template: {get_param: BlockStorageHostnameFormat}
980               params:
981                 '%stackname%': {get_param: 'OS::stack_name'}
982           ServiceNetMap: {get_param: ServiceNetMap}
983           MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
984           ExtraConfig: {get_param: ExtraConfig}
985           BlockStorageExtraConfig: {get_param: BlockStorageExtraConfig}
986
987   ObjectStorage:
988     type: OS::Heat::ResourceGroup
989     depends_on: Networks
990     properties:
991       count: {get_param: ObjectStorageCount}
992       removal_policies: {get_param: ObjectStorageRemovalPolicies}
993       resource_def:
994         type: OS::TripleO::ObjectStorage
995         properties:
996           KeyName: {get_param: KeyName}
997           Flavor: {get_param: OvercloudSwiftStorageFlavor}
998           HashSuffix: {get_param: SwiftHashSuffix}
999           MountCheck: {get_param: SwiftMountCheck}
1000           MinPartHours: {get_param: SwiftMinPartHours}
1001           PartPower: {get_param: SwiftPartPower}
1002           Image: {get_param: SwiftStorageImage}
1003           Replicas: { get_param: SwiftReplicas}
1004           NtpServer: {get_param: NtpServer}
1005           UpdateIdentifier: {get_param: UpdateIdentifier}
1006           ServiceNetMap: {get_param: ServiceNetMap}
1007           Hostname:
1008             str_replace:
1009               template: {get_param: ObjectStorageHostnameFormat}
1010               params:
1011                 '%stackname%': {get_param: 'OS::stack_name'}
1012           ExtraConfig: {get_param: ExtraConfig}
1013           ObjectStorageExtraConfig: {get_param: ObjectStorageExtraConfig}
1014
1015   CephStorage:
1016     type: OS::Heat::ResourceGroup
1017     depends_on: Networks
1018     properties:
1019       count: {get_param: CephStorageCount}
1020       removal_policies: {get_param: CephStorageRemovalPolicies}
1021       resource_def:
1022         type: OS::TripleO::CephStorage
1023         properties:
1024           Image: {get_param: CephStorageImage}
1025           KeyName: {get_param: KeyName}
1026           Flavor: {get_param: OvercloudCephStorageFlavor}
1027           NtpServer: {get_param: NtpServer}
1028           ServiceNetMap: {get_param: ServiceNetMap}
1029           UpdateIdentifier: {get_param: UpdateIdentifier}
1030           Hostname:
1031             str_replace:
1032               template: {get_param: CephStorageHostnameFormat}
1033               params:
1034                 '%stackname%': {get_param: 'OS::stack_name'}
1035           ExtraConfig: {get_param: ExtraConfig}
1036           CephStorageExtraConfig: {get_param: CephStorageExtraConfig}
1037
1038   ControllerIpListMap:
1039     type: OS::TripleO::Network::Ports::NetIpListMap
1040     properties:
1041       ControlPlaneIpList: {get_attr: [Controller, ip_address]}
1042       ExternalIpList: {get_attr: [Controller, external_ip_address]}
1043       InternalApiIpList: {get_attr: [Controller, internal_api_ip_address]}
1044       StorageIpList: {get_attr: [Controller, storage_ip_address]}
1045       StorageMgmtIpList: {get_attr: [Controller, storage_mgmt_ip_address]}
1046       TenantIpList: {get_attr: [Controller, tenant_ip_address]}
1047
1048   allNodesConfig:
1049     type: OS::TripleO::AllNodes::SoftwareConfig
1050     properties:
1051       compute_hosts: {get_attr: [Compute, hosts_entry]}
1052       controller_hosts: {get_attr: [Controller, hosts_entry]}
1053       controller_ips: {get_attr: [Controller, ip_address]}
1054       block_storage_hosts: {get_attr: [BlockStorage, hosts_entry]}
1055       object_storage_hosts: {get_attr: [ObjectStorage, hosts_entry]}
1056       ceph_storage_hosts: {get_attr: [CephStorage, hosts_entry]}
1057       controller_names: {get_attr: [Controller, hostname]}
1058       rabbit_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1059       mongo_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
1060       redis_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
1061       memcache_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
1062       mysql_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1063       horizon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1064       heat_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1065       swift_proxy_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1066       ceilometer_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1067       nova_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1068       nova_metadata_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1069       glance_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1070       glance_registry_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1071       cinder_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1072       neutron_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1073       keystone_public_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1074       keystone_admin_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1075
1076   MysqlRootPassword:
1077     type: OS::Heat::RandomString
1078     properties:
1079       length: 10
1080
1081   MysqlClusterUniquePart:
1082     type: OS::Heat::RandomString
1083     properties:
1084       length: 10
1085
1086   RabbitCookie:
1087     type: OS::Heat::RandomString
1088     properties:
1089       length: 20
1090       salt: {get_param: RabbitCookieSalt}
1091
1092   # creates the network architecture
1093   Networks:
1094     type: OS::TripleO::Network
1095
1096   ControlVirtualIP:
1097     type: OS::Neutron::Port
1098     depends_on: Networks
1099     properties:
1100       name: control_virtual_ip
1101       network_id: {get_param: NeutronControlPlaneID}
1102       fixed_ips: {get_param: ControlFixedIPs}
1103       replacement_policy: AUTO
1104
1105   RedisVirtualIP:
1106     depends_on: Networks
1107     type: OS::TripleO::Controller::Ports::RedisVipPort
1108     properties:
1109       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1110       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
1111       PortName: redis_virtual_ip
1112       NetworkName: {get_param: [ServiceNetMap, RedisNetwork]}
1113
1114   # The public VIP is on the External net, falls back to ctlplane
1115   PublicVirtualIP:
1116     depends_on: Networks
1117     type: OS::TripleO::Controller::Ports::ExternalPort
1118     properties:
1119       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1120       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
1121       PortName: public_virtual_ip
1122       FixedIPs: {get_param: PublicVirtualFixedIPs}
1123
1124   InternalApiVirtualIP:
1125     depends_on: Networks
1126     type: OS::TripleO::Controller::Ports::InternalApiPort
1127     properties:
1128       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1129       PortName: internal_api_virtual_ip
1130
1131   StorageVirtualIP:
1132     depends_on: Networks
1133     type: OS::TripleO::Controller::Ports::StoragePort
1134     properties:
1135       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1136       PortName: storage_virtual_ip
1137
1138   StorageMgmtVirtualIP:
1139     depends_on: Networks
1140     type: OS::TripleO::Controller::Ports::StorageMgmtPort
1141     properties:
1142       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1143       PortName: storage_management_virtual_ip
1144
1145   VipMap:
1146     type: OS::TripleO::Network::Ports::NetIpMap
1147     properties:
1148       ControlPlaneIp: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1149       ExternalIp: {get_attr: [PublicVirtualIP, ip_address]}
1150       InternalApiIp: {get_attr: [InternalApiVirtualIP, ip_address]}
1151       StorageIp: {get_attr: [StorageVirtualIP, ip_address]}
1152       StorageMgmtIp: {get_attr: [StorageMgmtVirtualIP, ip_address]}
1153       # No tenant VIP required
1154
1155   VipConfig:
1156     type: OS::TripleO::VipConfig
1157
1158   VipDeployment:
1159     type: OS::Heat::StructuredDeployments
1160     properties:
1161       config: {get_resource: VipConfig}
1162       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1163       input_values:
1164         # service VIP mappings
1165         keystone_admin_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1166         keystone_public_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1167         neutron_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1168         cinder_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1169         glance_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1170         glance_registry_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1171         swift_proxy_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1172         nova_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1173         nova_metadata_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1174         ceilometer_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1175         heat_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1176         horizon_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1177         redis_vip: {get_attr: [RedisVirtualIP, ip_address]}
1178         mysql_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1179         rabbit_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1180         # direct configuration of Virtual IPs for each network
1181         control_virtual_ip: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1182         public_virtual_ip: {get_attr: [PublicVirtualIP, ip_address]}
1183         internal_api_virtual_ip: {get_attr: [InternalApiVirtualIP, ip_address]}
1184         storage_virtual_ip: {get_attr: [StorageVirtualIP, ip_address]}
1185         storage_mgmt_virtual_ip: {get_attr: [StorageMgmtVirtualIP, ip_address]}
1186
1187   ControllerBootstrapNodeConfig:
1188     type: OS::TripleO::BootstrapNode::SoftwareConfig
1189     properties:
1190       bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
1191       bootstrap_nodeid_ip: {get_attr: [Controller, resource.0.ip_address]}
1192
1193   ControllerBootstrapNodeDeployment:
1194     type: OS::Heat::StructuredDeployments
1195     properties:
1196       config: {get_attr: [ControllerBootstrapNodeConfig, config_id]}
1197       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1198
1199   ControllerSwiftDeployment:
1200     type: OS::Heat::StructuredDeployments
1201     properties:
1202       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
1203       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1204
1205   ObjectStorageSwiftDeployment:
1206     type: OS::Heat::StructuredDeployments
1207     properties:
1208       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
1209       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1210
1211   SwiftDevicesAndProxyConfig:
1212     type: OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig
1213     properties:
1214       controller_swift_devices: {get_attr: [Controller, swift_device]}
1215       object_store_swift_devices: {get_attr: [ObjectStorage, swift_device]}
1216       controller_swift_proxy_memcaches: {get_attr: [Controller, swift_proxy_memcache]}
1217
1218   ComputeCephDeployment:
1219     type: OS::Heat::StructuredDeployments
1220     properties:
1221       config: {get_attr: [CephClusterConfig, config_id]}
1222       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1223
1224   ControllerCephDeployment:
1225     type: OS::Heat::StructuredDeployments
1226     properties:
1227       config: {get_attr: [CephClusterConfig, config_id]}
1228       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1229
1230   CephStorageCephDeployment:
1231     type: OS::Heat::StructuredDeployments
1232     properties:
1233       config: {get_attr: [CephClusterConfig, config_id]}
1234       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1235
1236   CephClusterConfig:
1237     type: OS::TripleO::CephClusterConfig::SoftwareConfig
1238     properties:
1239       ceph_storage_count: {get_param: CephStorageCount}
1240       ceph_fsid: {get_param: CephClusterFSID}
1241       ceph_mon_key: {get_param: CephMonKey}
1242       ceph_admin_key: {get_param: CephAdminKey}
1243       ceph_client_key: {get_param: CephClientKey}
1244       ceph_external_mon_ips: {get_param: CephExternalMonHost}
1245       ceph_mon_names: {get_attr: [Controller, hostname]}
1246       ceph_mon_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
1247
1248   ControllerClusterConfig:
1249     type: OS::Heat::StructuredConfig
1250     properties:
1251       group: os-apply-config
1252       config:
1253         corosync:
1254           nodes: {get_attr: [Controller, corosync_node]}
1255         horizon:
1256           caches:
1257             memcached:
1258               nodes: {get_attr: [Controller, hostname]}
1259         mysql:
1260           nodes: {get_attr: [Controller, corosync_node]}
1261         haproxy:
1262           nodes: {get_attr: [Controller, corosync_node]}
1263
1264   ControllerClusterDeployment:
1265     type: OS::Heat::StructuredDeployments
1266     properties:
1267       config: {get_resource: ControllerClusterConfig}
1268       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1269
1270   ControllerAllNodesDeployment:
1271     type: OS::Heat::StructuredDeployments
1272     properties:
1273       config: {get_attr: [allNodesConfig, config_id]}
1274       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1275
1276   ComputeAllNodesDeployment:
1277     type: OS::Heat::StructuredDeployments
1278     properties:
1279       config: {get_attr: [allNodesConfig, config_id]}
1280       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1281
1282   BlockStorageAllNodesDeployment:
1283     type: OS::Heat::StructuredDeployments
1284     properties:
1285       config: {get_attr: [allNodesConfig, config_id]}
1286       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1287
1288   ObjectStorageAllNodesDeployment:
1289     type: OS::Heat::StructuredDeployments
1290     properties:
1291       config: {get_attr: [allNodesConfig, config_id]}
1292       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1293
1294   CephStorageAllNodesDeployment:
1295     type: OS::Heat::StructuredDeployments
1296     properties:
1297       config: {get_attr: [allNodesConfig, config_id]}
1298       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1299
1300   # All Nodes Validations
1301   AllNodesValidationConfig:
1302     type: OS::TripleO::AllNodes::Validation
1303     properties:
1304       PingTestIps:
1305         list_join:
1306         - ' '
1307         - - {get_attr: [Controller, resource.0.external_ip_address]}
1308           - {get_attr: [Controller, resource.0.internal_api_ip_address]}
1309           - {get_attr: [Controller, resource.0.storage_ip_address]}
1310           - {get_attr: [Controller, resource.0.storage_mgmt_ip_address]}
1311           - {get_attr: [Controller, resource.0.tenant_ip_address]}
1312
1313   ControllerAllNodesValidationDeployment:
1314     type: OS::Heat::StructuredDeployments
1315     depends_on: ControllerAllNodesDeployment
1316     properties:
1317       config: {get_resource: AllNodesValidationConfig}
1318       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1319
1320   ComputeAllNodesValidationDeployment:
1321     type: OS::Heat::StructuredDeployments
1322     depends_on: ComputeAllNodesDeployment
1323     properties:
1324       config: {get_resource: AllNodesValidationConfig}
1325       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1326
1327   BlockStorageAllNodesValidationDeployment:
1328     type: OS::Heat::StructuredDeployments
1329     depends_on: BlockStorageAllNodesDeployment
1330     properties:
1331       config: {get_resource: AllNodesValidationConfig}
1332       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1333
1334   ObjectStorageAllNodesValidationDeployment:
1335     type: OS::Heat::StructuredDeployments
1336     depends_on: ObjectStorageAllNodesDeployment
1337     properties:
1338       config: {get_resource: AllNodesValidationConfig}
1339       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1340
1341   CephStorageAllNodesValidationDeployment:
1342     type: OS::Heat::StructuredDeployments
1343     depends_on: CephStorageAllNodesDeployment
1344     properties:
1345       config: {get_resource: AllNodesValidationConfig}
1346       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1347
1348   # Optional ExtraConfig for all nodes - all roles are passed in here, but
1349   # the nested template may configure each role differently (or not at all)
1350   AllNodesExtraConfig:
1351     type: OS::TripleO::AllNodesExtraConfig
1352     properties:
1353       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
1354       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
1355       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1356       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1357       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1358
1359   # Nested stack deployment runs after all other controller deployments
1360   ControllerNodesPostDeployment:
1361     type: OS::TripleO::ControllerPostDeployment
1362     depends_on: [ControllerBootstrapNodeDeployment, ControllerAllNodesDeployment, ControllerSwiftDeployment, ControllerCephDeployment]
1363     properties:
1364       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1365       NodeConfigIdentifiers:
1366         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1367         controller_config: {get_attr: [Controller, attributes, config_identifier]}
1368
1369   ComputeNodesPostDeployment:
1370     type: OS::TripleO::ComputePostDeployment
1371     depends_on: [ComputeAllNodesDeployment, ComputeCephDeployment]
1372     properties:
1373       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1374       NodeConfigIdentifiers:
1375         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1376         compute_config: {get_attr: [Compute, attributes, config_identifier]}
1377
1378   ObjectStorageNodesPostDeployment:
1379     type: OS::TripleO::ObjectStoragePostDeployment
1380     depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment]
1381     properties:
1382       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1383       NodeConfigIdentifiers:
1384         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1385         objectstorage_config: {get_attr: [ObjectStorage, attributes, config_identifier]}
1386
1387   BlockStorageNodesPostDeployment:
1388     type: OS::TripleO::BlockStoragePostDeployment
1389     depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment]
1390     properties:
1391       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1392       NodeConfigIdentifiers:
1393         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1394         blockstorage_config: {get_attr: [BlockStorage, attributes, config_identifier]}
1395
1396   CephStorageNodesPostDeployment:
1397     type: OS::TripleO::CephStoragePostDeployment
1398     depends_on: [ControllerNodesPostDeployment, CephStorageCephDeployment, CephStorageAllNodesDeployment]
1399     properties:
1400       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1401       NodeConfigIdentifiers:
1402         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1403         cephstorage_config: {get_attr: [CephStorage, attributes, config_identifier]}
1404
1405 outputs:
1406   KeystoneURL:
1407     description: URL for the Overcloud Keystone service
1408     value:
1409       list_join:
1410       - ''
1411       - - http://
1412         - {get_attr: [PublicVirtualIP, ip_address]}
1413         - :5000/v2.0/
1414   KeystoneAdminVip:
1415     description: Keystone Admin VIP endpoint
1416     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1417   PublicVip:
1418     description: Controller VIP for public API endpoints
1419     value: {get_attr: [PublicVirtualIP, ip_address]}
1420   CeilometerInternalVip:
1421     description: VIP for Ceilometer API internal endpoint
1422     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1423   CinderInternalVip:
1424     description: VIP for Cinder API internal endpoint
1425     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1426   GlanceInternalVip:
1427     description: VIP for Glance API internal endpoint
1428     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1429   HeatInternalVip:
1430     description: VIP for Heat API internal endpoint
1431     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1432   KeystoneInternalVip:
1433     description: VIP for Keystone API internal endpoint
1434     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1435   NeutronInternalVip:
1436     description: VIP for Neutron API internal endpoint
1437     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1438   NovaInternalVip:
1439     description: VIP for Nova API internal endpoint
1440     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1441   SwiftInternalVip:
1442     description: VIP for Swift Proxy internal endpoint
1443     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}