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