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