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