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