Merge "neutron: remove tenant MTU configuration options"
[apex-tripleo-heat-templates.git] / overcloud.yaml
1 heat_template_version: 2016-04-08
2
3 description: >
4   Deploy an OpenStack environment, consisting of several node types (roles),
5   Controller, Compute, BlockStorage, SwiftStorage and CephStorage.  The Storage
6   roles enable independent scaling of the storage components, but the minimal
7   deployment is one Controller and one Compute node.
8
9
10 # TODO(shadower): we should probably use the parameter groups to put
11 # some order in here.
12 parameters:
13
14   # Common parameters (not specific to a role)
15   AdminPassword:
16     description: The password for the keystone admin account, used for monitoring, querying neutron etc.
17     type: string
18     hidden: true
19   AodhPassword:
20     description: The password for the aodh services.
21     type: string
22     hidden: true
23   CeilometerBackend:
24     default: 'mongodb'
25     description: The ceilometer backend type.
26     type: string
27   CeilometerMeteringSecret:
28     description: Secret shared by the ceilometer services.
29     type: string
30     hidden: true
31   CeilometerPassword:
32     description: The password for the ceilometer service account.
33     type: string
34     hidden: true
35   CeilometerMeterDispatcher:
36     default: 'database'
37     description: Dispatcher to process meter data
38     type: string
39     constraints:
40     - allowed_values: ['gnocchi', 'database']
41   CinderEnableNfsBackend:
42     default: false
43     description: Whether to enable or not the NFS backend for Cinder
44     type: boolean
45   CinderEnableRbdBackend:
46     default: false
47     description: Whether to enable or not the Rbd backend for Cinder
48     type: boolean
49   CloudName:
50     default: overcloud
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   CorosyncIPv6:
58     default: false
59     description: Enable IPv6 in Corosync
60     type: boolean
61   Debug:
62     default: ''
63     description: Set to True to enable debugging on all services.
64     type: string
65   HAProxySyslogAddress:
66     default: /dev/log
67     description: Syslog address where HAproxy will send its log
68     type: string
69   HorizonAllowedHosts:
70     default: '*'
71     description: A list of IP/Hostname allowed to connect to horizon
72     type: comma_delimited_list
73   ImageUpdatePolicy:
74     default: 'REBUILD_PRESERVE_EPHEMERAL'
75     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
76     type: string
77   InternalApiVirtualFixedIPs:
78     default: []
79     description: >
80         Control the IP allocation for the InternalApiVirtualInterface port. E.g.
81         [{'ip_address':'1.2.3.4'}]
82     type: json
83   KeyName:
84     default: default
85     description: Name of an existing Nova key pair to enable SSH access to the instances
86     type: string
87     constraints:
88       - custom_constraint: nova.keypair
89   MemcachedIPv6:
90     default: false
91     description: Enable IPv6 features in Memcached.
92     type: boolean
93   NeutronBridgeMappings:
94     description: >
95       The OVS logical->physical bridge mappings to use. See the Neutron
96       documentation for details. Defaults to mapping br-ex - the external
97       bridge on hosts - to a physical name 'datacentre' which can be used
98       to create provider networks (and we use this for the default floating
99       network) - if changing this either use different post-install network
100       scripts or be sure to keep 'datacentre' as a mapping network name.
101     type: comma_delimited_list
102     default: "datacentre:br-ex"
103   NeutronControlPlaneID:
104     default: 'ctlplane'
105     type: string
106     description: Neutron ID or name for ctlplane network.
107   NeutronEnableTunnelling:
108     type: string
109     default: "True"
110   NeutronEnableL2Pop:
111     type: string
112     description: >
113         Enable/disable the L2 population feature in the Neutron agents.
114     default: "False"
115   NeutronFlatNetworks:
116     type: comma_delimited_list
117     default: 'datacentre'
118     description: >
119       If set, flat networks to configure in neutron plugins. Defaults to
120       'datacentre' to permit external network creation.
121   NeutronNetworkType:
122     default: 'vxlan'
123     description: The tenant network type for Neutron.
124     type: comma_delimited_list
125   NeutronPassword:
126     description: The password for the neutron service account, used by neutron agents.
127     type: string
128     hidden: true
129   NeutronPublicInterface:
130     default: nic1
131     description: What interface to bridge onto br-ex for network nodes.
132     type: string
133   NeutronMetadataProxySharedSecret:
134     description: Shared secret to prevent spoofing
135     type: string
136     hidden: true
137   NeutronTunnelTypes:
138     default: 'vxlan'
139     description: |
140         The tunnel types for the Neutron tenant network.
141     type: comma_delimited_list
142     type: comma_delimited_list
143   NeutronCorePlugin:
144     default: 'ml2'
145     description: |
146         The core plugin for Neutron. The value should be the entrypoint to be loaded
147         from neutron.core_plugins namespace.
148     type: string
149   NeutronServicePlugins:
150     default: "router,qos"
151     description: |
152         Comma-separated list of service plugin entrypoints to be loaded from the
153         neutron.service_plugins namespace.
154     type: comma_delimited_list
155   NeutronTypeDrivers:
156     default: "vxlan,vlan,flat,gre"
157     description: |
158         Comma-separated list of network type driver entrypoints to be loaded.
159     type: comma_delimited_list
160   NeutronMechanismDrivers:
161     default: 'openvswitch'
162     description: |
163         The mechanism drivers for the Neutron tenant network.
164     type: comma_delimited_list
165     type: comma_delimited_list
166   NeutronAgentExtensions:
167     default: "qos"
168     description: |
169         Comma-separated list of extensions enabled for the Neutron agents.
170     type: comma_delimited_list
171   NeutronAllowL3AgentFailover:
172     default: 'False'
173     description: Allow automatic l3-agent failover
174     type: string
175   NeutronL3HA:
176     default: 'False'
177     description: Whether to enable l3-agent HA
178     type: string
179   NovaIPv6:
180     default: false
181     description: Enable IPv6 features in Nova
182     type: boolean
183   NovaPassword:
184     description: The password for the nova service account, used by nova-api.
185     type: string
186     hidden: true
187   PublicVirtualFixedIPs:
188     default: []
189     description: >
190         Control the IP allocation for the PublicVirtualInterface port. E.g.
191         [{'ip_address':'1.2.3.4'}]
192     type: json
193   RabbitCookieSalt:
194     type: string
195     default: unset
196     description: Salt for the rabbit cookie, change this to force the randomly generated rabbit cookie to change.
197   RabbitUserName:
198     default: guest
199     description: The username for RabbitMQ
200     type: string
201   RabbitPassword:
202     description: The password for RabbitMQ
203     type: string
204     hidden: true
205   RabbitClientUseSSL:
206     default: false
207     description: >
208         Rabbit client subscriber parameter to specify
209         an SSL connection to the RabbitMQ host.
210     type: string
211   RabbitClientPort:
212     default: 5672
213     description: Set rabbit subscriber port, change this if using SSL
214     type: number
215   RedisPassword:
216     description: The password for Redis
217     type: string
218     hidden: true
219   StorageVirtualFixedIPs:
220     default: []
221     description: >
222         Control the IP allocation for the StorageVirtualInterface port. E.g.
223         [{'ip_address':'1.2.3.4'}]
224     type: json
225   StorageMgmtVirtualFixedIPs:
226     default: []
227     description: >
228         Control the IP allocation for the StorageMgmgVirtualInterface port. E.g.
229         [{'ip_address':'1.2.3.4'}]
230     type: json
231   CloudDomain:
232     default: 'localdomain'
233     type: string
234     description: >
235       The DNS domain used for the hosts. This should match the dhcp_domain
236       configured in the Undercloud neutron. Defaults to localdomain.
237   ServerMetadata:
238     default: {}
239     description: >
240       Extra properties or metadata passed to Nova for the created nodes in
241       the overcloud. It's accessible via the Nova metadata API.
242     type: json
243
244   # Controller-specific params
245   ControllerCount:
246     type: number
247     default: 1
248     constraints:
249       - range: {min: 1}
250   controllerExtraConfig:
251     default: {}
252     description: |
253       Deprecated. Use ControllerExtraConfig via parameter_defaults instead.
254     type: json
255   controllerImage:
256     type: string
257     default: overcloud-full
258     constraints:
259       - custom_constraint: glance.image
260   OvercloudControlFlavor:
261     description: Flavor for control nodes to request when deploying.
262     default: baremetal
263     type: string
264     constraints:
265       - custom_constraint: nova.flavor
266   ControlVirtualInterface:
267     default: 'br-ex'
268     description: Interface where virtual ip will be assigned.
269     type: string
270   EnableFencing:
271     default: false
272     description: Whether to enable fencing in Pacemaker or not.
273     type: boolean
274   EnableGalera:
275     default: true
276     description: Whether to use Galera instead of regular MariaDB.
277     type: boolean
278   ControllerSchedulerHints:
279     type: json
280     description: Optional scheduler hints to pass to nova
281     default: {}
282   ExtraConfig:
283     default: {}
284     description: |
285       Additional configuration to inject into the cluster. The format required
286       may be implementation specific, e.g puppet hieradata.  Any role specific
287       ExtraConfig, e.g controllerExtraConfig takes precedence over ExtraConfig.
288     type: json
289   FencingConfig:
290     default: {}
291     description: |
292       Pacemaker fencing configuration. The JSON should have
293       the following structure:
294         {
295           "devices": [
296             {
297               "agent": "AGENT_NAME",
298               "host_mac": "HOST_MAC_ADDRESS",
299               "params": {"PARAM_NAME": "PARAM_VALUE"}
300             }
301           ]
302         }
303       For instance:
304         {
305           "devices": [
306             {
307               "agent": "fence_xvm",
308               "host_mac": "52:54:00:aa:bb:cc",
309               "params": {
310                 "multicast_address": "225.0.0.12",
311                 "port": "baremetal_0",
312                 "manage_fw": true,
313                 "manage_key_file": true,
314                 "key_file": "/etc/fence_xvm.key",
315                 "key_file_password": "abcdef"
316               }
317             }
318           ]
319         }
320     type: json
321   GnocchiBackend:
322     default: file
323     description: The short name of the Gnocchi backend to use. Should be one
324       of swift, rbd or file
325     type: string
326     constraints:
327     - allowed_values: ['swift', 'file', 'rbd']
328   GnocchiIndexerBackend:
329     default: 'mysql'
330     description: The short name of the Gnocchi indexer backend to use.
331     type: string
332   GnocchiPassword:
333     description: The password for the gnocchi service account.
334     type: string
335     hidden: true
336   InstanceNameTemplate:
337     default: 'instance-%08x'
338     description: Template string to be used to generate instance names
339     type: string
340   ManageFirewall:
341     default: true
342     description: Whether to manage IPtables rules.
343     type: boolean
344   PurgeFirewallRules:
345     default: false
346     description: Whether IPtables rules should be purged before setting up the ones.
347     type: boolean
348   MysqlInnodbBufferPoolSize:
349     description: >
350         Specifies the size of the buffer pool in megabytes. Setting to
351         zero should be interpreted as "no value" and will defer to the
352         lower level default.
353     type: number
354     default: 0
355   MysqlMaxConnections:
356     description: Configures MySQL max_connections config setting
357     type: number
358     default: 4096
359   PublicVirtualInterface:
360     default: 'br-ex'
361     description: >
362         Specifies the interface where the public-facing virtual ip will be assigned.
363         This should be int_public when a VLAN is being used.
364     type: string
365   SwiftHashSuffix:
366     description: A random string to be used as a salt when hashing to determine mappings in the ring.
367     type: string
368     hidden: true
369   SwiftMinPartHours:
370     type: number
371     default: 1
372     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
373   SwiftPartPower:
374     default: 10
375     description: Partition Power to use when building Swift rings
376     type: number
377   SwiftReplicas:
378     type: number
379     default: 3
380     description: How many replicas to use in the swift rings.
381
382 # Compute-specific params
383   CeilometerComputeAgent:
384     description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly
385     type: string
386     default: ''
387     constraints:
388     - allowed_values: ['', Present]
389   ComputeCount:
390     type: number
391     default: 1
392   HypervisorNeutronPhysicalBridge:
393     default: 'br-ex'
394     description: >
395       An OVS bridge to create on each hypervisor. This defaults to br-ex the
396       same as the control plane nodes, as we have a uniform configuration of
397       the openvswitch agent. Typically should not need to be changed.
398     type: string
399   HypervisorNeutronPublicInterface:
400     default: nic1
401     description: What interface to add to the HypervisorNeutronPhysicalBridge.
402     type: string
403   NeutronNetworkVLANRanges:
404     default: 'datacentre:1:1000'
405     description: >
406       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
407       Neutron documentation for permitted values. Defaults to permitting any
408       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
409     type: comma_delimited_list
410   NovaComputeDriver:
411     type: string
412     default: libvirt.LibvirtDriver
413   NovaComputeExtraConfig:
414     default: {}
415     description: |
416       NovaCompute specific configuration to inject into the cluster. Same
417       structure as ExtraConfig.
418     type: json
419   NovaComputeLibvirtType:
420     default: kvm
421     type: string
422   NovaComputeLibvirtVifDriver:
423     default: ''
424     description: Libvirt VIF driver configuration for the network
425     type: string
426   NovaComputeSchedulerHints:
427     type: json
428     description: Optional scheduler hints to pass to nova
429     default: {}
430   NovaEnableRbdBackend:
431     default: false
432     description: Whether to enable or not the Rbd backend for Nova
433     type: boolean
434   NovaImage:
435     type: string
436     default: overcloud-full
437     constraints:
438       - custom_constraint: glance.image
439   NovaOVSBridge:
440     default: 'br-int'
441     description: Name of integration bridge used by Open vSwitch
442     type: string
443   NovaSecurityGroupAPI:
444     default: 'neutron'
445     description: The full class name of the security API class
446     type: string
447   OvercloudComputeFlavor:
448     description: Use this flavor
449     default: baremetal
450     type: string
451     constraints:
452       - custom_constraint: nova.flavor
453   ServiceNetMap:
454     default:
455       NeutronTenantNetwork: tenant
456       CeilometerApiNetwork: internal_api
457       AodhApiNetwork: internal_api
458       GnocchiApiNetwork: internal_api
459       MongoDbNetwork: internal_api
460       CinderApiNetwork: internal_api
461       CinderIscsiNetwork: storage
462       GlanceApiNetwork: storage
463       GlanceRegistryNetwork: internal_api
464       IronicApiNetwork: internal_api
465       KeystoneAdminApiNetwork: ctlplane # allows undercloud to config endpoints
466       KeystonePublicApiNetwork: internal_api
467       NeutronApiNetwork: internal_api
468       HeatApiNetwork: internal_api
469       NovaApiNetwork: internal_api
470       NovaMetadataNetwork: internal_api
471       NovaVncProxyNetwork: internal_api
472       SwiftMgmtNetwork: storage_mgmt
473       SwiftProxyNetwork: storage
474       SaharaApiNetwork: internal_api
475       HorizonNetwork: internal_api
476       MemcachedNetwork: internal_api
477       RabbitMqNetwork: internal_api
478       RedisNetwork: internal_api
479       MysqlNetwork: internal_api
480       CephClusterNetwork: storage_mgmt
481       CephPublicNetwork: storage
482       ControllerHostnameResolveNetwork: internal_api
483       ComputeHostnameResolveNetwork: internal_api
484       BlockStorageHostnameResolveNetwork: internal_api
485       ObjectStorageHostnameResolveNetwork: internal_api
486       CephStorageHostnameResolveNetwork: storage
487     description: Mapping of service_name -> network name. Typically set
488                  via parameter_defaults in the resource registry.
489     type: json
490
491   ControllerServices:
492     default:
493       - OS::TripleO::Services::CephMon
494       - OS::TripleO::Services::CephExternal
495       - OS::TripleO::Services::CinderApi
496       - OS::TripleO::Services::CinderScheduler
497       - OS::TripleO::Services::CinderVolume
498       - OS::TripleO::Services::Kernel
499       - OS::TripleO::Services::Keystone
500       - OS::TripleO::Services::GlanceApi
501       - OS::TripleO::Services::GlanceRegistry
502       - OS::TripleO::Services::HeatApi
503       - OS::TripleO::Services::HeatApiCfn
504       - OS::TripleO::Services::HeatApiCloudwatch
505       - OS::TripleO::Services::HeatEngine
506       - OS::TripleO::Services::NeutronDhcpAgent
507       - OS::TripleO::Services::NeutronL3Agent
508       - OS::TripleO::Services::NeutronMetadataAgent
509       - OS::TripleO::Services::NeutronServer
510       - OS::TripleO::Services::NeutronCorePlugin
511       - OS::TripleO::Services::NeutronOvsAgent
512       - OS::TripleO::Services::RabbitMQ
513       - OS::TripleO::Services::HAproxy
514       - OS::TripleO::Services::Keepalived
515       - OS::TripleO::Services::Memcached
516       - OS::TripleO::Services::Redis
517       - OS::TripleO::Services::NovaConductor
518       - OS::TripleO::Services::MongoDb
519       - OS::TripleO::Services::NovaApi
520       - OS::TripleO::Services::NovaScheduler
521       - OS::TripleO::Services::NovaConsoleauth
522       - OS::TripleO::Services::NovaVncproxy
523       - OS::TripleO::Services::Ntp
524       - OS::TripleO::Services::SwiftProxy
525       - OS::TripleO::Services::SwiftStorage
526       - OS::TripleO::Services::Snmp
527       - OS::TripleO::Services::Timezone
528     description: A list of service resources (configured in the Heat
529                  resource_registry) which represent nested stacks
530                  for each service that should get installed on the Controllers.
531     type: comma_delimited_list
532
533   ComputeServices:
534     default:
535       - OS::TripleO::Services::CephClient
536       - OS::TripleO::Services::CephExternal
537       - OS::TripleO::Services::Timezone
538       - OS::TripleO::Services::Ntp
539       - OS::TripleO::Services::Snmp
540       - OS::TripleO::Services::NovaCompute
541       - OS::TripleO::Services::NovaLibvirt
542       - OS::TripleO::Services::Kernel
543     description: A list of service resources (configured in the Heat
544                  resource_registry) which represent nested stacks
545                  for each service that should get installed on the Compute Nodes.
546     type: comma_delimited_list
547
548 # Block storage specific parameters
549   BlockStorageCount:
550     type: number
551     default: 0
552   BlockStorageImage:
553     default: overcloud-full
554     type: string
555   OvercloudBlockStorageFlavor:
556     description: Flavor for block storage nodes to request when deploying.
557     default: baremetal
558     type: string
559     constraints:
560       - custom_constraint: nova.flavor
561   BlockStorageExtraConfig:
562     default: {}
563     description: |
564       BlockStorage specific configuration to inject into the cluster. Same
565       structure as ExtraConfig.
566     type: json
567   BlockStorageSchedulerHints:
568     type: json
569     description: Optional scheduler hints to pass to nova
570     default: {}
571   BlockStorageServices:
572     default:
573       - OS::TripleO::Services::CinderVolume
574       - OS::TripleO::Services::Kernel
575       - OS::TripleO::Services::Ntp
576       - OS::TripleO::Services::Timezone
577       - OS::TripleO::Services::Snmp
578     description: A list of service resources (configured in the Heat
579                  resource_registry) which represent nested stacks
580                  for each service that should get installed on the BlockStorage nodes.
581     type: comma_delimited_list
582
583 # Object storage specific parameters
584   ObjectStorageCount:
585     type: number
586     default: 0
587   OvercloudSwiftStorageFlavor:
588     description: Flavor for Swift storage nodes to request when deploying.
589     default: baremetal
590     type: string
591     constraints:
592       - custom_constraint: nova.flavor
593   SwiftStorageImage:
594     default: overcloud-full
595     type: string
596   ObjectStorageExtraConfig:
597     default: {}
598     description: |
599       ObjectStorage specific configuration to inject into the cluster. Same
600       structure as ExtraConfig.
601     type: json
602   ObjectStorageSchedulerHints:
603     type: json
604     description: Optional scheduler hints to pass to nova
605     default: {}
606   ObjectStorageServices:
607     default:
608       - OS::TripleO::Services::Kernel
609       - OS::TripleO::Services::Ntp
610       - OS::TripleO::Services::SwiftStorage
611       - OS::TripleO::Services::Snmp
612       - OS::TripleO::Services::Timezone
613     description: A list of service resources (configured in the Heat
614                  resource_registry) which represent nested stacks
615                  for each service that should get installed on the ObjectStorage nodes.
616                  Note this role currently only supports steps 2, 3 and 4 configuration.
617     type: comma_delimited_list
618
619
620 # Ceph storage specific parameters
621   CephStorageCount:
622     type: number
623     default: 0
624   CephStorageImage:
625     default: overcloud-full
626     type: string
627   OvercloudCephStorageFlavor:
628     default: baremetal
629     description: Flavor for Ceph storage nodes to request when deploying.
630     type: string
631     constraints:
632       - custom_constraint: nova.flavor
633   CephStorageExtraConfig:
634     default: {}
635     description: |
636       CephStorage specific configuration to inject into the cluster. Same
637       structure as ExtraConfig.
638     type: json
639   CephStorageSchedulerHints:
640     type: json
641     description: Optional scheduler hints to pass to nova
642     default: {}
643   CephStorageServices:
644     default:
645       - OS::TripleO::Services::CephOSD
646       - OS::TripleO::Services::Kernel
647       - OS::TripleO::Services::Ntp
648       - OS::TripleO::Services::Timezone
649     description: A list of service resources (configured in the Heat
650                  resource_registry) which represent nested stacks
651                  for each service that should get installed on the CephStorage nodes.
652     type: comma_delimited_list
653
654   # Hostname format for each role
655   # Note %index% is translated into the index of the node, e.g 0/1/2 etc
656   # and %stackname% is replaced with OS::stack_name in the template below.
657   # If you want to use the heat generated names, pass '' (empty string).
658   ControllerHostnameFormat:
659     type: string
660     description: Format for Controller node hostnames
661     default: '%stackname%-controller-%index%'
662   ComputeHostnameFormat:
663     type: string
664     description: Format for Compute node hostnames
665     default: '%stackname%-novacompute-%index%'
666   BlockStorageHostnameFormat:
667     type: string
668     description: Format for BlockStorage node hostnames
669     default: '%stackname%-blockstorage-%index%'
670   ObjectStorageHostnameFormat:
671     type: string
672     description: Format for SwiftStorage node hostnames
673     default: '%stackname%-objectstorage-%index%'
674   CephStorageHostnameFormat:
675     type: string
676     description: Format for CephStorage node hostnames
677     default: '%stackname%-cephstorage-%index%'
678
679   # Identifiers to trigger tasks on nodes
680   UpdateIdentifier:
681     default: ''
682     type: string
683     description: >
684       Setting to a previously unused value during stack-update will trigger
685       package update on all nodes
686   DeployIdentifier:
687     default: ''
688     type: string
689     description: >
690       Setting this to a unique value will re-run any deployment tasks which
691       perform configuration on a Heat stack-update.
692
693   # If you want to remove a specific node from a resource group, you can pass
694   # the node name or id as a <Group>RemovalPolicies parameter, for example:
695   # ComputeRemovalPolicies: [{'resource_list': ['0']}]
696   ControllerRemovalPolicies:
697     default: []
698     type: json
699     description: >
700       List of resources to be removed from ControllerResourceGroup when
701       doing an update which requires removal of specific resources.
702   ComputeRemovalPolicies:
703     default: []
704     type: json
705     description: >
706       List of resources to be removed from ComputeResourceGroup when
707       doing an update which requires removal of specific resources.
708   BlockStorageRemovalPolicies:
709     default: []
710     type: json
711     description: >
712       List of resources to be removed from BlockStorageResourceGroup when
713       doing an update which requires removal of specific resources.
714   ObjectStorageRemovalPolicies:
715     default: []
716     type: json
717     description: >
718       List of resources to be removed from ObjectStorageResourceGroup when
719       doing an update which requires removal of specific resources.
720   CephStorageRemovalPolicies:
721     default: []
722     type: json
723     description: >
724       List of resources to be removed from CephStorageResourceGroup when
725       doing an update which requires removal of specific resources.
726
727 parameter_groups:
728 - label: deprecated
729   description: Do not use deprecated params, they will be removed.
730   parameters:
731   - controllerExtraConfig
732
733
734 resources:
735
736   HeatAuthEncryptionKey:
737     type: OS::Heat::RandomString
738
739   PcsdPassword:
740     type: OS::Heat::RandomString
741     properties:
742       length: 16
743
744   HorizonSecret:
745     type: OS::Heat::RandomString
746     properties:
747       length: 10
748
749   EndpointMap:
750     type: OS::TripleO::EndpointMap
751     properties:
752       CloudName: {get_param: CloudName}
753       CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
754       AodhApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
755       CinderApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
756       GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
757       GlanceRegistryVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
758       GnocchiApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
759       HeatApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
760       IronicApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
761       KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
762       KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
763       MysqlVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
764       MysqlNoBracketsVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
765       NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
766       NovaApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
767       SaharaApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
768       SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
769       PublicVirtualIP: {get_attr: [VipMap, net_ip_uri_map, external]}
770
771   ControllerServiceChain:
772     type: OS::TripleO::Services
773     properties:
774       Services: {get_param: ControllerServices}
775       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
776
777   Controller:
778     type: OS::Heat::ResourceGroup
779     depends_on: Networks
780     properties:
781       count: {get_param: ControllerCount}
782       removal_policies: {get_param: ControllerRemovalPolicies}
783       resource_def:
784         type: OS::TripleO::Controller
785         properties:
786           AdminPassword: {get_param: AdminPassword}
787           AodhPassword: {get_param: AodhPassword}
788           CeilometerBackend: {get_param: CeilometerBackend}
789           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
790           CeilometerPassword: {get_param: CeilometerPassword}
791           CeilometerMeterDispatcher: {get_param: CeilometerMeterDispatcher}
792           CloudDomain: {get_param: CloudDomain}
793           ControlVirtualInterface: {get_param: ControlVirtualInterface}
794           controllerExtraConfig: {get_param: controllerExtraConfig}
795           CorosyncIPv6: {get_param: CorosyncIPv6}
796           Debug: {get_param: Debug}
797           EnableFencing: {get_param: EnableFencing}
798           ManageFirewall: {get_param: ManageFirewall}
799           PurgeFirewallRules: {get_param: PurgeFirewallRules}
800           EnableGalera: {get_param: EnableGalera}
801           ExtraConfig: {get_param: ExtraConfig}
802           FencingConfig: {get_param: FencingConfig}
803           Flavor: {get_param: OvercloudControlFlavor}
804           GnocchiPassword: {get_param: GnocchiPassword}
805           GnocchiBackend: {get_param: GnocchiBackend}
806           GnocchiIndexerBackend: {get_param: GnocchiIndexerBackend}
807           HAProxySyslogAddress: {get_param: HAProxySyslogAddress}
808           HeatAuthEncryptionKey: {get_resource: HeatAuthEncryptionKey}
809           HorizonAllowedHosts: {get_param: HorizonAllowedHosts}
810           HorizonSecret: {get_resource: HorizonSecret}
811           Image: {get_param: controllerImage}
812           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
813           InstanceNameTemplate: {get_param: InstanceNameTemplate}
814           KeyName: {get_param: KeyName}
815           MemcachedIPv6: {get_param: MemcachedIPv6}
816           MysqlClusterUniquePart: {get_attr: [MysqlClusterUniquePart, value]}
817           MysqlInnodbBufferPoolSize: {get_param: MysqlInnodbBufferPoolSize}
818           MysqlMaxConnections: {get_param: MysqlMaxConnections}
819           MysqlRootPassword: {get_attr: [MysqlRootPassword, value]}
820           NeutronPublicInterface: {get_param: NeutronPublicInterface}
821           NeutronPassword: {get_param: NeutronPassword}
822           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
823           NovaIPv6: {get_param: NovaIPv6}
824           NovaPassword: {get_param: NovaPassword}
825           PcsdPassword: {get_resource: PcsdPassword}
826           PublicVirtualInterface: {get_param: PublicVirtualInterface}
827           RabbitPassword: {get_param: RabbitPassword}
828           RabbitUserName: {get_param: RabbitUserName}
829           RabbitCookie: {get_attr: [RabbitCookie, value]}
830           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
831           RabbitClientPort: {get_param: RabbitClientPort}
832           RedisPassword: {get_param: RedisPassword}
833           RedisVirtualIP: {get_attr: [RedisVirtualIP, ip_address]}
834           RedisVirtualIPUri: {get_attr: [RedisVirtualIP, ip_address_uri]}
835           SwiftHashSuffix: {get_param: SwiftHashSuffix}
836           SwiftMinPartHours: {get_param: SwiftMinPartHours}
837           SwiftPartPower: {get_param: SwiftPartPower}
838           SwiftReplicas: { get_param: SwiftReplicas}
839           ServiceNetMap: {get_param: ServiceNetMap}
840           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
841           MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
842           UpdateIdentifier: {get_param: UpdateIdentifier}
843           Hostname:
844             str_replace:
845               template: {get_param: ControllerHostnameFormat}
846               params:
847                 '%stackname%': {get_param: 'OS::stack_name'}
848           NodeIndex: '%index%'
849           ServerMetadata: {get_param: ServerMetadata}
850           SchedulerHints: {get_param: ControllerSchedulerHints}
851           ServiceConfigSettings: {get_attr: [ControllerServiceChain, role_data, config_settings]}
852
853   ComputeServiceChain:
854
855     type: OS::TripleO::Services
856     properties:
857       Services: {get_param: ComputeServices}
858       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
859
860   Compute:
861     type: OS::Heat::ResourceGroup
862     depends_on: Networks
863     properties:
864       count: {get_param: ComputeCount}
865       removal_policies: {get_param: ComputeRemovalPolicies}
866       resource_def:
867         type: OS::TripleO::Compute
868         properties:
869           AdminPassword: {get_param: AdminPassword}
870           CeilometerComputeAgent: {get_param: CeilometerComputeAgent}
871           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
872           CeilometerPassword: {get_param: CeilometerPassword}
873           CinderEnableNfsBackend: {get_param: CinderEnableNfsBackend}
874           CinderEnableRbdBackend: {get_param: CinderEnableRbdBackend}
875           Debug: {get_param: Debug}
876           ExtraConfig: {get_param: ExtraConfig}
877           Flavor: {get_param: OvercloudComputeFlavor}
878           GlanceHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
879           Image: {get_param: NovaImage}
880           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
881           KeyName: {get_param: KeyName}
882           KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
883           KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
884           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
885           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
886           NeutronEnableL2Pop : {get_param: NeutronEnableL2Pop}
887           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
888           NeutronHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
889           NeutronNetworkType: {get_param: NeutronNetworkType}
890           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
891           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
892           NeutronPassword: {get_param: NeutronPassword}
893           NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
894           NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
895           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
896           NeutronCorePlugin: {get_param: NeutronCorePlugin}
897           NeutronServicePlugins: {get_param: NeutronServicePlugins}
898           NeutronTypeDrivers: {get_param: NeutronTypeDrivers}
899           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
900           NeutronAgentExtensions: {get_param: NeutronAgentExtensions}
901           # L3 HA and Failover is not relevant for Computes, should be removed
902           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
903           NeutronL3HA: {get_param: NeutronL3HA}
904           NovaApiHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
905           NovaComputeDriver: {get_param: NovaComputeDriver}
906           NovaComputeExtraConfig: {get_param: NovaComputeExtraConfig}
907           NovaComputeLibvirtType: {get_param: NovaComputeLibvirtType}
908           NovaComputeLibvirtVifDriver: {get_param: NovaComputeLibvirtVifDriver}
909           NovaEnableRbdBackend: {get_param: NovaEnableRbdBackend}
910           NovaIPv6: {get_param: NovaIPv6}
911           NovaPublicIP: {get_attr: [VipMap, net_ip_map, external]}
912           NovaPassword: {get_param: NovaPassword}
913           NovaOVSBridge: {get_param: NovaOVSBridge}
914           NovaSecurityGroupAPI: {get_param: NovaSecurityGroupAPI}
915           RabbitHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
916           RabbitPassword: {get_param: RabbitPassword}
917           RabbitUserName: {get_param: RabbitUserName}
918           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
919           RabbitClientPort: {get_param: RabbitClientPort}
920           ServiceNetMap: {get_param: ServiceNetMap}
921           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
922           UpdateIdentifier: {get_param: UpdateIdentifier}
923           Hostname:
924             str_replace:
925               template: {get_param: ComputeHostnameFormat}
926               params:
927                 '%stackname%': {get_param: 'OS::stack_name'}
928           CloudDomain: {get_param: CloudDomain}
929           ServerMetadata: {get_param: ServerMetadata}
930           SchedulerHints: {get_param: NovaComputeSchedulerHints}
931           NodeIndex: '%index%'
932           ServiceConfigSettings: {get_attr: [ComputeServiceChain, role_data, config_settings]}
933
934   BlockStorageServiceChain:
935     type: OS::TripleO::Services
936     properties:
937       Services: {get_param: BlockStorageServices}
938       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
939
940   BlockStorage:
941     type: OS::Heat::ResourceGroup
942     depends_on: Networks
943     properties:
944       count: {get_param: BlockStorageCount}
945       removal_policies: {get_param: BlockStorageRemovalPolicies}
946       resource_def:
947         type: OS::TripleO::BlockStorage
948         properties:
949           Image: {get_param: BlockStorageImage}
950           KeyName: {get_param: KeyName}
951           Flavor: {get_param: OvercloudBlockStorageFlavor}
952           UpdateIdentifier: {get_param: UpdateIdentifier}
953           Hostname:
954             str_replace:
955               template: {get_param: BlockStorageHostnameFormat}
956               params:
957                 '%stackname%': {get_param: 'OS::stack_name'}
958           ServiceNetMap: {get_param: ServiceNetMap}
959           ExtraConfig: {get_param: ExtraConfig}
960           BlockStorageExtraConfig: {get_param: BlockStorageExtraConfig}
961           CloudDomain: {get_param: CloudDomain}
962           ServerMetadata: {get_param: ServerMetadata}
963           SchedulerHints: {get_param: BlockStorageSchedulerHints}
964           NodeIndex: '%index%'
965           ServiceConfigSettings: {get_attr: [BlockStorageServiceChain, role_data, config_settings]}
966
967   ObjectStorageServiceChain:
968     type: OS::TripleO::Services
969     properties:
970       Services: {get_param: ObjectStorageServices}
971       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
972
973   ObjectStorage:
974     type: OS::Heat::ResourceGroup
975     depends_on: Networks
976     properties:
977       count: {get_param: ObjectStorageCount}
978       removal_policies: {get_param: ObjectStorageRemovalPolicies}
979       resource_def:
980         type: OS::TripleO::ObjectStorage
981         properties:
982           KeyName: {get_param: KeyName}
983           Flavor: {get_param: OvercloudSwiftStorageFlavor}
984           HashSuffix: {get_param: SwiftHashSuffix}
985           MinPartHours: {get_param: SwiftMinPartHours}
986           PartPower: {get_param: SwiftPartPower}
987           Image: {get_param: SwiftStorageImage}
988           Replicas: { get_param: SwiftReplicas}
989           UpdateIdentifier: {get_param: UpdateIdentifier}
990           ServiceNetMap: {get_param: ServiceNetMap}
991           Hostname:
992             str_replace:
993               template: {get_param: ObjectStorageHostnameFormat}
994               params:
995                 '%stackname%': {get_param: 'OS::stack_name'}
996           ExtraConfig: {get_param: ExtraConfig}
997           ObjectStorageExtraConfig: {get_param: ObjectStorageExtraConfig}
998           CloudDomain: {get_param: CloudDomain}
999           ServerMetadata: {get_param: ServerMetadata}
1000           SchedulerHints: {get_param: ObjectStorageSchedulerHints}
1001           NodeIndex: '%index%'
1002           ServiceConfigSettings: {get_attr: [ObjectStorageServiceChain, role_data, config_settings]}
1003
1004   CephStorageServiceChain:
1005     type: OS::TripleO::Services
1006     properties:
1007       Services: {get_param: CephStorageServices}
1008       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1009
1010   CephStorage:
1011     type: OS::Heat::ResourceGroup
1012     depends_on: Networks
1013     properties:
1014       count: {get_param: CephStorageCount}
1015       removal_policies: {get_param: CephStorageRemovalPolicies}
1016       resource_def:
1017         type: OS::TripleO::CephStorage
1018         properties:
1019           Image: {get_param: CephStorageImage}
1020           KeyName: {get_param: KeyName}
1021           Flavor: {get_param: OvercloudCephStorageFlavor}
1022           ServiceNetMap: {get_param: ServiceNetMap}
1023           UpdateIdentifier: {get_param: UpdateIdentifier}
1024           Hostname:
1025             str_replace:
1026               template: {get_param: CephStorageHostnameFormat}
1027               params:
1028                 '%stackname%': {get_param: 'OS::stack_name'}
1029           ExtraConfig: {get_param: ExtraConfig}
1030           CephStorageExtraConfig: {get_param: CephStorageExtraConfig}
1031           CloudDomain: {get_param: CloudDomain}
1032           ServerMetadata: {get_param: ServerMetadata}
1033           SchedulerHints: {get_param: CephStorageSchedulerHints}
1034           NodeIndex: '%index%'
1035           ServiceConfigSettings: {get_attr: [CephStorageServiceChain, role_data, config_settings]}
1036
1037   ControllerIpListMap:
1038     type: OS::TripleO::Network::Ports::NetIpListMap
1039     properties:
1040       ControlPlaneIpList: {get_attr: [Controller, ip_address]}
1041       ExternalIpList: {get_attr: [Controller, external_ip_address]}
1042       InternalApiIpList: {get_attr: [Controller, internal_api_ip_address]}
1043       StorageIpList: {get_attr: [Controller, storage_ip_address]}
1044       StorageMgmtIpList: {get_attr: [Controller, storage_mgmt_ip_address]}
1045       TenantIpList: {get_attr: [Controller, tenant_ip_address]}
1046       ManagementIpList: {get_attr: [Controller, management_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       aodh_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
1068       gnocchi_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
1069       nova_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1070       nova_metadata_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1071       glance_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1072       glance_registry_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1073       cinder_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1074       neutron_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1075       keystone_public_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1076       keystone_admin_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1077       sahara_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1078       ironic_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
1079       ceph_mon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
1080       ceph_mon_node_names: {get_attr: [Controller, hostname]}
1081       DeployIdentifier: {get_param: DeployIdentifier}
1082       UpdateIdentifier: {get_param: UpdateIdentifier}
1083
1084   MysqlRootPassword:
1085     type: OS::Heat::RandomString
1086     properties:
1087       length: 10
1088
1089   MysqlClusterUniquePart:
1090     type: OS::Heat::RandomString
1091     properties:
1092       length: 10
1093
1094   RabbitCookie:
1095     type: OS::Heat::RandomString
1096     properties:
1097       length: 20
1098       salt: {get_param: RabbitCookieSalt}
1099
1100   # creates the network architecture
1101   Networks:
1102     type: OS::TripleO::Network
1103
1104   ControlVirtualIP:
1105     type: OS::Neutron::Port
1106     depends_on: Networks
1107     properties:
1108       name: control_virtual_ip
1109       network: {get_param: NeutronControlPlaneID}
1110       fixed_ips: {get_param: ControlFixedIPs}
1111       replacement_policy: AUTO
1112
1113   RedisVirtualIP:
1114     depends_on: Networks
1115     type: OS::TripleO::Network::Ports::RedisVipPort
1116     properties:
1117       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1118       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
1119       PortName: redis_virtual_ip
1120       NetworkName: {get_param: [ServiceNetMap, RedisNetwork]}
1121       ServiceName: redis
1122
1123   # The public VIP is on the External net, falls back to ctlplane
1124   PublicVirtualIP:
1125     depends_on: Networks
1126     type: OS::TripleO::Network::Ports::ExternalVipPort
1127     properties:
1128       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1129       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
1130       PortName: public_virtual_ip
1131       FixedIPs: {get_param: PublicVirtualFixedIPs}
1132
1133   InternalApiVirtualIP:
1134     depends_on: Networks
1135     type: OS::TripleO::Network::Ports::InternalApiVipPort
1136     properties:
1137       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1138       PortName: internal_api_virtual_ip
1139       FixedIPs: {get_param: InternalApiVirtualFixedIPs}
1140
1141   StorageVirtualIP:
1142     depends_on: Networks
1143     type: OS::TripleO::Network::Ports::StorageVipPort
1144     properties:
1145       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1146       PortName: storage_virtual_ip
1147       FixedIPs: {get_param: StorageVirtualFixedIPs}
1148
1149   StorageMgmtVirtualIP:
1150     depends_on: Networks
1151     type: OS::TripleO::Network::Ports::StorageMgmtVipPort
1152     properties:
1153       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1154       PortName: storage_management_virtual_ip
1155       FixedIPs: {get_param: StorageMgmtVirtualFixedIPs}
1156
1157   VipMap:
1158     type: OS::TripleO::Network::Ports::NetVipMap
1159     properties:
1160       ControlPlaneIp: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1161       ExternalIp: {get_attr: [PublicVirtualIP, ip_address]}
1162       ExternalIpUri: {get_attr: [PublicVirtualIP, ip_address_uri]}
1163       InternalApiIp: {get_attr: [InternalApiVirtualIP, ip_address]}
1164       InternalApiIpUri: {get_attr: [InternalApiVirtualIP, ip_address_uri]}
1165       StorageIp: {get_attr: [StorageVirtualIP, ip_address]}
1166       StorageIpUri: {get_attr: [StorageVirtualIP, ip_address_uri]}
1167       StorageMgmtIp: {get_attr: [StorageMgmtVirtualIP, ip_address]}
1168       StorageMgmtIpUri: {get_attr: [StorageMgmtVirtualIP, ip_address_uri]}
1169       # No tenant or management VIP required
1170
1171   VipConfig:
1172     type: OS::TripleO::VipConfig
1173
1174   VipDeployment:
1175     type: OS::Heat::StructuredDeployments
1176     properties:
1177       name: VipDeployment
1178       config: {get_resource: VipConfig}
1179       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1180       input_values:
1181         # service VIP mappings
1182         keystone_admin_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1183         keystone_public_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1184         neutron_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1185         cinder_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1186         glance_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1187         glance_registry_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1188         swift_proxy_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1189         nova_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1190         nova_metadata_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1191         ceilometer_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1192         aodh_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
1193         gnocchi_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
1194         heat_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1195         horizon_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1196         redis_vip: {get_attr: [RedisVirtualIP, ip_address]}
1197         mysql_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1198         rabbit_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1199         # direct configuration of Virtual IPs for each network
1200         control_virtual_ip: {get_attr: [VipMap, net_ip_map, ctlplane]}
1201         public_virtual_ip: {get_attr: [VipMap, net_ip_map, external]}
1202         internal_api_virtual_ip: {get_attr: [VipMap, net_ip_map, internal_api]}
1203         sahara_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1204         ironic_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
1205         storage_virtual_ip: {get_attr: [VipMap, net_ip_map, storage]}
1206         storage_mgmt_virtual_ip: {get_attr: [VipMap, net_ip_map, storage_mgmt]}
1207
1208   ControllerBootstrapNodeConfig:
1209     type: OS::TripleO::BootstrapNode::SoftwareConfig
1210     properties:
1211       bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
1212       bootstrap_nodeid_ip: {get_attr: [Controller, resource.0.ip_address]}
1213
1214   ControllerBootstrapNodeDeployment:
1215     type: OS::Heat::StructuredDeployments
1216     properties:
1217       name: ControllerBootstrapNodeDeployment
1218       config: {get_attr: [ControllerBootstrapNodeConfig, config_id]}
1219       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1220
1221   ControllerSwiftDeployment:
1222     type: OS::Heat::StructuredDeployments
1223     properties:
1224       name: ControllerSwiftDeployment
1225       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
1226       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1227
1228   ObjectStorageSwiftDeployment:
1229     type: OS::Heat::StructuredDeployments
1230     properties:
1231       name: ObjectStorageSwiftDeployment
1232       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
1233       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1234
1235   SwiftDevicesAndProxyConfig:
1236     type: OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig
1237     properties:
1238       controller_swift_devices: {get_attr: [Controller, swift_device]}
1239       object_store_swift_devices: {get_attr: [ObjectStorage, swift_device]}
1240       controller_swift_proxy_memcaches: {get_attr: [Controller, swift_proxy_memcache]}
1241
1242   ComputeCephDeployment:
1243     type: OS::Heat::StructuredDeployments
1244     properties:
1245       name: ComputeCephDeployment
1246       config: {get_attr: [CephClusterConfig, config_id]}
1247       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1248
1249   ControllerCephDeployment:
1250     type: OS::Heat::StructuredDeployments
1251     properties:
1252       name: ControllerCephDeployment
1253       config: {get_attr: [CephClusterConfig, config_id]}
1254       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1255
1256   CephStorageCephDeployment:
1257     type: OS::Heat::StructuredDeployments
1258     properties:
1259       name: CephStorageCephDeployment
1260       config: {get_attr: [CephClusterConfig, config_id]}
1261       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1262
1263   CephClusterConfig:
1264     type: OS::TripleO::CephClusterConfig::SoftwareConfig
1265
1266   ControllerAllNodesDeployment:
1267     type: OS::Heat::StructuredDeployments
1268     properties:
1269       name: ControllerAllNodesDeployment
1270       config: {get_attr: [allNodesConfig, config_id]}
1271       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1272
1273   ComputeAllNodesDeployment:
1274     type: OS::Heat::StructuredDeployments
1275     properties:
1276       name: ComputeAllNodesDeployment
1277       config: {get_attr: [allNodesConfig, config_id]}
1278       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1279
1280   BlockStorageAllNodesDeployment:
1281     type: OS::Heat::StructuredDeployments
1282     properties:
1283       name: BlockStorageAllNodesDeployment
1284       config: {get_attr: [allNodesConfig, config_id]}
1285       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1286
1287   ObjectStorageAllNodesDeployment:
1288     type: OS::Heat::StructuredDeployments
1289     properties:
1290       name: ObjectStorageAllNodesDeployment
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       name: CephStorageAllNodesDeployment
1298       config: {get_attr: [allNodesConfig, config_id]}
1299       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1300
1301   # All Nodes Validations
1302   AllNodesValidationConfig:
1303     type: OS::TripleO::AllNodes::Validation
1304     properties:
1305       PingTestIps:
1306         list_join:
1307         - ' '
1308         - - {get_attr: [Controller, resource.0.external_ip_address]}
1309           - {get_attr: [Controller, resource.0.internal_api_ip_address]}
1310           - {get_attr: [Controller, resource.0.storage_ip_address]}
1311           - {get_attr: [Controller, resource.0.storage_mgmt_ip_address]}
1312           - {get_attr: [Controller, resource.0.tenant_ip_address]}
1313
1314   ControllerAllNodesValidationDeployment:
1315     type: OS::Heat::StructuredDeployments
1316     depends_on: ControllerAllNodesDeployment
1317     properties:
1318       name: ControllerAllNodesValidationDeployment
1319       config: {get_resource: AllNodesValidationConfig}
1320       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1321
1322   ComputeAllNodesValidationDeployment:
1323     type: OS::Heat::StructuredDeployments
1324     depends_on: ComputeAllNodesDeployment
1325     properties:
1326       name: ComputeAllNodesValidationDeployment
1327       config: {get_resource: AllNodesValidationConfig}
1328       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1329
1330   BlockStorageAllNodesValidationDeployment:
1331     type: OS::Heat::StructuredDeployments
1332     depends_on: BlockStorageAllNodesDeployment
1333     properties:
1334       name: BlockStorageAllNodesValidationDeployment
1335       config: {get_resource: AllNodesValidationConfig}
1336       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1337
1338   ObjectStorageAllNodesValidationDeployment:
1339     type: OS::Heat::StructuredDeployments
1340     depends_on: ObjectStorageAllNodesDeployment
1341     properties:
1342       name: ObjectStorageAllNodesValidationDeployment
1343       config: {get_resource: AllNodesValidationConfig}
1344       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1345
1346   CephStorageAllNodesValidationDeployment:
1347     type: OS::Heat::StructuredDeployments
1348     depends_on: CephStorageAllNodesDeployment
1349     properties:
1350       name: CephStorageAllNodesValidationDeployment
1351       config: {get_resource: AllNodesValidationConfig}
1352       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1353
1354   UpdateWorkflow:
1355     type: OS::TripleO::Tasks::UpdateWorkflow
1356     properties:
1357       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
1358       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
1359       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1360       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1361       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1362       input_values:
1363         deploy_identifier: {get_param: DeployIdentifier}
1364         update_identifier: {get_param: UpdateIdentifier}
1365
1366   # Optional ExtraConfig for all nodes - all roles are passed in here, but
1367   # the nested template may configure each role differently (or not at all)
1368   AllNodesExtraConfig:
1369     type: OS::TripleO::AllNodesExtraConfig
1370     depends_on:
1371       - UpdateWorkflow
1372       - ComputeAllNodesValidationDeployment
1373       - BlockStorageAllNodesValidationDeployment
1374       - ObjectStorageAllNodesValidationDeployment
1375       - CephStorageAllNodesValidationDeployment
1376       - ControllerAllNodesValidationDeployment
1377     properties:
1378       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
1379       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
1380       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1381       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1382       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1383
1384   # Nested stack deployment runs after all other controller deployments
1385   ControllerNodesPostDeployment:
1386     type: OS::TripleO::ControllerPostDeployment
1387     depends_on: [ControllerBootstrapNodeDeployment, ControllerAllNodesDeployment, ControllerSwiftDeployment, ControllerCephDeployment]
1388     properties:
1389       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1390       RoleData: {get_attr: [ControllerServiceChain, role_data]}
1391
1392   ComputeNodesPostDeployment:
1393     type: OS::TripleO::ComputePostDeployment
1394     depends_on: [ComputeAllNodesDeployment, ComputeCephDeployment]
1395     properties:
1396       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1397       RoleData: {get_attr: [ComputeServiceChain, role_data]}
1398
1399   ObjectStorageNodesPostDeployment:
1400     type: OS::TripleO::ObjectStoragePostDeployment
1401     depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment]
1402     properties:
1403       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1404       RoleData: {get_attr: [ObjectStorageServiceChain, role_data]}
1405
1406   BlockStorageNodesPostDeployment:
1407     type: OS::TripleO::BlockStoragePostDeployment
1408     depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment]
1409     properties:
1410       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1411       RoleData: {get_attr: [BlockStorageServiceChain, role_data]}
1412
1413   CephStorageNodesPostDeployment:
1414     type: OS::TripleO::CephStoragePostDeployment
1415     depends_on: [ControllerNodesPostDeployment, CephStorageCephDeployment, CephStorageAllNodesDeployment]
1416     properties:
1417       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1418       RoleData: {get_attr: [CephStorageServiceChain, role_data]}
1419
1420 outputs:
1421   KeystoneURL:
1422     description: URL for the Overcloud Keystone service
1423     value: {get_attr: [EndpointMap, endpoint_map, KeystonePublic, uri]}
1424   KeystoneAdminVip:
1425     description: Keystone Admin VIP endpoint
1426     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1427   PublicVip:
1428     description: Controller VIP for public API endpoints
1429     value: {get_attr: [VipMap, net_ip_map, external]}
1430   AodhInternalVip:
1431     description: VIP for Aodh API internal endpoint
1432     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
1433   CeilometerInternalVip:
1434     description: VIP for Ceilometer API internal endpoint
1435     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1436   CinderInternalVip:
1437     description: VIP for Cinder API internal endpoint
1438     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1439   GlanceInternalVip:
1440     description: VIP for Glance API internal endpoint
1441     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1442   GnocchiInternalVip:
1443     description: VIP for Gnocchi API internal endpoint
1444     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
1445   HeatInternalVip:
1446     description: VIP for Heat API internal endpoint
1447     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1448   IronicInternalVip:
1449     description: VIP for Ironic API internal endpoint
1450     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
1451   KeystoneInternalVip:
1452     description: VIP for Keystone API internal endpoint
1453     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1454   NeutronInternalVip:
1455     description: VIP for Neutron API internal endpoint
1456     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1457   NovaInternalVip:
1458     description: VIP for Nova API internal endpoint
1459     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1460   SaharaInternalVip:
1461     description: VIP for Sahara API internal endpoint
1462     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1463   SwiftInternalVip:
1464     description: VIP for Swift Proxy internal endpoint
1465     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1466   EndpointMap:
1467     description: |
1468       Mapping of the resources with the needed info for their endpoints.
1469       This includes the protocol used, the IP, port and also a full
1470       representation of the URI.
1471     value: {get_attr: [EndpointMap, endpoint_map]}
1472   HostsEntry:
1473     description: |
1474       The content that should be appended to your /etc/hosts if you want to get
1475       hostname-based access to the deployed nodes (useful for testing without
1476       setting up a DNS).
1477     value: {get_attr: [allNodesConfig, hosts_entries]}