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