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