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