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