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