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