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