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