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