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