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