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