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