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