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