f537822108330b09bbb60d5693494161e0d8a081
[apex-tripleo-heat-templates.git] / puppet / controller.yaml
1 heat_template_version: 2015-10-15
2
3 description: >
4   OpenStack controller node configured by Puppet.
5
6 parameters:
7   AdminEmail:
8     default: 'admin@example.com'
9     description: The email for the keystone admin account.
10     type: string
11     hidden: true
12   AdminPassword:
13     description: The password for the keystone admin account, used for monitoring, querying neutron etc.
14     type: string
15     hidden: true
16   AdminToken:
17     description: The keystone auth secret and db password.
18     type: string
19     hidden: true
20   CeilometerApiVirtualIP:
21     type: string
22     default: ''
23   CeilometerBackend:
24     default: 'mongodb'
25     description: The ceilometer backend type.
26     type: string
27   CeilometerMeteringSecret:
28     description: Secret shared by the ceilometer services.
29     type: string
30     hidden: true
31   CeilometerPassword:
32     description: The password for the ceilometer service  and db account.
33     type: string
34     hidden: true
35   CinderApiVirtualIP:
36     type: string
37     default: ''
38   CeilometerWorkers:
39     default: 0
40     description: Number of workers for Ceilometer service.
41     type: number
42   CinderEnableDBPurge:
43     default: true
44     description: |
45       Whether to create cron job for purging soft deleted rows in Cinder database.
46     type: boolean
47   CinderEnableNfsBackend:
48     default: false
49     description: Whether to enable or not the NFS backend for Cinder
50     type: boolean
51   CinderEnableIscsiBackend:
52     default: true
53     description: Whether to enable or not the Iscsi backend for Cinder
54     type: boolean
55   CinderEnableRbdBackend:
56     default: false
57     description: Whether to enable or not the Rbd backend for Cinder
58     type: boolean
59   CinderISCSIHelper:
60     default: tgtadm
61     description: The iSCSI helper to use with cinder.
62     type: string
63   CinderLVMLoopDeviceSize:
64     default: 5000
65     description: The size of the loopback file used by the cinder LVM driver.
66     type: number
67   CinderNfsMountOptions:
68     default: ''
69     description: >
70       Mount options for NFS mounts used by Cinder NFS backend. Effective
71       when CinderEnableNfsBackend is true.
72     type: string
73   CinderNfsServers:
74     default: ''
75     description: >
76       NFS servers used by Cinder NFS backend. Effective when
77       CinderEnableNfsBackend is true.
78     type: comma_delimited_list
79   CinderPassword:
80     description: The password for the cinder service and db account, used by cinder-api.
81     type: string
82     hidden: true
83   CinderBackendConfig:
84     default: {}
85     description: Contains parameters to configure Cinder backends. Typically
86                  set via parameter_defaults in the resource registry.
87     type: json
88   CinderWorkers:
89     default: 0
90     description: Number of workers for Cinder service.
91     type: number
92   CloudName:
93     default: overcloud
94     description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
95     type: string
96   ControllerExtraConfig:
97     default: {}
98     description: |
99       Controller specific hiera configuration data to inject into the cluster.
100     type: json
101   ControllerIPs:
102     default: {}
103     description: >
104       A network mapped list of IPs to assign to Controllers in the following form:
105       {
106         "internal_api": ["a.b.c.d", "e.f.g.h"],
107         ...
108       }
109     type: json
110   ControlVirtualInterface:
111     default: 'br-ex'
112     description: Interface where virtual ip will be assigned.
113     type: string
114   Debug:
115     default: ''
116     description: Set to True to enable debugging on all services.
117     type: string
118   EnableFencing:
119     default: false
120     description: Whether to enable fencing in Pacemaker or not.
121     type: boolean
122   EnableGalera:
123     default: true
124     description: Whether to use Galera instead of regular MariaDB.
125     type: boolean
126   EnableLoadBalancer:
127     default: true
128     description: Whether to deploy a LoadBalancer on the Controller
129     type: boolean
130   EnableCephStorage:
131     default: false
132     description: Whether to deploy Ceph Storage (OSD) on the Controller
133     type: boolean
134   EnableSwiftStorage:
135     default: true
136     description: Whether to enable Swift Storage on the Controller
137     type: boolean
138   ExtraConfig:
139     default: {}
140     description: |
141       Additional hieradata to inject into the cluster, note that
142       ControllerExtraConfig takes precedence over ExtraConfig.
143     type: json
144   FencingConfig:
145     default: {}
146     description: |
147       Pacemaker fencing configuration. The JSON should have
148       the following structure:
149         {
150           "devices": [
151             {
152               "agent": "AGENT_NAME",
153               "host_mac": "HOST_MAC_ADDRESS",
154               "params": {"PARAM_NAME": "PARAM_VALUE"}
155             }
156           ]
157         }
158       For instance:
159         {
160           "devices": [
161             {
162               "agent": "fence_xvm",
163               "host_mac": "52:54:00:aa:bb:cc",
164               "params": {
165                 "multicast_address": "225.0.0.12",
166                 "port": "baremetal_0",
167                 "manage_fw": true,
168                 "manage_key_file": true,
169                 "key_file": "/etc/fence_xvm.key",
170                 "key_file_password": "abcdef"
171               }
172             }
173           ]
174         }
175     type: json
176   Flavor:
177     description: Flavor for control nodes to request when deploying.
178     type: string
179     constraints:
180       - custom_constraint: nova.flavor
181   GlanceNotifierStrategy:
182     description: Strategy to use for Glance notification queue
183     type: string
184     default: noop
185   GlanceLogFile:
186     description: The filepath of the file to use for logging messages from Glance.
187     type: string
188     default: ''
189   GlancePassword:
190     description: The password for the glance service and db account, used by the glance services.
191     type: string
192     hidden: true
193   GlanceBackend:
194     default: swift
195     description: The short name of the Glance backend to use. Should be one
196       of swift, rbd, or file
197     type: string
198     constraints:
199     - allowed_values: ['swift', 'file', 'rbd']
200   GlanceFilePcmkDevice:
201     default: ''
202     description: >
203       An exported storage device that should be mounted by Pacemaker
204       as Glance storage. Effective when GlanceFilePcmkManage is true.
205     type: string
206   GlanceFilePcmkFstype:
207     default: 'nfs'
208     description: >
209       Filesystem type for Pacemaker mount used as Glance storage.
210       Effective when GlanceFilePcmkManage is true.
211     type: string
212   GlanceFilePcmkManage:
213     default: false
214     description: >
215       Whether to make Glance file backend a mount managed by Pacemaker.
216       Effective when GlanceBackend is 'file'.
217     type: boolean
218   GlanceFilePcmkOptions:
219     default: ''
220     description: >
221       Mount options for Pacemaker mount used as Glance storage.
222       Effective when GlanceFilePcmkManage is true.
223     type: string
224   HAProxySyslogAddress:
225     default: /dev/log
226     description: Syslog address where HAproxy will send its log
227     type: string
228   GlanceWorkers:
229     default: 0
230     description: Number of workers for Glance service.
231     type: number
232   HeatPassword:
233     description: The password for the Heat service and db account, used by the Heat services.
234     type: string
235     hidden: true
236   HeatStackDomainAdminPassword:
237     description: Password for heat_domain_admin user.
238     type: string
239     hidden: true
240   HeatAuthEncryptionKey:
241     description: Auth encryption key for heat-engine
242     type: string
243     hidden: true
244   HorizonAllowedHosts:
245     default: '*'
246     description: A list of IP/Hostname allowed to connect to horizon
247     type: comma_delimited_list
248   HeatWorkers:
249     default: 0
250     description: Number of workers for Heat service.
251     type: number
252   HorizonSecret:
253     description: Secret key for Django
254     type: string
255     hidden: true
256   Image:
257     type: string
258     default: overcloud-control
259     constraints:
260       - custom_constraint: glance.image
261   ImageUpdatePolicy:
262     default: 'REBUILD_PRESERVE_EPHEMERAL'
263     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
264     type: string
265   InstanceNameTemplate:
266     default: 'instance-%08x'
267     description: Template string to be used to generate instance names
268     type: string
269   KeyName:
270     default: default
271     description: Name of an existing Nova key pair to enable SSH access to the instances
272     type: string
273     constraints:
274       - custom_constraint: nova.keypair
275   KeystoneCACertificate:
276     default: ''
277     description: Keystone self-signed certificate authority certificate.
278     type: string
279   KeystoneEnableDBPurge:
280     default: true
281     description: |
282         Whether to create cron job for purging soft deleted rows in Keystone database.
283     type: boolean
284   KeystoneSigningCertificate:
285     default: ''
286     description: Keystone certificate for verifying token validity.
287     type: string
288   KeystoneSigningKey:
289     default: ''
290     description: Keystone key for signing tokens.
291     type: string
292     hidden: true
293   KeystoneSSLCertificate:
294     default: ''
295     description: Keystone certificate for verifying token validity.
296     type: string
297   KeystoneSSLCertificateKey:
298     default: ''
299     description: Keystone key for signing tokens.
300     type: string
301     hidden: true
302   KeystoneNotificationDriver:
303     description: Comma-separated list of Oslo notification drivers used by Keystone
304     default: ['messaging']
305     type: comma_delimited_list
306   KeystoneNotificationFormat:
307     description: The Keystone notification format
308     default: 'basic'
309     type: string
310     constraints:
311       - allowed_values: [ 'basic', 'cadf' ]
312   KeystoneRegion:
313     type: string
314     default: 'regionOne'
315     description: Keystone region for endpoint
316   ManageFirewall:
317     default: false
318     description: Whether to manage IPtables rules.
319     type: boolean
320   PurgeFirewallRules:
321     default: false
322     description: Whether IPtables rules should be purged before setting up the new ones.
323     type: boolean
324   KeystoneWorkers:
325     default: 0
326     description: Number of workers for Keystone service.
327     type: number
328   SaharaApiVirtualIP:
329     type: string
330     default: ''
331   SaharaPassword:
332     default: unset
333     description: The password for the sahara service account, used by sahara-api.
334     type: string
335     hidden: true
336   MysqlClusterUniquePart:
337     description: A unique identifier of the MySQL cluster the controller is in.
338     type: string
339     default: 'unset'  # Has to be here because of the ignored empty value bug
340     # Drop the validation: https://bugs.launchpad.net/tripleo/+bug/1405446
341     # constraints:
342     # - length: {min: 4, max: 10}
343   MysqlInnodbBufferPoolSize:
344     description: >
345         Specifies the size of the buffer pool in megabytes. Setting to
346         zero should be interpreted as "no value" and will defer to the
347         lower level default.
348     type: number
349     default: 0
350   MysqlMaxConnections:
351     description: Configures MySQL max_connections config setting
352     type: number
353     default: 4096
354   MysqlRootPassword:
355     type: string
356     hidden: true
357     default: ''  # Has to be here because of the ignored empty value bug
358   NeutronExternalNetworkBridge:
359     description: Name of bridge used for external network traffic.
360     type: string
361     default: 'br-ex'
362   NeutronBridgeMappings:
363     description: >
364       The OVS logical->physical bridge mappings to use. See the Neutron
365       documentation for details. Defaults to mapping br-ex - the external
366       bridge on hosts - to a physical name 'datacentre' which can be used
367       to create provider networks (and we use this for the default floating
368       network) - if changing this either use different post-install network
369       scripts or be sure to keep 'datacentre' as a mapping network name.
370     type: comma_delimited_list
371     default: "datacentre:br-ex"
372   NeutronDnsmasqOptions:
373     default: 'dhcp-option-force=26,1400'
374     description: Dnsmasq options for neutron-dhcp-agent. The default value here forces MTU to be set to 1400 to account for the gre tunnel overhead.
375     type: string
376   NeutronEnableDHCPAgent:
377     description: Knob to enable/disable DHCP Agent
378     type: boolean
379     default: true
380   NeutronEnableL3Agent:
381     description: Knob to enable/disable L3 agent
382     type: boolean
383     default: true
384   NeutronEnableMetadataAgent:
385     description: Knob to enable/disable Metadata agent
386     type: boolean
387     default: true
388   NeutronEnableOVSAgent:
389     description: Knob to enable/disable OVS Agent
390     type: boolean
391     default: true
392   NeutronAgentMode:
393     default: 'dvr_snat'
394     description: Agent mode for the neutron-l3-agent on the controller hosts
395     type: string
396   NeutronL3HA:
397     default: 'False'
398     description: Whether to enable l3-agent HA
399     type: string
400   NeutronDhcpAgentsPerNetwork:
401     type: number
402     default: 3
403     description: The number of neutron dhcp agents to schedule per network
404   NeutronDVR:
405     default: 'False'
406     description: Whether to configure Neutron Distributed Virtual Routers
407     type: string
408   NeutronMetadataProxySharedSecret:
409     description: Shared secret to prevent spoofing
410     type: string
411     hidden: true
412   NeutronCorePlugin:
413     default: 'ml2'
414     description: |
415         The core plugin for Neutron. The value should be the entrypoint to be loaded
416         from neutron.core_plugins namespace.
417     type: string
418   NeutronServicePlugins:
419     default: "router,qos"
420     description: |
421         Comma-separated list of service plugin entrypoints to be loaded from the
422         neutron.service_plugins namespace.
423     type: comma_delimited_list
424   NeutronTypeDrivers:
425     default: "vxlan,vlan,flat,gre"
426     description: |
427         Comma-separated list of network type driver entrypoints to be loaded.
428     type: comma_delimited_list
429   NeutronMechanismDrivers:
430     default: 'openvswitch'
431     description: |
432         The mechanism drivers for the Neutron tenant network.
433     type: comma_delimited_list
434   NeutronAllowL3AgentFailover:
435     default: 'True'
436     description: Allow automatic l3-agent failover
437     type: string
438   NeutronEnableIsolatedMetadata:
439     default: 'False'
440     description: If True, DHCP provide metadata route to VM.
441     type: string
442   NeutronEnableTunnelling:
443     type: string
444     default: "True"
445   NeutronEnableL2Pop:
446     type: string
447     description: >
448         Enable/disable the L2 population feature in the Neutron agents.
449     default: "False"
450   NeutronFlatNetworks:
451     type: comma_delimited_list
452     default: 'datacentre'
453     description: If set, flat networks to configure in neutron plugins.
454   NeutronL3HA:
455     default: 'False'
456     description: Whether to enable l3-agent HA
457     type: string
458   NeutronNetworkType:
459     default: 'vxlan'
460     description: The tenant network type for Neutron.
461     type: comma_delimited_list
462   NeutronNetworkVLANRanges:
463     default: 'datacentre:1:1000'
464     description: >
465       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
466       Neutron documentation for permitted values. Defaults to permitting any
467       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
468     type: comma_delimited_list
469   NeutronPassword:
470     description: The password for the neutron service and db account, used by neutron agents.
471     type: string
472     hidden: true
473   NeutronPublicInterface:
474     default: nic1
475     description: What interface to bridge onto br-ex for network nodes.
476     type: string
477   NeutronPublicInterfaceTag:
478     default: ''
479     description: >
480       VLAN tag for creating a public VLAN. The tag will be used to
481       create an access port on the exterior bridge for each control plane node,
482       and that port will be given the IP address returned by neutron from the
483       public network. Set CONTROLEXTRA=overcloud-vlan-port.yaml when compiling
484       overcloud.yaml to include the deployment of VLAN ports to the control
485       plane.
486     type: string
487   NeutronPublicInterfaceDefaultRoute:
488     default: ''
489     description: A custom default route for the NeutronPublicInterface.
490     type: string
491   NeutronPublicInterfaceIP:
492     default: ''
493     description: A custom IP address to put onto the NeutronPublicInterface.
494     type: string
495   NeutronPublicInterfaceRawDevice:
496     default: ''
497     description: If set, the public interface is a vlan with this device as the raw device.
498     type: string
499   NeutronTunnelTypes:
500     default: 'vxlan'
501     description: |
502         The tunnel types for the Neutron tenant network.
503     type: comma_delimited_list
504   NeutronTunnelIdRanges:
505     description: |
506         Comma-separated list of <tun_min>:<tun_max> tuples enumerating ranges
507         of GRE tunnel IDs that are available for tenant network allocation
508     default: ["1:1000", ]
509     type: comma_delimited_list
510   NeutronVniRanges:
511     description: |
512         Comma-separated list of <vni_min>:<vni_max> tuples enumerating ranges
513         of VXLAN VNI IDs that are available for tenant network allocation
514     default: ["1:1000", ]
515     type: comma_delimited_list
516   NeutronPluginExtensions:
517     default: "qos"
518     description: |
519         Comma-separated list of extensions enabled for the Neutron plugin.
520     type: comma_delimited_list
521   NeutronAgentExtensions:
522     default: "qos"
523     description: |
524         Comma-separated list of extensions enabled for the Neutron agents.
525     type: comma_delimited_list
526   NovaApiVirtualIP:
527     type: string
528     default: ''
529   NeutronWorkers:
530     default: 0
531     description: Number of workers for Neutron service.
532     type: number
533   NovaEnableDBPurge:
534     default: true
535     description: |
536         Whether to create cron job for purging soft deleted rows in Nova database.
537     type: boolean
538   NovaPassword:
539     description: The password for the nova service and db account, used by nova-api.
540     type: string
541     hidden: true
542   NovaWorkers:
543     default: 0
544     description: Number of workers for Nova service.
545     type: number
546   MongoDbNoJournal:
547     default: false
548     description: Should MongoDb journaling be disabled
549     type: boolean
550   NtpServer:
551     default: ''
552     description: Comma-separated list of ntp servers
553     type: comma_delimited_list
554   PcsdPassword:
555     type: string
556     description: The password for the 'pcsd' user.
557     hidden: true
558   PublicVirtualInterface:
559     default: 'br-ex'
560     description: >
561         Specifies the interface where the public-facing virtual ip will be assigned.
562         This should be int_public when a VLAN is being used.
563     type: string
564   PublicVirtualIP:
565     type: string
566     default: ''  # Has to be here because of the ignored empty value bug
567   RabbitCookie:
568     type: string
569     default: ''  # Has to be here because of the ignored empty value bug
570     hidden: true
571   RabbitPassword:
572     default: guest
573     description: The password for RabbitMQ
574     type: string
575     hidden: true
576   RabbitUserName:
577     default: guest
578     description: The username for RabbitMQ
579     type: string
580   RabbitClientUseSSL:
581     default: false
582     description: >
583         Rabbit client subscriber parameter to specify
584         an SSL connection to the RabbitMQ host.
585     type: string
586   RabbitClientPort:
587     default: 5672
588     description: Set rabbit subscriber port, change this if using SSL
589     type: number
590   RabbitFDLimit:
591     default: 16384
592     description: Configures RabbitMQ FD limit
593     type: string
594   RedisVirtualIP:
595     type: string
596     default: ''  # Has to be here because of the ignored empty value bug
597   SnmpdReadonlyUserName:
598     default: ro_snmp_user
599     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
600     type: string
601   SnmpdReadonlyUserPassword:
602     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
603     type: string
604     hidden: true
605   SwiftHashSuffix:
606     description: A random string to be used as a salt when hashing to determine mappings
607       in the ring.
608     hidden: true
609     type: string
610   SwiftMountCheck:
611     default: 'false'
612     description: Value of mount_check in Swift account/container/object -server.conf
613     type: boolean
614   SwiftMinPartHours:
615     type: number
616     default: 1
617     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
618   SwiftPartPower:
619     default: 10
620     description: Partition Power to use when building Swift rings
621     type: number
622   SwiftPassword:
623     description: The password for the swift service account, used by the swift proxy
624       services.
625     hidden: true
626     type: string
627   SwiftProxyVirtualIP:
628     type: string
629     default: ''
630   SwiftReplicas:
631     type: number
632     default: 3
633     description: How many replicas to use in the swift rings.
634   SwiftWorkers:
635     default: 0
636     description: Number of workers for Swift service.
637     type: number
638   TimeZone:
639     default: 'UTC'
640     description: The timezone to be set on controller nodes.
641     type: string
642   VirtualIP: # DEPRECATED: use per service settings instead
643     type: string
644     default: ''  # Has to be here because of the ignored empty value bug
645   HeatApiVirtualIP:
646     type: string
647     default: ''
648   GlanceApiVirtualIP:
649     type: string
650     default: ''
651   GlanceRegistryVirtualIP:
652     type: string
653     default: ''
654   MysqlVirtualIP:
655     type: string
656     default: ''
657   KeystoneAdminApiVirtualIP:
658     type: string
659     default: ''
660   KeystonePublicApiVirtualIP:
661     type: string
662     default: ''
663   NeutronApiVirtualIP:
664     type: string
665     default: ''
666   EnablePackageInstall:
667     default: 'false'
668     description: Set to true to enable package installation via Puppet
669     type: boolean
670   ServiceNetMap:
671     default: {}
672     description: Mapping of service_name -> network name. Typically set
673                  via parameter_defaults in the resource registry.
674     type: json
675   EndpointMap:
676     default: {}
677     description: Mapping of service endpoint -> protocol. Typically set
678                  via parameter_defaults in the resource registry.
679     type: json
680   UpdateIdentifier:
681     default: ''
682     type: string
683     description: >
684       Setting to a previously unused value during stack-update will trigger
685       package update on all nodes
686   Hostname:
687     type: string
688     default: '' # Defaults to Heat created hostname
689   NetworkDeploymentActions:
690     type: comma_delimited_list
691     description: >
692       Heat action when to apply network configuration changes
693     default: ['CREATE']
694   NodeIndex:
695     type: number
696     default: 0
697   SoftwareConfigTransport:
698     default: POLL_SERVER_CFN
699     description: |
700       How the server should receive the metadata required for software configuration.
701     type: string
702     constraints:
703     - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
704   CloudDomain:
705     default: ''
706     type: string
707     description: >
708       The DNS domain used for the hosts. This should match the dhcp_domain
709       configured in the Undercloud neutron. Defaults to localdomain.
710   ServerMetadata:
711     default: {}
712     description: >
713       Extra properties or metadata passed to Nova for the created nodes in
714       the overcloud. It's accessible via the Nova metadata API.
715     type: json
716   SchedulerHints:
717     type: json
718     description: Optional scheduler hints to pass to nova
719     default: {}
720
721 resources:
722
723   Controller:
724     type: OS::Nova::Server
725     properties:
726       image: {get_param: Image}
727       image_update_policy: {get_param: ImageUpdatePolicy}
728       flavor: {get_param: Flavor}
729       key_name: {get_param: KeyName}
730       networks:
731         - network: ctlplane
732       user_data_format: SOFTWARE_CONFIG
733       user_data: {get_resource: UserData}
734       name: {get_param: Hostname}
735       software_config_transport: {get_param: SoftwareConfigTransport}
736       metadata: {get_param: ServerMetadata}
737       scheduler_hints: {get_param: SchedulerHints}
738
739   # Combine the NodeAdminUserData and NodeUserData mime archives
740   UserData:
741     type: OS::Heat::MultipartMime
742     properties:
743       parts:
744       - config: {get_resource: NodeAdminUserData}
745         type: multipart
746       - config: {get_resource: NodeUserData}
747         type: multipart
748
749   # Creates the "heat-admin" user if configured via the environment
750   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
751   NodeAdminUserData:
752     type: OS::TripleO::NodeAdminUserData
753
754   # For optional operator additional userdata
755   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
756   NodeUserData:
757     type: OS::TripleO::NodeUserData
758
759   ExternalPort:
760     type: OS::TripleO::Controller::Ports::ExternalPort
761     properties:
762       IPPool: {get_param: ControllerIPs}
763       NodeIndex: {get_param: NodeIndex}
764       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
765
766   InternalApiPort:
767     type: OS::TripleO::Controller::Ports::InternalApiPort
768     properties:
769       IPPool: {get_param: ControllerIPs}
770       NodeIndex: {get_param: NodeIndex}
771       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
772
773   StoragePort:
774     type: OS::TripleO::Controller::Ports::StoragePort
775     properties:
776       IPPool: {get_param: ControllerIPs}
777       NodeIndex: {get_param: NodeIndex}
778       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
779
780   StorageMgmtPort:
781     type: OS::TripleO::Controller::Ports::StorageMgmtPort
782     properties:
783       IPPool: {get_param: ControllerIPs}
784       NodeIndex: {get_param: NodeIndex}
785       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
786
787   TenantPort:
788     type: OS::TripleO::Controller::Ports::TenantPort
789     properties:
790       IPPool: {get_param: ControllerIPs}
791       NodeIndex: {get_param: NodeIndex}
792       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
793
794   ManagementPort:
795     type: OS::TripleO::Controller::Ports::ManagementPort
796     properties:
797       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
798
799   NetIpMap:
800     type: OS::TripleO::Network::Ports::NetIpMap
801     properties:
802       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
803       ExternalIp: {get_attr: [ExternalPort, ip_address]}
804       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
805       StorageIp: {get_attr: [StoragePort, ip_address]}
806       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
807       TenantIp: {get_attr: [TenantPort, ip_address]}
808       ManagementIp: {get_attr: [ManagementPort, ip_address]}
809
810   NetIpSubnetMap:
811     type: OS::TripleO::Network::Ports::NetIpSubnetMap
812     properties:
813       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
814       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
815       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
816       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
817       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
818       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
819       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
820
821   NetworkConfig:
822     type: OS::TripleO::Controller::Net::SoftwareConfig
823     properties:
824       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
825       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
826       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
827       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
828       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
829       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
830       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
831
832   NetworkDeployment:
833     type: OS::TripleO::SoftwareDeployment
834     properties:
835       config: {get_resource: NetworkConfig}
836       server: {get_resource: Controller}
837       actions: {get_param: NetworkDeploymentActions}
838       input_values:
839         bridge_name: br-ex
840         interface_name: {get_param: NeutronPublicInterface}
841
842   # Resource for site-specific injection of root certificate
843   NodeTLSCAData:
844     depends_on: NetworkDeployment
845     type: OS::TripleO::NodeTLSCAData
846     properties:
847       server: {get_resource: Controller}
848
849   # Resource for site-specific passing of private keys/certificates
850   NodeTLSData:
851     depends_on: NodeTLSCAData
852     type: OS::TripleO::NodeTLSData
853     properties:
854       server: {get_resource: Controller}
855       NodeIndex: {get_param: NodeIndex}
856
857
858   ControllerDeployment:
859     type: OS::TripleO::SoftwareDeployment
860     depends_on: NetworkDeployment
861     properties:
862       config: {get_resource: ControllerConfig}
863       server: {get_resource: Controller}
864       input_values:
865         bootstack_nodeid: {get_attr: [Controller, name]}
866         ceilometer_workers: {get_param: CeilometerWorkers}
867         cinder_workers: {get_param: CinderWorkers}
868         glance_workers: {get_param: GlanceWorkers}
869         heat_workers: {get_param: HeatWorkers}
870         keystone_workers: {get_param: KeystoneWorkers}
871         nova_workers: {get_param: NovaWorkers}
872         neutron_workers: {get_param: NeutronWorkers}
873         swift_workers: {get_param: SwiftWorkers}
874         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
875         neutron_enable_l2pop: {get_param: NeutronEnableL2Pop}
876         neutron_enable_isolated_metadata: {get_param: NeutronEnableIsolatedMetadata}
877         haproxy_log_address: {get_param: HAProxySyslogAddress}
878         heat.watch_server_url:
879           list_join:
880             - ''
881             - - 'http://'
882               - {get_param: HeatApiVirtualIP}
883               - ':8003'
884         heat.metadata_server_url:
885           list_join:
886             - ''
887             - - 'http://'
888               - {get_param: HeatApiVirtualIP}
889               - ':8000'
890         heat.waitcondition_server_url:
891           list_join:
892             - ''
893             - - 'http://'
894               - {get_param: HeatApiVirtualIP}
895               - ':8000/v1/waitcondition'
896         heat_auth_encryption_key: {get_param: HeatAuthEncryptionKey}
897         horizon_allowed_hosts: {get_param: HorizonAllowedHosts}
898         horizon_secret: {get_param: HorizonSecret}
899         admin_email: {get_param: AdminEmail}
900         admin_password: {get_param: AdminPassword}
901         admin_token: {get_param: AdminToken}
902         neutron_public_interface_ip: {get_param: NeutronPublicInterfaceIP}
903         debug: {get_param: Debug}
904         cinder_enable_db_purge: {get_param: CinderEnableDBPurge}
905         cinder_enable_nfs_backend: {get_param: CinderEnableNfsBackend}
906         cinder_enable_rbd_backend: {get_param: CinderEnableRbdBackend}
907         cinder_nfs_mount_options: {get_param: CinderNfsMountOptions}
908         cinder_nfs_servers:
909           str_replace:
910             template: SERVERS
911             params:
912               SERVERS: {get_param: CinderNfsServers}
913         cinder_lvm_loop_device_size: {get_param: CinderLVMLoopDeviceSize}
914         cinder_password: {get_param: CinderPassword}
915         cinder_enable_iscsi_backend: {get_param: CinderEnableIscsiBackend}
916         cinder_iscsi_helper: {get_param: CinderISCSIHelper}
917         cinder_backend_config: {get_param: CinderBackendConfig}
918         cinder_dsn:
919           list_join:
920             - ''
921             - - 'mysql+pymysql://cinder:'
922               - {get_param: CinderPassword}
923               - '@'
924               - {get_param: MysqlVirtualIP}
925               - '/cinder'
926         glance_port: {get_param: [EndpointMap, GlanceInternal, port]}
927         glance_password: {get_param: GlancePassword}
928         glance_backend: {get_param: GlanceBackend}
929         glance_file_pcmk_device: {get_param: GlanceFilePcmkDevice}
930         glance_file_pcmk_fstype: {get_param: GlanceFilePcmkFstype}
931         glance_file_pcmk_manage: {get_param: GlanceFilePcmkManage}
932         glance_file_pcmk_options: {get_param: GlanceFilePcmkOptions}
933         glance_notifier_strategy: {get_param: GlanceNotifierStrategy}
934         glance_log_file: {get_param: GlanceLogFile}
935         glance_dsn:
936           list_join:
937             - ''
938             - - 'mysql+pymysql://glance:'
939               - {get_param: GlancePassword}
940               - '@'
941               - {get_param: MysqlVirtualIP}
942               - '/glance'
943         heat_password: {get_param: HeatPassword}
944         heat_stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
945         heat_dsn:
946           list_join:
947             - ''
948             - - 'mysql+pymysql://heat:'
949               - {get_param: HeatPassword}
950               - '@'
951               - {get_param: MysqlVirtualIP}
952               - '/heat'
953         keystone_ca_certificate: {get_param: KeystoneCACertificate}
954         keystone_signing_key: {get_param: KeystoneSigningKey}
955         keystone_signing_certificate: {get_param: KeystoneSigningCertificate}
956         keystone_ssl_certificate: {get_param: KeystoneSSLCertificate}
957         keystone_ssl_certificate_key: {get_param: KeystoneSSLCertificateKey}
958         keystone_notification_driver: {get_param: KeystoneNotificationDriver}
959         keystone_notification_format: {get_param: KeystoneNotificationFormat}
960         keystone_enable_db_purge: {get_param: KeystoneEnableDBPurge}
961         keystone_dsn:
962           list_join:
963             - ''
964             - - 'mysql+pymysql://keystone:'
965               - {get_param: AdminToken}
966               - '@'
967               - {get_param: MysqlVirtualIP}
968               - '/keystone'
969         keystone_identity_uri: { get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix] }
970         keystone_auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri] }
971         keystone_public_url: { get_param: [EndpointMap, KeystonePublic, uri_no_suffix] }
972         keystone_internal_url: { get_param: [EndpointMap, KeystoneInternal, uri_no_suffix] }
973         keystone_ec2_uri: { get_param: [EndpointMap, KeystoneEC2, uri] }
974         enable_fencing: {get_param: EnableFencing}
975         enable_galera: {get_param: EnableGalera}
976         enable_load_balancer: {get_param: EnableLoadBalancer}
977         enable_ceph_storage: {get_param: EnableCephStorage}
978         enable_swift_storage: {get_param: EnableSwiftStorage}
979         manage_firewall: {get_param: ManageFirewall}
980         purge_firewall_rules: {get_param: PurgeFirewallRules}
981         mysql_innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
982         mysql_max_connections: {get_param: MysqlMaxConnections}
983         mysql_root_password: {get_param: MysqlRootPassword}
984         mysql_cluster_name:
985           str_replace:
986             template: tripleo-CLUSTER
987             params:
988               CLUSTER: {get_param: MysqlClusterUniquePart}
989         neutron_flat_networks:
990           str_replace:
991             template: NETWORKS
992             params:
993               NETWORKS: {get_param: NeutronFlatNetworks}
994         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
995         neutron_agent_mode: {get_param: NeutronAgentMode}
996         neutron_router_distributed: {get_param: NeutronDVR}
997         neutron_core_plugin: {get_param: NeutronCorePlugin}
998         neutron_service_plugins:
999           str_replace:
1000             template: PLUGINS
1001             params:
1002               PLUGINS: {get_param: NeutronServicePlugins}
1003         neutron_type_drivers:
1004           str_replace:
1005             template: DRIVERS
1006             params:
1007               DRIVERS: {get_param: NeutronTypeDrivers}
1008         neutron_enable_dhcp_agent: {get_param: NeutronEnableDHCPAgent}
1009         neutron_enable_l3_agent: {get_param: NeutronEnableL3Agent}
1010         neutron_enable_metadata_agent: {get_param: NeutronEnableMetadataAgent}
1011         neutron_enable_ovs_agent: {get_param: NeutronEnableOVSAgent}
1012         neutron_mechanism_drivers:
1013           str_replace:
1014             template: MECHANISMS
1015             params:
1016               MECHANISMS: {get_param: NeutronMechanismDrivers}
1017         neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
1018         neutron_l3_ha: {get_param: NeutronL3HA}
1019         neutron_dhcp_agents_per_network: {get_param: NeutronDhcpAgentsPerNetwork}
1020         neutron_network_vlan_ranges:
1021           str_replace:
1022             template: RANGES
1023             params:
1024               RANGES: {get_param: NeutronNetworkVLANRanges}
1025         neutron_bridge_mappings:
1026           str_replace:
1027             template: MAPPINGS
1028             params:
1029               MAPPINGS: {get_param: NeutronBridgeMappings}
1030         neutron_external_network_bridge: {get_param: NeutronExternalNetworkBridge}
1031         neutron_public_interface: {get_param: NeutronPublicInterface}
1032         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
1033         neutron_public_interface_default_route: {get_param: NeutronPublicInterfaceDefaultRoute}
1034         neutron_public_interface_tag: {get_param: NeutronPublicInterfaceTag}
1035         neutron_tunnel_id_ranges:
1036           str_replace:
1037             template: RANGES
1038             params:
1039               RANGES: {get_param: NeutronTunnelIdRanges}
1040         neutron_vni_ranges:
1041           str_replace:
1042             template: RANGES
1043             params:
1044               RANGES: {get_param: NeutronVniRanges}
1045         neutron_tenant_network_types:
1046           str_replace:
1047             template: TYPES
1048             params:
1049               TYPES: {get_param: NeutronNetworkType}
1050         neutron_tunnel_types:
1051           str_replace:
1052             template: TYPES
1053             params:
1054               TYPES: {get_param: NeutronTunnelTypes}
1055         neutron_plugin_extensions:
1056           str_replace:
1057             template: PLUGIN_EXTENSIONS
1058             params:
1059               PLUGIN_EXTENSIONS: {get_param: NeutronPluginExtensions}
1060         neutron_agent_extensions:
1061           str_replace:
1062             template: AGENT_EXTENSIONS
1063             params:
1064               AGENT_EXTENSIONS: {get_param: NeutronAgentExtensions}
1065         neutron_password: {get_param: NeutronPassword}
1066         neutron_dnsmasq_options: {get_param: NeutronDnsmasqOptions}
1067         neutron_dsn:
1068           list_join:
1069             - ''
1070             - - 'mysql+pymysql://neutron:'
1071               - {get_param: NeutronPassword}
1072               - '@'
1073               - {get_param: MysqlVirtualIP}
1074               - '/ovs_neutron?charset=utf8'
1075         neutron_internal_url: { get_param: [ EndpointMap, NeutronInternal, uri ] }
1076         neutron_public_url: { get_param: [ EndpointMap, NeutronPublic, uri ] }
1077         neutron_admin_url: { get_param: [ EndpointMap, NeutronAdmin, uri ] }
1078         neutron_admin_auth_url: { get_param: [ EndpointMap, KeystoneAdmin, uri ] }
1079         nova_internal_url: { get_param: [ EndpointMap, NovaInternal, uri ] }
1080         ceilometer_backend: {get_param: CeilometerBackend}
1081         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
1082         ceilometer_password: {get_param: CeilometerPassword}
1083         ceilometer_coordination_url:
1084           list_join:
1085             - ''
1086             - - 'redis://'
1087               - {get_param: RedisVirtualIP}
1088               - ':6379'
1089         ceilometer_dsn:
1090           list_join:
1091             - ''
1092             - - 'mysql+pymysql://ceilometer:'
1093               - {get_param: CeilometerPassword}
1094               - '@'
1095               - {get_param: MysqlVirtualIP}
1096               - '/ceilometer'
1097         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
1098         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
1099         nova_enable_db_purge: {get_param: NovaEnableDBPurge}
1100         nova_password: {get_param: NovaPassword}
1101         nova_dsn:
1102           list_join:
1103             - ''
1104             - - 'mysql+pymysql://nova:'
1105               - {get_param: NovaPassword}
1106               - '@'
1107               - {get_param: MysqlVirtualIP}
1108               - '/nova'
1109         instance_name_template: {get_param: InstanceNameTemplate}
1110         fencing_config: {get_param: FencingConfig}
1111         pcsd_password: {get_param: PcsdPassword}
1112         rabbit_username: {get_param: RabbitUserName}
1113         rabbit_password: {get_param: RabbitPassword}
1114         rabbit_cookie: {get_param: RabbitCookie}
1115         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
1116         rabbit_client_port: {get_param: RabbitClientPort}
1117         mongodb_no_journal: {get_param: MongoDbNoJournal}
1118         # We need to force this into quotes or hiera will return integer causing
1119         # the puppet module validation regexp to fail.
1120         # Remove when: https://github.com/puppetlabs/puppetlabs-rabbitmq/pull/401
1121         rabbit_fd_limit:
1122           str_replace:
1123             template: "'LIMIT'"
1124             params:
1125               LIMIT: {get_param: RabbitFDLimit}
1126         ntp_servers: {get_param: NtpServer}
1127         timezone: {get_param: TimeZone}
1128         control_virtual_interface: {get_param: ControlVirtualInterface}
1129         public_virtual_interface: {get_param: PublicVirtualInterface}
1130         swift_hash_suffix: {get_param: SwiftHashSuffix}
1131         swift_password: {get_param: SwiftPassword}
1132         swift_part_power: {get_param: SwiftPartPower}
1133         swift_replicas: {get_param: SwiftReplicas}
1134         swift_min_part_hours: {get_param: SwiftMinPartHours}
1135         swift_mount_check: {get_param: SwiftMountCheck}
1136         enable_package_install: {get_param: EnablePackageInstall}
1137         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
1138         sahara_password: {get_param: SaharaPassword}
1139         sahara_dsn:
1140           list_join:
1141             - ''
1142             - - 'mysql://sahara:'
1143               - {get_param: SaharaPassword}
1144               - '@'
1145               - {get_param: MysqlVirtualIP}
1146               - '/sahara'
1147         swift_proxy_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1148         swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
1149         cinder_iscsi_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderIscsiNetwork]}]}
1150         cinder_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1151         glance_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1152         glance_registry_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1153         glance_api_servers: { get_param: [EndpointMap, GlanceInternal, uri]}
1154         glance_registry_host: {get_param: GlanceRegistryVirtualIP}
1155         heat_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1156         keystone_public_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1157         keystone_admin_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1158         keystone_region: {get_param: KeystoneRegion}
1159         mongo_db_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
1160         neutron_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1161         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
1162         ceilometer_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1163         nova_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1164         nova_metadata_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1165         horizon_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1166         rabbitmq_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1167         redis_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
1168         redis_vip: {get_param: RedisVirtualIP}
1169         sahara_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1170         memcached_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
1171         mysql_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1172         mysql_virtual_ip: {get_param: MysqlVirtualIP}
1173         ceph_cluster_network: {get_attr: [NetIpSubnetMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephClusterNetwork]}]}
1174         ceph_public_network: {get_attr: [NetIpSubnetMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
1175         ceph_public_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
1176
1177   # Map heat metadata into hiera datafiles
1178   ControllerConfig:
1179     type: OS::Heat::StructuredConfig
1180     properties:
1181       group: os-apply-config
1182       config:
1183         hiera:
1184           hierarchy:
1185             - '"%{::uuid}"'
1186             - heat_config_%{::deploy_config_name}
1187             - controller_extraconfig
1188             - extraconfig
1189             - controller
1190             - database
1191             - object
1192             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
1193             - ceph_cluster # provided by CephClusterConfig
1194             - ceph
1195             - bootstrap_node # provided by BootstrapNodeConfig
1196             - all_nodes # provided by allNodesConfig
1197             - vip_data # provided by vip-config
1198             - '"%{::osfamily}"'
1199             - common
1200             - cinder_dellsc_data # Optionally provided by ControllerExtraConfigPre
1201             - cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
1202             - cinder_eqlx_data # Optionally provided by ControllerExtraConfigPre
1203             - neutron_bigswitch_data # Optionally provided by ControllerExtraConfigPre
1204             - neutron_cisco_data # Optionally provided by ControllerExtraConfigPre
1205             - cisco_n1kv_data # Optionally provided by ControllerExtraConfigPre
1206             - neutron_nuage_data # Optionally provided by ControllerExtraConfigPre
1207             - midonet_data #Optionally provided by AllNodesExtraConfig
1208           datafiles:
1209             controller_extraconfig:
1210               mapped_data: {get_param: ControllerExtraConfig}
1211             extraconfig:
1212               mapped_data: {get_param: ExtraConfig}
1213             common:
1214               raw_data: {get_file: hieradata/common.yaml}
1215             ceph:
1216               raw_data: {get_file: hieradata/ceph.yaml}
1217               mapped_data:
1218                 ceph::profile::params::cluster_network: {get_input: ceph_cluster_network}
1219                 ceph::profile::params::public_network: {get_input: ceph_public_network}
1220                 ceph::mon::public_addr: {get_input: ceph_public_ip}
1221             database:
1222               raw_data: {get_file: hieradata/database.yaml}
1223             object:
1224               raw_data: {get_file: hieradata/object.yaml}
1225             controller:
1226               raw_data: {get_file: hieradata/controller.yaml}
1227               mapped_data: # data supplied directly to this deployment configuration, etc
1228                 bootstack_nodeid: {get_input: bootstack_nodeid}
1229
1230                 # Pacemaker
1231                 enable_fencing: {get_input: enable_fencing}
1232                 enable_load_balancer: {get_input: enable_load_balancer}
1233                 hacluster_pwd: {get_input: pcsd_password}
1234                 tripleo::fencing::config: {get_input: fencing_config}
1235
1236                 # Swift
1237                 swift::proxy::proxy_local_net_ip: {get_input: swift_proxy_network}
1238                 swift::proxy::authtoken::auth_uri: {get_input: keystone_auth_uri}
1239                 swift::proxy::authtoken::identity_uri: {get_input: keystone_identity_uri}
1240                 swift::storage::all::storage_local_net_ip: {get_input: swift_management_network}
1241                 swift::swift_hash_suffix: {get_input: swift_hash_suffix}
1242                 swift::proxy::authtoken::admin_password: {get_input: swift_password}
1243                 swift::proxy::workers: {get_input: swift_workers}
1244                 tripleo::ringbuilder::part_power: {get_input: swift_part_power}
1245                 tripleo::ringbuilder::replicas: {get_input: swift_replicas}
1246                 tripleo::ringbuilder::min_part_hours: {get_input: swift_min_part_hours}
1247                 swift_mount_check: {get_input: swift_mount_check}
1248
1249                 # NOTE(dprince): build_ring support is currently not wired in.
1250                 # See: https://review.openstack.org/#/c/109225/
1251                 tripleo::ringbuilder::build_ring: True
1252
1253                 # Cinder
1254                 cinder_enable_db_purge: {get_input: cinder_enable_db_purge}
1255                 cinder_enable_nfs_backend: {get_input: cinder_enable_nfs_backend}
1256                 cinder_enable_rbd_backend: {get_input: cinder_enable_rbd_backend}
1257                 cinder_nfs_mount_options: {get_input: cinder_nfs_mount_options}
1258                 cinder_nfs_servers: {get_input: cinder_nfs_servers}
1259                 cinder_lvm_loop_device_size: {get_input: cinder_lvm_loop_device_size}
1260                 cinder_iscsi_helper: {get_input: cinder_iscsi_helper}
1261                 cinder_iscsi_ip_address: {get_input: cinder_iscsi_network}
1262                 cinder::database_connection: {get_input: cinder_dsn}
1263                 cinder::api::keystone_password: {get_input: cinder_password}
1264                 cinder::api::auth_uri: {get_input: keystone_auth_uri}
1265                 cinder::api::identity_uri: {get_input: keystone_identity_uri}
1266                 cinder::api::bind_host: {get_input: cinder_api_network}
1267                 cinder::rabbit_userid: {get_input: rabbit_username}
1268                 cinder::rabbit_password: {get_input: rabbit_password}
1269                 cinder::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1270                 cinder::rabbit_port: {get_input: rabbit_client_port}
1271                 cinder::debug: {get_input: debug}
1272                 cinder_enable_iscsi_backend: {get_input: cinder_enable_iscsi_backend}
1273                 cinder::glance::glance_api_servers: {get_input: glance_api_servers}
1274                 cinder_backend_config: {get_input: CinderBackendConfig}
1275                 cinder::db::mysql::password: {get_input: cinder_password}
1276
1277                 # Glance
1278                 glance::api::bind_port: {get_input: glance_port}
1279                 glance::api::bind_host: {get_input: glance_api_network}
1280                 glance::api::auth_uri: {get_input: keystone_auth_uri}
1281                 glance::api::identity_uri: {get_input: keystone_identity_uri}
1282                 glance::api::registry_host: {get_input: glance_registry_host}
1283                 glance::api::keystone_password: {get_input: glance_password}
1284                 glance::api::debug: {get_input: debug}
1285                 glance::api::workers: {get_input: glance_workers}
1286                 glance_notifier_strategy: {get_input: glance_notifier_strategy}
1287                 glance_log_file: {get_input: glance_log_file}
1288                 glance_log_file: {get_input: glance_log_file}
1289                 glance::api::database_connection: {get_input: glance_dsn}
1290                 glance::registry::keystone_password: {get_input: glance_password}
1291                 glance::registry::database_connection: {get_input: glance_dsn}
1292                 glance::registry::bind_host: {get_input: glance_registry_network}
1293                 glance::registry::auth_uri: {get_input: keystone_auth_uri}
1294                 glance::registry::identity_uri: {get_input: keystone_identity_uri}
1295                 glance::registry::debug: {get_input: debug}
1296                 glance::backend::swift::swift_store_auth_address: {get_input: keystone_auth_uri}
1297                 glance::registry::workers: {get_input: glance_workers}
1298                 glance::backend::swift::swift_store_user: service:glance
1299                 glance::backend::swift::swift_store_key: {get_input: glance_password}
1300                 glance_backend: {get_input: glance_backend}
1301                 glance::db::mysql::password: {get_input: glance_password}
1302                 glance_file_pcmk_device: {get_input: glance_file_pcmk_device}
1303                 glance_file_pcmk_fstype: {get_input: glance_file_pcmk_fstype}
1304                 glance_file_pcmk_manage: {get_input: glance_file_pcmk_manage}
1305                 glance_file_pcmk_options: {get_input: glance_file_pcmk_options}
1306
1307                 # Heat
1308                 heat_stack_domain_admin_password: {get_input: heat_stack_domain_admin_password}
1309                 heat::engine::heat_watch_server_url: {get_input: heat.watch_server_url}
1310                 heat::engine::heat_metadata_server_url: {get_input: heat.metadata_server_url}
1311                 heat::engine::heat_waitcondition_server_url: {get_input: heat.waitcondition_server_url}
1312                 heat::engine::auth_encryption_key: {get_input: heat_auth_encryption_key}
1313                 heat::rabbit_userid: {get_input: rabbit_username}
1314                 heat::rabbit_password: {get_input: rabbit_password}
1315                 heat::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1316                 heat::rabbit_port: {get_input: rabbit_client_port}
1317                 heat::auth_uri: {get_input: keystone_auth_uri}
1318                 heat::keystone_ec2_uri: {get_input: keystone_ec2_uri}
1319                 heat::identity_uri: {get_input: keystone_identity_uri}
1320                 heat::keystone_password: {get_input: heat_password}
1321                 heat::api::bind_host: {get_input: heat_api_network}
1322                 heat::api::workers: {get_input: heat_workers}
1323                 heat::api_cloudwatch::bind_host: {get_input: heat_api_network}
1324                 heat::api_cloudwatch::workers: {get_input: heat_workers}
1325                 heat::api_cfn::bind_host: {get_input: heat_api_network}
1326                 heat::api_cfn::workers: {get_input: heat_workers}
1327                 heat::database_connection: {get_input: heat_dsn}
1328                 heat::debug: {get_input: debug}
1329                 heat::db::mysql::password: {get_input: heat_password}
1330
1331                 # Keystone
1332                 keystone::admin_token: {get_input: admin_token}
1333                 keystone_ca_certificate: {get_input: keystone_ca_certificate}
1334                 keystone_signing_key: {get_input: keystone_signing_key}
1335                 keystone_signing_certificate: {get_input: keystone_signing_certificate}
1336                 keystone_ssl_certificate: {get_input: keystone_ssl_certificate}
1337                 keystone_ssl_certificate_key: {get_input: keystone_ssl_certificate_key}
1338                 keystone::database_connection: {get_input: keystone_dsn}
1339                 keystone::public_bind_host: {get_input: keystone_public_api_network}
1340                 keystone::admin_bind_host: {get_input: keystone_admin_api_network}
1341                 keystone::debug: {get_input: debug}
1342                 keystone::db::mysql::password: {get_input: admin_token}
1343                 keystone::rabbit_userid: {get_input: rabbit_username}
1344                 keystone::rabbit_password: {get_input: rabbit_password}
1345                 keystone::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1346                 keystone::rabbit_port: {get_input: rabbit_client_port}
1347                 keystone::notification_driver: {get_input: keystone_notification_driver}
1348                 keystone::notification_format: {get_input: keystone_notification_format}
1349                 keystone::roles::admin::email: {get_input: admin_email}
1350                 keystone::roles::admin::password: {get_input: admin_password}
1351                 keystone::endpoint::public_url: {get_input: keystone_public_url}
1352                 keystone::endpoint::internal_url: {get_input: keystone_internal_url}
1353                 keystone::endpoint::admin_url: {get_input: keystone_identity_uri}
1354                 keystone::endpoint::region: {get_input: keystone_region}
1355                 keystone::admin_workers: {get_input: keystone_workers}
1356                 keystone::public_workers: {get_input: keystone_workers}
1357                 keystone_enable_db_purge: {get_input: keystone_enable_db_purge}
1358
1359                 # MongoDB
1360                 mongodb::server::bind_ip: {get_input: mongo_db_network}
1361                 mongodb::server::nojournal: {get_input: mongodb_no_journal}
1362                 # MySQL
1363                 admin_password: {get_input: admin_password}
1364                 enable_galera: {get_input: enable_galera}
1365                 enable_ceph_storage: {get_input: enable_ceph_storage}
1366                 enable_swift_storage: {get_input: enable_swift_storage}
1367                 mysql_innodb_buffer_pool_size: {get_input: mysql_innodb_buffer_pool_size}
1368                 mysql_max_connections: {get_input: mysql_max_connections}
1369                 mysql::server::root_password: {get_input: mysql_root_password}
1370                 mysql_cluster_name: {get_input: mysql_cluster_name}
1371                 mysql_bind_host: {get_input: mysql_network}
1372                 mysql_virtual_ip: {get_input: mysql_virtual_ip}
1373
1374                 # Neutron
1375                 neutron::bind_host: {get_input: neutron_api_network}
1376                 neutron::rabbit_password: {get_input: rabbit_password}
1377                 neutron::rabbit_user: {get_input: rabbit_username}
1378                 neutron::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1379                 neutron::rabbit_port: {get_input: rabbit_client_port}
1380                 neutron::debug: {get_input: debug}
1381                 neutron::server::auth_uri: {get_input: keystone_auth_uri}
1382                 neutron::server::identity_uri: {get_input: keystone_identity_uri}
1383                 neutron::server::database_connection: {get_input: neutron_dsn}
1384                 neutron::server::api_workers: {get_input: neutron_workers}
1385                 neutron::agents::l3::external_network_bridge: {get_input: neutron_external_network_bridge}
1386                 neutron::agents::ml2::ovs::enable_tunneling: {get_input: neutron_enable_tunneling}
1387                 neutron::agents::ml2::ovs::l2_population: {get_input: neutron_enable_l2pop}
1388                 neutron::agents::dhcp::enable_isolated_metadata: {get_input: neutron_enable_isolated_metadata}
1389                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
1390                 neutron::plugins::ml2::flat_networks: {get_input: neutron_flat_networks}
1391                 neutron::agents::metadata::shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
1392                 neutron::agents::metadata::metadata_ip: {get_input: neutron_api_network}
1393                 neutron::agents::metadata::metadata_workers: {get_input: neutron_workers}
1394                 neutron_agent_mode: {get_input: neutron_agent_mode}
1395                 neutron_router_distributed: {get_input: neutron_router_distributed}
1396                 neutron::core_plugin: {get_input: neutron_core_plugin}
1397                 neutron::service_plugins: {get_input: neutron_service_plugins}
1398                 neutron::enable_dhcp_agent: {get_input: neutron_enable_dhcp_agent}
1399                 neutron::enable_l3_agent: {get_input: neutron_enable_l3_agent}
1400                 neutron::enable_metadata_agent: {get_input: neutron_enable_metadata_agent}
1401                 neutron::enable_ovs_agent: {get_input: neutron_enable_ovs_agent}
1402                 neutron::plugins::ml2::type_drivers: {get_input: neutron_type_drivers}
1403                 neutron::plugins::ml2::mechanism_drivers: {get_input: neutron_mechanism_drivers}
1404                 neutron::plugins::ml2::extension_drivers: {get_input: neutron_plugin_extensions}
1405                 neutron::server::allow_automatic_l3agent_failover: {get_input: neutron_allow_l3agent_failover}
1406                 neutron::server::l3_ha: {get_input: neutron_l3_ha}
1407                 neutron::dhcp_agents_per_network: {get_input: neutron_dhcp_agents_per_network}
1408                 neutron::plugins::ml2::network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
1409                 neutron::plugins::ml2::tunnel_id_ranges: {get_input: neutron_tunnel_id_ranges}
1410                 neutron::plugins::ml2::vni_ranges: {get_input: neutron_vni_ranges}
1411                 neutron::agents::ml2::ovs:bridge_mappings: {get_input: neutron_bridge_mappings}
1412                 neutron_public_interface: {get_input: neutron_public_interface}
1413                 neutron_public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
1414                 neutron_public_interface_default_route: {get_input: neutron_public_interface_default_route}
1415                 neutron_public_interface_tag: {get_input: neutron_public_interface_tag}
1416                 neutron::plugins::ml2::tenant_network_types: {get_input: neutron_tenant_network_types}
1417                 neutron::agents::ml2::ovs::tunnel_types: {get_input: neutron_tunnel_types}
1418                 neutron::agents::ml2::ovs::extensions: {get_input: neutron_agent_extensions}
1419                 neutron::server::auth_password: {get_input: neutron_password}
1420                 neutron::agents::metadata::auth_password: {get_input: neutron_password}
1421                 neutron_dnsmasq_options: {get_input: neutron_dnsmasq_options}
1422                 neutron_dsn: {get_input: neutron_dsn}
1423                 neutron::agents::metadata::auth_url: {get_input: keystone_identity_uri}
1424                 neutron::db::mysql::password: {get_input: neutron_password}
1425                 neutron::keystone::auth::public_url: {get_input: neutron_public_url }
1426                 neutron::keystone::auth::internal_url: {get_input: neutron_internal_url }
1427                 neutron::keystone::auth::admin_url: {get_input: neutron_admin_url }
1428                 neutron::keystone::auth::password: {get_input: neutron_password }
1429                 neutron::keystone::auth::region: {get_input: keystone_region}
1430                 neutron::server::notifications::nova_url: {get_input: nova_internal_url}
1431                 neutron::server::notifications::auth_url: {get_input: neutron_admin_auth_url}
1432                 neutron::server::notifications::tenant_name: 'service'
1433                 neutron::server::notifications::password: {get_input: nova_password}
1434
1435                 # Ceilometer
1436                 ceilometer_backend: {get_input: ceilometer_backend}
1437                 ceilometer_mysql_conn_string: {get_input: ceilometer_dsn}
1438                 ceilometer::metering_secret: {get_input: ceilometer_metering_secret}
1439                 ceilometer::rabbit_userid: {get_input: rabbit_username}
1440                 ceilometer::rabbit_password: {get_input: rabbit_password}
1441                 ceilometer::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1442                 ceilometer::rabbit_port: {get_input: rabbit_client_port}
1443                 ceilometer::debug: {get_input: debug}
1444                 ceilometer::api::host: {get_input: ceilometer_api_network}
1445                 ceilometer::api::keystone_password: {get_input: ceilometer_password}
1446                 ceilometer::api::keystone_auth_uri: {get_input: keystone_auth_uri}
1447                 ceilometer::api::keystone_identity_uri: {get_input: keystone_identity_uri}
1448                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
1449                 ceilometer::agent::auth::auth_url: {get_input: keystone_auth_uri}
1450                 ceilometer::agent::central::coordination_url: {get_input: ceilometer_coordination_url}
1451                 ceilometer::db::mysql::password: {get_input: ceilometer_password}
1452                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
1453                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
1454
1455                 # Nova
1456                 nova::rabbit_userid: {get_input: rabbit_username}
1457                 nova::rabbit_password: {get_input: rabbit_password}
1458                 nova::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1459                 nova::rabbit_port: {get_input: rabbit_client_port}
1460                 nova::debug: {get_input: debug}
1461                 nova::api::auth_uri: {get_input: keystone_auth_uri}
1462                 nova::api::identity_uri: {get_input: keystone_identity_uri}
1463                 nova::api::api_bind_address: {get_input: nova_api_network}
1464                 nova::api::metadata_listen: {get_input: nova_metadata_network}
1465                 nova::api::admin_password: {get_input: nova_password}
1466                 nova::api::osapi_compute_workers: {get_input: nova_workers}
1467                 nova::api::ec2_workers: {get_input: nova_workers}
1468                 nova::api::metadata_workers: {get_input: nova_workers}
1469                 nova::database_connection: {get_input: nova_dsn}
1470                 nova::glance_api_servers: {get_input: glance_api_servers}
1471                 nova::api::neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
1472                 nova::api::instance_name_template: {get_input: instance_name_template}
1473                 nova::network::neutron::neutron_admin_password: {get_input: neutron_password}
1474                 nova::network::neutron::neutron_url: {get_input: neutron_internal_url}
1475                 nova::network::neutron::neutron_admin_auth_url: {get_input: neutron_admin_auth_url}
1476                 nova::vncproxy::host: {get_input: nova_api_network}
1477                 nova::db::mysql::password: {get_input: nova_password}
1478                 nova_enable_db_purge: {get_input: nova_enable_db_purge}
1479
1480                 # Horizon
1481                 apache::ip: {get_input: horizon_network}
1482                 horizon::allowed_hosts: {get_input: horizon_allowed_hosts}
1483                 horizon::django_debug: {get_input: debug}
1484                 horizon::secret_key: {get_input: horizon_secret}
1485                 horizon::bind_address: {get_input: horizon_network}
1486                 horizon::keystone_url: {get_input: keystone_auth_uri}
1487
1488                 # Sahara
1489                 sahara::host: {get_input: sahara_api_network}
1490                 sahara::plugins:
1491                   - cdh
1492                   - hdp
1493                   - mapr
1494                   - vanilla
1495                   - spark
1496                   - storm
1497                 sahara::admin_password: {get_input: sahara_password}
1498                 sahara::auth_uri: {get_input: keystone_auth_uri}
1499                 sahara::admin_user: sahara
1500                 sahara::identity_uri: {get_input: keystone_identity_uri}
1501                 sahara::use_neutron: true
1502                 sahara::database_connection: {get_input: sahara_dsn}
1503                 sahara::debug: {get_input: debug}
1504                 sahara::rpc_backend: rabbit
1505                 sahara::rabbit_userid: {get_input: rabbit_username}
1506                 sahara::rabbit_password: {get_input: rabbit_password}
1507                 sahara::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1508                 sahara::rabbit_port: {get_input: rabbit_client_port}
1509                 sahara::db::mysql::password: {get_input: sahara_password}
1510
1511                 # Rabbit
1512                 rabbitmq::node_ip_address: {get_input: rabbitmq_network}
1513                 rabbitmq::erlang_cookie: {get_input: rabbit_cookie}
1514                 rabbitmq::file_limit: {get_input: rabbit_fd_limit}
1515                 rabbitmq::default_user: {get_input: rabbit_username}
1516                 rabbitmq::default_pass: {get_input: rabbit_password}
1517                 # Redis
1518                 redis::bind: {get_input: redis_network}
1519                 redis_vip: {get_input: redis_vip}
1520                 # Firewall
1521                 tripleo::firewall::manage_firewall: {get_input: manage_firewall}
1522                 tripleo::firewall::purge_firewall_rules: {get_input: purge_firewall_rules}
1523                 # Misc
1524                 memcached::listen_ip: {get_input: memcached_network}
1525                 neutron_public_interface_ip: {get_input: neutron_public_interface_ip}
1526                 ntp::servers: {get_input: ntp_servers}
1527                 timezone::timezone: {get_input: timezone}
1528                 control_virtual_interface: {get_input: control_virtual_interface}
1529                 public_virtual_interface: {get_input: public_virtual_interface}
1530                 tripleo::loadbalancer::control_virtual_interface: {get_input: control_virtual_interface}
1531                 tripleo::loadbalancer::public_virtual_interface: {get_input: public_virtual_interface}
1532                 tripleo::loadbalancer::haproxy_log_address: {get_input: haproxy_log_address}
1533                 tripleo::loadbalancer::service_certificate: {get_attr: [NodeTLSData, deployed_ssl_certificate_path]}
1534                 tripleo::packages::enable_install: {get_input: enable_package_install}
1535                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
1536
1537   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
1538   ControllerExtraConfigPre:
1539     depends_on: ControllerDeployment
1540     type: OS::TripleO::ControllerExtraConfigPre
1541     properties:
1542         server: {get_resource: Controller}
1543
1544   # Hook for site-specific additional pre-deployment config,
1545   # applying to all nodes, e.g node registration/unregistration
1546   NodeExtraConfig:
1547     depends_on: [ControllerExtraConfigPre, NodeTLSData]
1548     type: OS::TripleO::NodeExtraConfig
1549     properties:
1550         server: {get_resource: Controller}
1551
1552   UpdateConfig:
1553     type: OS::TripleO::Tasks::PackageUpdate
1554
1555   UpdateDeployment:
1556     type: OS::Heat::SoftwareDeployment
1557     properties:
1558       config: {get_resource: UpdateConfig}
1559       server: {get_resource: Controller}
1560       input_values:
1561         update_identifier:
1562           get_param: UpdateIdentifier
1563
1564 outputs:
1565   ip_address:
1566     description: IP address of the server in the ctlplane network
1567     value: {get_attr: [Controller, networks, ctlplane, 0]}
1568   external_ip_address:
1569     description: IP address of the server in the external network
1570     value: {get_attr: [ExternalPort, ip_address]}
1571   internal_api_ip_address:
1572     description: IP address of the server in the internal_api network
1573     value: {get_attr: [InternalApiPort, ip_address]}
1574   storage_ip_address:
1575     description: IP address of the server in the storage network
1576     value: {get_attr: [StoragePort, ip_address]}
1577   storage_mgmt_ip_address:
1578     description: IP address of the server in the storage_mgmt network
1579     value: {get_attr: [StorageMgmtPort, ip_address]}
1580   tenant_ip_address:
1581     description: IP address of the server in the tenant network
1582     value: {get_attr: [TenantPort, ip_address]}
1583   management_ip_address:
1584     description: IP address of the server in the management network
1585     value: {get_attr: [ManagementPort, ip_address]}
1586   hostname:
1587     description: Hostname of the server
1588     value: {get_attr: [Controller, name]}
1589   corosync_node:
1590     description: >
1591       Node object in the format {ip: ..., name: ...} format that the corosync
1592       element expects
1593     value:
1594       ip: {get_attr: [Controller, networks, ctlplane, 0]}
1595       name: {get_attr: [Controller, name]}
1596   hosts_entry:
1597     description: >
1598       Server's IP address and hostname in the /etc/hosts format
1599     value:
1600       str_replace:
1601         template: IP HOST.DOMAIN HOST CLOUDNAME
1602         params:
1603           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ControllerHostnameResolveNetwork]}]}
1604           DOMAIN: {get_param: CloudDomain}
1605           HOST: {get_attr: [Controller, name]}
1606           CLOUDNAME: {get_param: CloudName}
1607   nova_server_resource:
1608     description: Heat resource handle for the Nova compute server
1609     value:
1610       {get_resource: Controller}
1611   swift_device:
1612     description: Swift device formatted for swift-ring-builder
1613     value:
1614       str_replace:
1615         template: 'r1z1-IP:%PORT%/d1'
1616         params:
1617           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
1618   swift_proxy_memcache:
1619     description: Swift proxy-memcache value
1620     value:
1621       str_replace:
1622         template: "IP:11211"
1623         params:
1624           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
1625   config_identifier:
1626     description: identifier which changes if the controller configuration may need re-applying
1627     value:
1628       list_join:
1629         - ','
1630         - - {get_attr: [ControllerDeployment, deploy_stdout]}
1631           - {get_attr: [NodeTLSCAData, deploy_stdout]}
1632           - {get_attr: [NodeTLSData, deploy_stdout]}
1633           - {get_attr: [ControllerExtraConfigPre, deploy_stdout]}
1634           - {get_param: UpdateIdentifier}
1635   tls_key_modulus_md5:
1636     description: MD5 checksum of the TLS Key Modulus
1637     value: {get_attr: [NodeTLSData, key_modulus_md5]}
1638   tls_cert_modulus_md5:
1639     description: MD5 checksum of the TLS Certificate Modulus
1640     value: {get_attr: [NodeTLSData, cert_modulus_md5]}