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