Merge "pacemaker: run neutron-server-start-wait-stop only at step 4"
[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: comma_delimited_list
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: comma_delimited_list
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.
139     type: comma_delimited_list
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.
180     type: comma_delimited_list
181   NeutronTunnelIdRanges:
182     description: |
183         Comma-separated list of <tun_min>:<tun_max> tuples enumerating ranges
184         of GRE tunnel IDs that are available for tenant network allocation
185     default: ["1:1000", ]
186     type: comma_delimited_list
187   NeutronVniRanges:
188     description: |
189         Comma-separated list of <vni_min>:<vni_max> tuples enumerating ranges
190         of VXLAN VNI IDs that are available for tenant network allocation
191     default: ["1:1000", ]
192     type: comma_delimited_list
193   NeutronCorePlugin:
194     default: 'ml2'
195     description: |
196         The core plugin for Neutron. The value should be the entrypoint to be loaded
197         from neutron.core_plugins namespace.
198     type: string
199   NeutronServicePlugins:
200     default: "router"
201     description: |
202         Comma-separated list of service plugin entrypoints to be loaded from the
203         neutron.service_plugins namespace.
204     type: comma_delimited_list
205   NeutronTypeDrivers:
206     default: "vxlan,vlan,flat,gre"
207     description: |
208         Comma-separated list of network type driver entrypoints to be loaded.
209     type: comma_delimited_list
210   NeutronMechanismDrivers:
211     default: 'openvswitch'
212     description: |
213         The mechanism drivers for the Neutron tenant network.
214     type: comma_delimited_list
215   NeutronAllowL3AgentFailover:
216     default: 'False'
217     description: Allow automatic l3-agent failover
218     type: string
219   NeutronL3HA:
220     default: 'False'
221     description: Whether to enable l3-agent HA
222     type: string
223   NeutronDhcpAgentsPerNetwork:
224     type: number
225     default: 1
226     description: The number of neutron dhcp agents to schedule per network
227   NovaPassword:
228     default: unset
229     description: The password for the nova service account, used by nova-api.
230     type: string
231     hidden: true
232   NtpServer:
233     default: ''
234     description: Comma-separated list of ntp servers
235     type: comma_delimited_list
236   MongoDbNoJournal:
237     default: false
238     description: Should MongoDb journaling be disabled
239     type: boolean
240   PublicVirtualFixedIPs:
241     default: []
242     description: >
243         Control the IP allocation for the PublicVirtualInterface port. E.g.
244         [{'ip_address':'1.2.3.4'}]
245     type: json
246   RabbitCookieSalt:
247     type: string
248     default: unset
249     description: Salt for the rabbit cookie, change this to force the randomly generated rabbit cookie to change.
250   # FIXME: 'guest' is provisioned in RabbitMQ by default, we should create a user if these are changed
251   RabbitUserName:
252     default: guest
253     description: The username for RabbitMQ
254     type: string
255   RabbitPassword:
256     default: guest
257     description: The password for RabbitMQ
258     type: string
259     hidden: true
260   RabbitClientUseSSL:
261     default: false
262     description: >
263         Rabbit client subscriber parameter to specify
264         an SSL connection to the RabbitMQ host.
265     type: string
266   RabbitClientPort:
267     default: 5672
268     description: Set rabbit subscriber port, change this if using SSL
269     type: number
270   # We need to set this as string because 'unlimited' is a valid setting
271   RabbitFDLimit:
272     default: 16384
273     description: Configures RabbitMQ FD limit
274     type: string
275   SnmpdReadonlyUserName:
276     default: ro_snmp_user
277     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
278     type: string
279   SnmpdReadonlyUserPassword:
280     default: unset
281     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
282     type: string
283     hidden: true
284   CloudDomain:
285     default: 'localdomain'
286     type: string
287     description: >
288       The DNS domain used for the hosts. This should match the dhcp_domain
289       configured in the Undercloud neutron. Defaults to localdomain.
290   ServerMetadata:
291     default: {}
292     description: >
293       Extra properties or metadata passed to Nova for the created nodes in
294       the overcloud. It's accessible via the Nova metadata API.
295     type: json
296
297   # Controller-specific params
298   AdminToken:
299     default: unset
300     description: The keystone auth secret.
301     type: string
302     hidden: true
303   CinderLVMLoopDeviceSize:
304     default: 5000
305     description: The size of the loopback file used by the cinder LVM driver.
306     type: number
307   CinderNfsMountOptions:
308     default: ''
309     description: >
310       Mount options for NFS mounts used by Cinder NFS backend. Effective
311       when CinderEnableNfsBackend is true.
312     type: string
313   CinderNfsServers:
314     default: ''
315     description: >
316       NFS servers used by Cinder NFS backend. Effective when
317       CinderEnableNfsBackend is true.
318     type: comma_delimited_list
319   CinderPassword:
320     default: unset
321     description: The password for the cinder service account, used by cinder-api.
322     type: string
323     hidden: true
324   CinderISCSIHelper:
325     default: tgtadm
326     description: The iSCSI helper to use with cinder.
327     type: string
328   ControllerCount:
329     type: number
330     default: 1
331     constraints:
332       - range: {min: 1}
333   controllerExtraConfig:
334     default: {}
335     description: |
336       Controller specific configuration to inject into the cluster. Same
337       structure as ExtraConfig.
338     type: json
339   controllerImage:
340     type: string
341     default: overcloud-control
342     constraints:
343       - custom_constraint: glance.image
344   OvercloudControlFlavor:
345     description: Flavor for control nodes to request when deploying.
346     type: string
347     constraints:
348       - custom_constraint: nova.flavor
349   ControlVirtualInterface:
350     default: 'br-ex'
351     description: Interface where virtual ip will be assigned.
352     type: string
353   EnableFencing:
354     default: false
355     description: Whether to enable fencing in Pacemaker or not.
356     type: boolean
357   EnableGalera:
358     default: true
359     description: Whether to use Galera instead of regular MariaDB.
360     type: boolean
361   ControllerEnableCephStorage:
362     default: false
363     description: Whether to deploy Ceph Storage (OSD) on the Controller
364     type: boolean
365   ControllerEnableSwiftStorage:
366     default: true
367     description: Whether to enable Swift Storage on the Controller
368     type: boolean
369   ControllerSchedulerHints:
370     type: json
371     description: Optional scheduler hints to pass to nova
372     default: {}
373   ExtraConfig:
374     default: {}
375     description: |
376       Additional configuration to inject into the cluster. The format required
377       may be implementation specific, e.g puppet hieradata.  Any role specific
378       ExtraConfig, e.g controllerExtraConfig takes precedence over ExtraConfig.
379     type: json
380   FencingConfig:
381     default: {}
382     description: |
383       Pacemaker fencing configuration. The JSON should have
384       the following structure:
385         {
386           "devices": [
387             {
388               "agent": "AGENT_NAME",
389               "host_mac": "HOST_MAC_ADDRESS",
390               "params": {"PARAM_NAME": "PARAM_VALUE"}
391             }
392           ]
393         }
394       For instance:
395         {
396           "devices": [
397             {
398               "agent": "fence_xvm",
399               "host_mac": "52:54:00:aa:bb:cc",
400               "params": {
401                 "multicast_address": "225.0.0.12",
402                 "port": "baremetal_0",
403                 "manage_fw": true,
404                 "manage_key_file": true,
405                 "key_file": "/etc/fence_xvm.key",
406                 "key_file_password": "abcdef"
407               }
408             }
409           ]
410         }
411     type: json
412   GlanceLogFile:
413     description: The filepath of the file to use for logging messages from Glance.
414     type: string
415     default: ''
416   GlanceNotifierStrategy:
417     description: Strategy to use for Glance notification queue
418     type: string
419     default: noop
420   GlancePassword:
421     default: unset
422     description: The password for the glance service account, used by the glance services.
423     type: string
424     hidden: true
425   GlanceBackend:
426     default: swift
427     description: The short name of the Glance backend to use. Should be one
428       of swift, rbd or file
429     type: string
430     constraints:
431     - allowed_values: ['swift', 'file', 'rbd']
432   HeatPassword:
433     default: unset
434     description: The password for the Heat service account, used by the Heat services.
435     type: string
436     hidden: true
437   HeatStackDomainAdminPassword:
438     description: Password for heat_domain_admin user.
439     type: string
440     default: ''
441     hidden: true
442   InstanceNameTemplate:
443     default: 'instance-%08x'
444     description: Template string to be used to generate instance names
445     type: string
446   KeystoneCACertificate:
447     default: ''
448     description: Keystone self-signed certificate authority certificate.
449     type: string
450   KeystoneSigningCertificate:
451     default: ''
452     description: Keystone certificate for verifying token validity.
453     type: string
454   KeystoneSigningKey:
455     default: ''
456     description: Keystone key for signing tokens.
457     type: string
458     hidden: true
459   KeystoneSSLCertificate:
460     default: ''
461     description: Keystone certificate for verifying token validity.
462     type: string
463   KeystoneSSLCertificateKey:
464     default: ''
465     description: Keystone key for signing tokens.
466     type: string
467     hidden: true
468   KeystoneNotificationDriver:
469     description: Comma-separated list of Oslo notification drivers used by Keystone
470     default: ['messaging']
471     type: comma_delimited_list
472   KeystoneNotificationFormat:
473     description: The Keystone notification format
474     default: 'basic'
475     type: string
476     constraints:
477       - allowed_values: [ 'basic', 'cadf' ]
478   ManageFirewall:
479     default: false
480     description: Whether to manage IPtables rules.
481     type: boolean
482   PurgeFirewallRules:
483     default: false
484     description: Whether IPtables rules should be purged before setting up the ones.
485     type: boolean
486   MysqlInnodbBufferPoolSize:
487     description: >
488         Specifies the size of the buffer pool in megabytes. Setting to
489         zero should be interpreted as "no value" and will defer to the
490         lower level default.
491     type: number
492     default: 0
493   MysqlMaxConnections:
494     description: Configures MySQL max_connections config setting
495     type: number
496     default: 4096
497   NeutronDnsmasqOptions:
498     default: 'dhcp-option-force=26,1400'
499     description: Dnsmasq options for neutron-dhcp-agent. The default value here forces MTU to be set to 1400 to account for the tunnel overhead.
500     type: string
501   NeutronPublicInterfaceDefaultRoute:
502     default: ''
503     description: A custom default route for the NeutronPublicInterface.
504     type: string
505   NeutronPublicInterfaceIP:
506     default: ''
507     description: A custom IP address to put onto the NeutronPublicInterface.
508     type: string
509   NeutronPublicInterfaceRawDevice:
510     default: ''
511     description: If set, the public interface is a vlan with this device as the raw device.
512     type: string
513   PublicVirtualInterface:
514     default: 'br-ex'
515     description: >
516         Specifies the interface where the public-facing virtual ip will be assigned.
517         This should be int_public when a VLAN is being used.
518     type: string
519   SwiftHashSuffix:
520     default: unset
521     description: A random string to be used as a salt when hashing to determine mappings in the ring.
522     type: string
523     hidden: true
524   SwiftPassword:
525     default: unset
526     description: The password for the swift service account, used by the swift proxy services.
527     type: string
528     hidden: true
529   SwiftMountCheck:
530     default: 'false'
531     description: Value of mount_check in Swift account/container/object -server.conf
532     type: boolean
533   SwiftMinPartHours:
534     type: number
535     default: 1
536     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
537   SwiftPartPower:
538     default: 10
539     description: Partition Power to use when building Swift rings
540     type: number
541   SwiftReplicas:
542     type: number
543     default: 3
544     description: How many replicas to use in the swift rings.
545
546 # Compute-specific params
547   CeilometerComputeAgent:
548     description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly
549     type: string
550     default: ''
551     constraints:
552     - allowed_values: ['', Present]
553   ComputeCount:
554     type: number
555     default: 1
556   HypervisorNeutronPhysicalBridge:
557     default: 'br-ex'
558     description: >
559       An OVS bridge to create on each hypervisor. This defaults to br-ex the
560       same as the control plane nodes, as we have a uniform configuration of
561       the openvswitch agent. Typically should not need to be changed.
562     type: string
563   HypervisorNeutronPublicInterface:
564     default: nic1
565     description: What interface to add to the HypervisorNeutronPhysicalBridge.
566     type: string
567   NeutronNetworkVLANRanges:
568     default: 'datacentre'
569     description: >
570       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
571       Neutron documentation for permitted values. Defaults to permitting any
572       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
573     type: comma_delimited_list
574   NovaComputeDriver:
575     type: string
576     default: libvirt.LibvirtDriver
577   NovaComputeExtraConfig:
578     default: {}
579     description: |
580       NovaCompute specific configuration to inject into the cluster. Same
581       structure as ExtraConfig.
582     type: json
583   NovaComputeLibvirtType:
584     default: ''
585     type: string
586   NovaComputeLibvirtVifDriver:
587     default: ''
588     description: Libvirt VIF driver configuration for the network
589     type: string
590   NovaComputeSchedulerHints:
591     type: json
592     description: Optional scheduler hints to pass to nova
593     default: {}
594   NovaEnableRbdBackend:
595     default: false
596     description: Whether to enable or not the Rbd backend for Nova
597     type: boolean
598   NovaImage:
599     type: string
600     default: overcloud-compute
601     constraints:
602       - custom_constraint: glance.image
603   NovaOVSBridge:
604     default: 'br-int'
605     description: Name of integration bridge used by Open vSwitch
606     type: string
607   NovaSecurityGroupAPI:
608     default: 'neutron'
609     description: The full class name of the security API class
610     type: string
611   OvercloudComputeFlavor:
612     description: Use this flavor
613     type: string
614     constraints:
615       - custom_constraint: nova.flavor
616   ServiceNetMap:
617     default:
618       NeutronTenantNetwork: tenant
619       CeilometerApiNetwork: internal_api
620       MongoDbNetwork: internal_api
621       CinderApiNetwork: internal_api
622       CinderIscsiNetwork: storage
623       GlanceApiNetwork: storage
624       GlanceRegistryNetwork: internal_api
625       KeystoneAdminApiNetwork: ctlplane # allows undercloud to config endpoints
626       KeystonePublicApiNetwork: internal_api
627       NeutronApiNetwork: internal_api
628       HeatApiNetwork: internal_api
629       NovaApiNetwork: internal_api
630       NovaMetadataNetwork: internal_api
631       NovaVncProxyNetwork: internal_api
632       SwiftMgmtNetwork: storage_mgmt
633       SwiftProxyNetwork: storage
634       HorizonNetwork: internal_api
635       MemcachedNetwork: internal_api
636       RabbitMqNetwork: internal_api
637       RedisNetwork: internal_api
638       MysqlNetwork: internal_api
639       CephClusterNetwork: storage_mgmt
640       CephPublicNetwork: storage
641       ControllerHostnameResolveNetwork: internal_api
642       ComputeHostnameResolveNetwork: internal_api
643       BlockStorageHostnameResolveNetwork: internal_api
644       ObjectStorageHostnameResolveNetwork: internal_api
645       CephStorageHostnameResolveNetwork: storage
646     description: Mapping of service_name -> network name. Typically set
647                  via parameter_defaults in the resource registry.
648     type: json
649
650 # Block storage specific parameters
651   BlockStorageCount:
652     type: number
653     default: 0
654   BlockStorageImage:
655     default: overcloud-cinder-volume
656     type: string
657   OvercloudBlockStorageFlavor:
658     description: Flavor for block storage nodes to request when deploying.
659     type: string
660     constraints:
661       - custom_constraint: nova.flavor
662   BlockStorageExtraConfig:
663     default: {}
664     description: |
665       BlockStorage specific configuration to inject into the cluster. Same
666       structure as ExtraConfig.
667     type: json
668   BlockStorageSchedulerHints:
669     type: json
670     description: Optional scheduler hints to pass to nova
671     default: {}
672
673
674 # Object storage specific parameters
675   ObjectStorageCount:
676     type: number
677     default: 0
678   OvercloudSwiftStorageFlavor:
679     description: Flavor for Swift storage nodes to request when deploying.
680     type: string
681     constraints:
682       - custom_constraint: nova.flavor
683   SwiftStorageImage:
684     default: overcloud-swift-storage
685     type: string
686   ObjectStorageExtraConfig:
687     default: {}
688     description: |
689       ObjectStorage specific configuration to inject into the cluster. Same
690       structure as ExtraConfig.
691     type: json
692   ObjectStorageSchedulerHints:
693     type: json
694     description: Optional scheduler hints to pass to nova
695     default: {}
696
697 # Ceph storage specific parameters
698   CephStorageCount:
699     type: number
700     default: 0
701   CephStorageImage:
702     default: overcloud-ceph-storage
703     type: string
704   OvercloudCephStorageFlavor:
705     default: baremetal
706     description: Flavor for Ceph storage nodes to request when deploying.
707     type: string
708     constraints:
709       - custom_constraint: nova.flavor
710   CephStorageExtraConfig:
711     default: {}
712     description: |
713       CephStorage specific configuration to inject into the cluster. Same
714       structure as ExtraConfig.
715     type: json
716   CephStorageSchedulerHints:
717     type: json
718     description: Optional scheduler hints to pass to nova
719     default: {}
720
721
722   # Hostname format for each role
723   # Note %index% is translated into the index of the node, e.g 0/1/2 etc
724   # and %stackname% is replaced with OS::stack_name in the template below.
725   # If you want to use the heat generated names, pass '' (empty string).
726   ControllerHostnameFormat:
727     type: string
728     description: Format for Controller node hostnames
729     default: '%stackname%-controller-%index%'
730   ComputeHostnameFormat:
731     type: string
732     description: Format for Compute node hostnames
733     default: '%stackname%-novacompute-%index%'
734   BlockStorageHostnameFormat:
735     type: string
736     description: Format for BlockStorage node hostnames
737     default: '%stackname%-blockstorage-%index%'
738   ObjectStorageHostnameFormat:
739     type: string
740     description: Format for SwiftStorage node hostnames
741     default: '%stackname%-objectstorage-%index%'
742   CephStorageHostnameFormat:
743     type: string
744     description: Format for CephStorage node hostnames
745     default: '%stackname%-cephstorage-%index%'
746
747   # Identifiers to trigger tasks on nodes
748   UpdateIdentifier:
749     default: ''
750     type: string
751     description: >
752       Setting to a previously unused value during stack-update will trigger
753       package update on all nodes
754   DeployIdentifier:
755     default: ''
756     type: string
757     description: >
758       Setting this to a unique value will re-run any deployment tasks which
759       perform configuration on a Heat stack-update.
760
761   # If you want to remove a specific node from a resource group, you can pass
762   # the node name or id as a <Group>RemovalPolicies parameter, for example:
763   # ComputeRemovalPolicies: [{'resource_list': ['0']}]
764   ControllerRemovalPolicies:
765     default: []
766     type: json
767     description: >
768       List of resources to be removed from ControllerResourceGroup when
769       doing an update which requires removal of specific resources.
770   ComputeRemovalPolicies:
771     default: []
772     type: json
773     description: >
774       List of resources to be removed from ComputeResourceGroup when
775       doing an update which requires removal of specific resources.
776   BlockStorageRemovalPolicies:
777     default: []
778     type: json
779     description: >
780       List of resources to be removed from BlockStorageResourceGroup when
781       doing an update which requires removal of specific resources.
782   ObjectStorageRemovalPolicies:
783     default: []
784     type: json
785     description: >
786       List of resources to be removed from ObjectStorageResourceGroup when
787       doing an update which requires removal of specific resources.
788   CephStorageRemovalPolicies:
789     default: []
790     type: json
791     description: >
792       List of resources to be removed from CephStorageResourceGroup when
793       doing an update which requires removal of specific resources.
794
795
796 resources:
797
798   HeatAuthEncryptionKey:
799     type: OS::Heat::RandomString
800
801   PcsdPassword:
802     type: OS::Heat::RandomString
803     properties:
804       length: 16
805
806   HorizonSecret:
807     type: OS::Heat::RandomString
808     properties:
809       length: 10
810
811   EndpointMap:
812     type: OS::TripleO::EndpointMap
813     properties:
814       CloudName: {get_param: CloudName}
815       CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
816       CinderApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
817       GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
818       GlanceRegistryVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
819       HeatApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
820       KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
821       KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
822       MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
823       NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
824       NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
825       SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
826       PublicVirtualIP: {get_attr: [VipMap, net_ip_map, external]}
827
828   Controller:
829     type: OS::Heat::ResourceGroup
830     depends_on: Networks
831     properties:
832       count: {get_param: ControllerCount}
833       removal_policies: {get_param: ControllerRemovalPolicies}
834       resource_def:
835         type: OS::TripleO::Controller
836         properties:
837           AdminPassword: {get_param: AdminPassword}
838           AdminToken: {get_param: AdminToken}
839           CeilometerBackend: {get_param: CeilometerBackend}
840           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
841           CeilometerPassword: {get_param: CeilometerPassword}
842           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
843           CinderNfsMountOptions: {get_param: CinderNfsMountOptions}
844           CinderNfsServers: {get_param: CinderNfsServers}
845           CinderPassword: {get_param: CinderPassword}
846           CinderISCSIHelper: {get_param: CinderISCSIHelper}
847           CinderEnableNfsBackend: {get_param: CinderEnableNfsBackend}
848           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
849           CinderEnableRbdBackend: {get_param: CinderEnableRbdBackend}
850           CloudName: {get_param: CloudName}
851           CloudDomain: {get_param: CloudDomain}
852           ControlVirtualInterface: {get_param: ControlVirtualInterface}
853           ControllerExtraConfig: {get_param: controllerExtraConfig}
854           Debug: {get_param: Debug}
855           EnableFencing: {get_param: EnableFencing}
856           ManageFirewall: {get_param: ManageFirewall}
857           PurgeFirewallRules: {get_param: PurgeFirewallRules}
858           EnableGalera: {get_param: EnableGalera}
859           EnableCephStorage: {get_param: ControllerEnableCephStorage}
860           EnableSwiftStorage: {get_param: ControllerEnableSwiftStorage}
861           ExtraConfig: {get_param: ExtraConfig}
862           FencingConfig: {get_param: FencingConfig}
863           Flavor: {get_param: OvercloudControlFlavor}
864           GlancePassword: {get_param: GlancePassword}
865           GlanceBackend: {get_param: GlanceBackend}
866           GlanceNotifierStrategy: {get_param: GlanceNotifierStrategy}
867           GlanceLogFile: {get_param: GlanceLogFile}
868           HAProxySyslogAddress: {get_param: HAProxySyslogAddress}
869           HeatPassword: {get_param: HeatPassword}
870           HeatStackDomainAdminPassword: {get_param: HeatStackDomainAdminPassword}
871           HeatAuthEncryptionKey: {get_resource: HeatAuthEncryptionKey}
872           HorizonAllowedHosts: {get_param: HorizonAllowedHosts}
873           HorizonSecret: {get_resource: HorizonSecret}
874           Image: {get_param: controllerImage}
875           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
876           InstanceNameTemplate: {get_param: InstanceNameTemplate}
877           KeyName: {get_param: KeyName}
878           KeystoneCACertificate: {get_param: KeystoneCACertificate}
879           KeystoneSigningCertificate: {get_param: KeystoneSigningCertificate}
880           KeystoneSigningKey: {get_param: KeystoneSigningKey}
881           KeystoneSSLCertificate: {get_param: KeystoneSSLCertificate}
882           KeystoneSSLCertificateKey: {get_param: KeystoneSSLCertificateKey}
883           KeystoneNotificationDriver: {get_param: KeystoneNotificationDriver}
884           KeystoneNotificationFormat: {get_param: KeystoneNotificationFormat}
885           MysqlClusterUniquePart: {get_attr: [MysqlClusterUniquePart, value]}
886           MysqlInnodbBufferPoolSize: {get_param: MysqlInnodbBufferPoolSize}
887           MysqlMaxConnections: {get_param: MysqlMaxConnections}
888           MysqlRootPassword: {get_attr: [MysqlRootPassword, value]}
889           NeutronPublicInterfaceIP: {get_param: NeutronPublicInterfaceIP}
890           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
891           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
892           NeutronExternalNetworkBridge: {get_param: NeutronExternalNetworkBridge}
893           NeutronEnableIsolatedMetadata: {get_param: NeutronEnableIsolatedMetadata}
894           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
895           NeutronEnableL2Pop: {get_param: NeutronEnableL2Pop}
896           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
897           NeutronPublicInterface: {get_param: NeutronPublicInterface}
898           NeutronPublicInterfaceDefaultRoute: {get_param: NeutronPublicInterfaceDefaultRoute}
899           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
900           NeutronPassword: {get_param: NeutronPassword}
901           NeutronDnsmasqOptions: {get_param: NeutronDnsmasqOptions}
902           NeutronDVR: {get_param: NeutronDVR}
903           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
904           NeutronAgentMode: {get_param: NeutronAgentMode}
905           NeutronCorePlugin: {get_param: NeutronCorePlugin}
906           NeutronServicePlugins: {get_param: NeutronServicePlugins}
907           NeutronTypeDrivers: {get_param: NeutronTypeDrivers}
908           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
909           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
910           NeutronL3HA: {get_param: NeutronL3HA}
911           NeutronDhcpAgentsPerNetwork: {get_param: NeutronDhcpAgentsPerNetwork}
912           NeutronNetworkType: {get_param: NeutronNetworkType}
913           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
914           NovaPassword: {get_param: NovaPassword}
915           NtpServer: {get_param: NtpServer}
916           MongoDbNoJournal: {get_param: MongoDbNoJournal}
917           PcsdPassword: {get_resource: PcsdPassword}
918           PublicVirtualInterface: {get_param: PublicVirtualInterface}
919           RabbitPassword: {get_param: RabbitPassword}
920           RabbitUserName: {get_param: RabbitUserName}
921           RabbitCookie: {get_attr: [RabbitCookie, value]}
922           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
923           RabbitClientPort: {get_param: RabbitClientPort}
924           RabbitFDLimit: {get_param: RabbitFDLimit}
925           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
926           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
927           RedisVirtualIP: {get_attr: [RedisVirtualIP, ip_address]}
928           SwiftHashSuffix: {get_param: SwiftHashSuffix}
929           SwiftMountCheck: {get_param: SwiftMountCheck}
930           SwiftMinPartHours: {get_param: SwiftMinPartHours}
931           SwiftPartPower: {get_param: SwiftPartPower}
932           SwiftPassword: {get_param: SwiftPassword}
933           SwiftReplicas: { get_param: SwiftReplicas}
934           VirtualIP: {get_attr: [VipMap, net_ip_map, ctlplane]} # deprecated. Use per service VIP settings instead now.
935           PublicVirtualIP: {get_attr: [VipMap, net_ip_map, external]}
936           ServiceNetMap: {get_param: ServiceNetMap}
937           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
938           CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
939           CinderApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
940           HeatApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
941           GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
942           GlanceRegistryVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
943           NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
944           SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
945           MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
946           KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
947           KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
948           NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
949           NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
950           UpdateIdentifier: {get_param: UpdateIdentifier}
951           Hostname:
952             str_replace:
953               template: {get_param: ControllerHostnameFormat}
954               params:
955                 '%stackname%': {get_param: 'OS::stack_name'}
956           NodeIndex: '%index%'
957           ServerMetadata: {get_param: ServerMetadata}
958           SchedulerHints: {get_param: ControllerSchedulerHints}
959
960   Compute:
961     type: OS::Heat::ResourceGroup
962     depends_on: Networks
963     properties:
964       count: {get_param: ComputeCount}
965       removal_policies: {get_param: ComputeRemovalPolicies}
966       resource_def:
967         type: OS::TripleO::Compute
968         properties:
969           AdminPassword: {get_param: AdminPassword}
970           CeilometerComputeAgent: {get_param: CeilometerComputeAgent}
971           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
972           CeilometerPassword: {get_param: CeilometerPassword}
973           CinderEnableNfsBackend: {get_param: CinderEnableNfsBackend}
974           CinderEnableRbdBackend: {get_param: CinderEnableRbdBackend}
975           Debug: {get_param: Debug}
976           ExtraConfig: {get_param: ExtraConfig}
977           Flavor: {get_param: OvercloudComputeFlavor}
978           GlanceHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
979           Image: {get_param: NovaImage}
980           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
981           KeyName: {get_param: KeyName}
982           KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
983           KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
984           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
985           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
986           NeutronEnableL2Pop : {get_param: NeutronEnableL2Pop}
987           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
988           NeutronHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
989           NeutronNetworkType: {get_param: NeutronNetworkType}
990           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
991           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
992           NeutronPassword: {get_param: NeutronPassword}
993           NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
994           NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
995           NeutronDVR: {get_param: NeutronDVR}
996           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
997           NeutronAgentMode: {get_param: NeutronComputeAgentMode}
998           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
999           NeutronCorePlugin: {get_param: NeutronCorePlugin}
1000           NeutronServicePlugins: {get_param: NeutronServicePlugins}
1001           NeutronTypeDrivers: {get_param: NeutronTypeDrivers}
1002           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
1003           # L3 HA and Failover is not relevant for Computes, should be removed
1004           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
1005           NeutronL3HA: {get_param: NeutronL3HA}
1006           NovaApiHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1007           NovaComputeDriver: {get_param: NovaComputeDriver}
1008           NovaComputeExtraConfig: {get_param: NovaComputeExtraConfig}
1009           NovaComputeLibvirtType: {get_param: NovaComputeLibvirtType}
1010           NovaComputeLibvirtVifDriver: {get_param: NovaComputeLibvirtVifDriver}
1011           NovaEnableRbdBackend: {get_param: NovaEnableRbdBackend}
1012           NovaPublicIP: {get_attr: [VipMap, net_ip_map, external]}
1013           NovaPassword: {get_param: NovaPassword}
1014           NovaOVSBridge: {get_param: NovaOVSBridge}
1015           NovaSecurityGroupAPI: {get_param: NovaSecurityGroupAPI}
1016           NtpServer: {get_param: NtpServer}
1017           RabbitHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1018           RabbitPassword: {get_param: RabbitPassword}
1019           RabbitUserName: {get_param: RabbitUserName}
1020           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
1021           RabbitClientPort: {get_param: RabbitClientPort}
1022           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
1023           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
1024           ServiceNetMap: {get_param: ServiceNetMap}
1025           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1026           UpdateIdentifier: {get_param: UpdateIdentifier}
1027           Hostname:
1028             str_replace:
1029               template: {get_param: ComputeHostnameFormat}
1030               params:
1031                 '%stackname%': {get_param: 'OS::stack_name'}
1032           CloudDomain: {get_param: CloudDomain}
1033           ServerMetadata: {get_param: ServerMetadata}
1034           SchedulerHints: {get_param: NovaComputeSchedulerHints}
1035
1036   BlockStorage:
1037     type: OS::Heat::ResourceGroup
1038     depends_on: Networks
1039     properties:
1040       count: {get_param: BlockStorageCount}
1041       removal_policies: {get_param: BlockStorageRemovalPolicies}
1042       resource_def:
1043         type: OS::TripleO::BlockStorage
1044         properties:
1045           Debug: {get_param: Debug}
1046           Image: {get_param: BlockStorageImage}
1047           CinderISCSIHelper: {get_param: CinderISCSIHelper}
1048           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
1049           # Purpose of the dedicated BlockStorage nodes should be to use their local LVM
1050           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
1051           CinderPassword: {get_param: CinderPassword}
1052           KeyName: {get_param: KeyName}
1053           Flavor: {get_param: OvercloudBlockStorageFlavor}
1054           VirtualIP: {get_attr: [VipMap, net_ip_map, ctlplane]}
1055           GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1056           RabbitPassword: {get_param: RabbitPassword}
1057           RabbitUserName: {get_param: RabbitUserName}
1058           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
1059           RabbitClientPort: {get_param: RabbitClientPort}
1060           NtpServer: {get_param: NtpServer}
1061           UpdateIdentifier: {get_param: UpdateIdentifier}
1062           Hostname:
1063             str_replace:
1064               template: {get_param: BlockStorageHostnameFormat}
1065               params:
1066                 '%stackname%': {get_param: 'OS::stack_name'}
1067           ServiceNetMap: {get_param: ServiceNetMap}
1068           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1069           MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1070           ExtraConfig: {get_param: ExtraConfig}
1071           BlockStorageExtraConfig: {get_param: BlockStorageExtraConfig}
1072           CloudDomain: {get_param: CloudDomain}
1073           ServerMetadata: {get_param: ServerMetadata}
1074           SchedulerHints: {get_param: BlockStorageSchedulerHints}
1075
1076   ObjectStorage:
1077     type: OS::Heat::ResourceGroup
1078     depends_on: Networks
1079     properties:
1080       count: {get_param: ObjectStorageCount}
1081       removal_policies: {get_param: ObjectStorageRemovalPolicies}
1082       resource_def:
1083         type: OS::TripleO::ObjectStorage
1084         properties:
1085           KeyName: {get_param: KeyName}
1086           Flavor: {get_param: OvercloudSwiftStorageFlavor}
1087           HashSuffix: {get_param: SwiftHashSuffix}
1088           MountCheck: {get_param: SwiftMountCheck}
1089           MinPartHours: {get_param: SwiftMinPartHours}
1090           PartPower: {get_param: SwiftPartPower}
1091           Image: {get_param: SwiftStorageImage}
1092           Replicas: { get_param: SwiftReplicas}
1093           NtpServer: {get_param: NtpServer}
1094           UpdateIdentifier: {get_param: UpdateIdentifier}
1095           ServiceNetMap: {get_param: ServiceNetMap}
1096           Hostname:
1097             str_replace:
1098               template: {get_param: ObjectStorageHostnameFormat}
1099               params:
1100                 '%stackname%': {get_param: 'OS::stack_name'}
1101           ExtraConfig: {get_param: ExtraConfig}
1102           ObjectStorageExtraConfig: {get_param: ObjectStorageExtraConfig}
1103           CloudDomain: {get_param: CloudDomain}
1104           ServerMetadata: {get_param: ServerMetadata}
1105           SchedulerHints: {get_param: ObjectStorageSchedulerHints}
1106
1107   CephStorage:
1108     type: OS::Heat::ResourceGroup
1109     depends_on: Networks
1110     properties:
1111       count: {get_param: CephStorageCount}
1112       removal_policies: {get_param: CephStorageRemovalPolicies}
1113       resource_def:
1114         type: OS::TripleO::CephStorage
1115         properties:
1116           Image: {get_param: CephStorageImage}
1117           KeyName: {get_param: KeyName}
1118           Flavor: {get_param: OvercloudCephStorageFlavor}
1119           NtpServer: {get_param: NtpServer}
1120           ServiceNetMap: {get_param: ServiceNetMap}
1121           UpdateIdentifier: {get_param: UpdateIdentifier}
1122           Hostname:
1123             str_replace:
1124               template: {get_param: CephStorageHostnameFormat}
1125               params:
1126                 '%stackname%': {get_param: 'OS::stack_name'}
1127           ExtraConfig: {get_param: ExtraConfig}
1128           CephStorageExtraConfig: {get_param: CephStorageExtraConfig}
1129           CloudDomain: {get_param: CloudDomain}
1130           ServerMetadata: {get_param: ServerMetadata}
1131           SchedulerHints: {get_param: CephStorageSchedulerHints}
1132
1133   ControllerIpListMap:
1134     type: OS::TripleO::Network::Ports::NetIpListMap
1135     properties:
1136       ControlPlaneIpList: {get_attr: [Controller, ip_address]}
1137       ExternalIpList: {get_attr: [Controller, external_ip_address]}
1138       InternalApiIpList: {get_attr: [Controller, internal_api_ip_address]}
1139       StorageIpList: {get_attr: [Controller, storage_ip_address]}
1140       StorageMgmtIpList: {get_attr: [Controller, storage_mgmt_ip_address]}
1141       TenantIpList: {get_attr: [Controller, tenant_ip_address]}
1142
1143   allNodesConfig:
1144     type: OS::TripleO::AllNodes::SoftwareConfig
1145     properties:
1146       compute_hosts: {get_attr: [Compute, hosts_entry]}
1147       controller_hosts: {get_attr: [Controller, hosts_entry]}
1148       controller_ips: {get_attr: [Controller, ip_address]}
1149       block_storage_hosts: {get_attr: [BlockStorage, hosts_entry]}
1150       object_storage_hosts: {get_attr: [ObjectStorage, hosts_entry]}
1151       ceph_storage_hosts: {get_attr: [CephStorage, hosts_entry]}
1152       controller_names: {get_attr: [Controller, hostname]}
1153       rabbit_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1154       mongo_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
1155       redis_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
1156       memcache_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
1157       mysql_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1158       horizon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1159       heat_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1160       swift_proxy_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1161       ceilometer_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1162       nova_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1163       nova_metadata_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1164       glance_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1165       glance_registry_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1166       cinder_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1167       neutron_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1168       keystone_public_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1169       keystone_admin_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1170       DeployIdentifier: {get_param: DeployIdentifier}
1171       UpdateIdentifier: {get_param: UpdateIdentifier}
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]}