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