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