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