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