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