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