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