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