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