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