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