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