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