Merge "compute: use live_migration_tunnelled"
[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     default: guest
599     description: The password for RabbitMQ
600     type: string
601     hidden: true
602   RabbitUserName:
603     default: guest
604     description: The username for RabbitMQ
605     type: string
606   RabbitClientUseSSL:
607     default: false
608     description: >
609         Rabbit client subscriber parameter to specify
610         an SSL connection to the RabbitMQ host.
611     type: string
612   RabbitClientPort:
613     default: 5672
614     description: Set rabbit subscriber port, change this if using SSL
615     type: number
616   RabbitFDLimit:
617     default: 16384
618     description: Configures RabbitMQ FD limit
619     type: string
620   RabbitIPv6:
621     default: false
622     description: Enable IPv6 in RabbitMQ
623     type: boolean
624   RedisPassword:
625     type: string
626     description: The password to access the Redis service
627     hidden: true
628   RedisVirtualIP:
629     type: string
630     default: ''  # Has to be here because of the ignored empty value bug
631   RedisVirtualIPUri:
632     type: string
633     default: ''  # Has to be here because of the ignored empty value bug
634     description: An IP address which is wrapped in brackets in case of IPv6
635   SnmpdReadonlyUserName:
636     default: ro_snmp_user
637     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
638     type: string
639   SnmpdReadonlyUserPassword:
640     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
641     type: string
642     hidden: true
643   SwiftHashSuffix:
644     description: A random string to be used as a salt when hashing to determine mappings
645       in the ring.
646     hidden: true
647     type: string
648   SwiftMountCheck:
649     default: 'false'
650     description: Value of mount_check in Swift account/container/object -server.conf
651     type: boolean
652   SwiftMinPartHours:
653     type: number
654     default: 1
655     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
656   SwiftPartPower:
657     default: 10
658     description: Partition Power to use when building Swift rings
659     type: number
660   SwiftPassword:
661     description: The password for the swift service account, used by the swift proxy
662       services.
663     hidden: true
664     type: string
665   SwiftProxyVirtualIP:
666     type: string
667     default: ''
668   SwiftReplicas:
669     type: number
670     default: 3
671     description: How many replicas to use in the swift rings.
672   SwiftWorkers:
673     default: 0
674     description: Number of workers for Swift service.
675     type: number
676   TimeZone:
677     default: 'UTC'
678     description: The timezone to be set on controller nodes.
679     type: string
680   UpgradeLevelNovaCompute:
681     type: string
682     description: Nova Compute upgrade level
683     default: ''
684   VirtualIP: # DEPRECATED: use per service settings instead
685     type: string
686     default: ''  # Has to be here because of the ignored empty value bug
687   HeatApiVirtualIP:
688     type: string
689     default: ''
690   HeatApiVirtualIPUri:
691     type: string
692     default: ''
693   GlanceApiVirtualIP:
694     type: string
695     default: ''
696   GlanceRegistryVirtualIP:
697     type: string
698     default: ''
699   MysqlVirtualIP:
700     type: string
701     default: ''
702   MysqlVirtualIPUri:
703     type: string
704     default: ''
705   KeystoneAdminApiVirtualIP:
706     type: string
707     default: ''
708   KeystonePublicApiVirtualIP:
709     type: string
710     default: ''
711   NeutronApiVirtualIP:
712     type: string
713     default: ''
714   EnablePackageInstall:
715     default: 'false'
716     description: Set to true to enable package installation via Puppet
717     type: boolean
718   ServiceNetMap:
719     default: {}
720     description: Mapping of service_name -> network name. Typically set
721                  via parameter_defaults in the resource registry.
722     type: json
723   EndpointMap:
724     default: {}
725     description: Mapping of service endpoint -> protocol. Typically set
726                  via parameter_defaults in the resource registry.
727     type: json
728   UpdateIdentifier:
729     default: ''
730     type: string
731     description: >
732       Setting to a previously unused value during stack-update will trigger
733       package update on all nodes
734   Hostname:
735     type: string
736     default: '' # Defaults to Heat created hostname
737   HostnameMap:
738     type: json
739     default: {}
740     description: Optional mapping to override hostnames
741   NetworkDeploymentActions:
742     type: comma_delimited_list
743     description: >
744       Heat action when to apply network configuration changes
745     default: ['CREATE']
746   NodeIndex:
747     type: number
748     default: 0
749   SoftwareConfigTransport:
750     default: POLL_SERVER_CFN
751     description: |
752       How the server should receive the metadata required for software configuration.
753     type: string
754     constraints:
755     - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
756   CloudDomain:
757     default: ''
758     type: string
759     description: >
760       The DNS domain used for the hosts. This should match the dhcp_domain
761       configured in the Undercloud neutron. Defaults to localdomain.
762   ServerMetadata:
763     default: {}
764     description: >
765       Extra properties or metadata passed to Nova for the created nodes in
766       the overcloud. It's accessible via the Nova metadata API.
767     type: json
768   SchedulerHints:
769     type: json
770     description: Optional scheduler hints to pass to nova
771     default: {}
772
773 resources:
774
775   Controller:
776     type: OS::Nova::Server
777     properties:
778       image: {get_param: Image}
779       image_update_policy: {get_param: ImageUpdatePolicy}
780       flavor: {get_param: Flavor}
781       key_name: {get_param: KeyName}
782       networks:
783         - network: ctlplane
784       user_data_format: SOFTWARE_CONFIG
785       user_data: {get_resource: UserData}
786       name:
787         str_replace:
788             template: {get_param: Hostname}
789             params: {get_param: HostnameMap}
790       software_config_transport: {get_param: SoftwareConfigTransport}
791       metadata: {get_param: ServerMetadata}
792       scheduler_hints: {get_param: SchedulerHints}
793
794   # Combine the NodeAdminUserData and NodeUserData mime archives
795   UserData:
796     type: OS::Heat::MultipartMime
797     properties:
798       parts:
799       - config: {get_resource: NodeAdminUserData}
800         type: multipart
801       - config: {get_resource: NodeUserData}
802         type: multipart
803
804   # Creates the "heat-admin" user if configured via the environment
805   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
806   NodeAdminUserData:
807     type: OS::TripleO::NodeAdminUserData
808
809   # For optional operator additional userdata
810   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
811   NodeUserData:
812     type: OS::TripleO::NodeUserData
813
814   ExternalPort:
815     type: OS::TripleO::Controller::Ports::ExternalPort
816     properties:
817       IPPool: {get_param: ControllerIPs}
818       NodeIndex: {get_param: NodeIndex}
819       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
820
821   InternalApiPort:
822     type: OS::TripleO::Controller::Ports::InternalApiPort
823     properties:
824       IPPool: {get_param: ControllerIPs}
825       NodeIndex: {get_param: NodeIndex}
826       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
827
828   StoragePort:
829     type: OS::TripleO::Controller::Ports::StoragePort
830     properties:
831       IPPool: {get_param: ControllerIPs}
832       NodeIndex: {get_param: NodeIndex}
833       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
834
835   StorageMgmtPort:
836     type: OS::TripleO::Controller::Ports::StorageMgmtPort
837     properties:
838       IPPool: {get_param: ControllerIPs}
839       NodeIndex: {get_param: NodeIndex}
840       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
841
842   TenantPort:
843     type: OS::TripleO::Controller::Ports::TenantPort
844     properties:
845       IPPool: {get_param: ControllerIPs}
846       NodeIndex: {get_param: NodeIndex}
847       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
848
849   ManagementPort:
850     type: OS::TripleO::Controller::Ports::ManagementPort
851     properties:
852       IPPool: {get_param: ControllerIPs}
853       NodeIndex: {get_param: NodeIndex}
854       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
855
856   NetIpMap:
857     type: OS::TripleO::Network::Ports::NetIpMap
858     properties:
859       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
860       ExternalIp: {get_attr: [ExternalPort, ip_address]}
861       ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
862       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
863       InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
864       StorageIp: {get_attr: [StoragePort, ip_address]}
865       StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
866       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
867       StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
868       TenantIp: {get_attr: [TenantPort, ip_address]}
869       TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
870       ManagementIp: {get_attr: [ManagementPort, ip_address]}
871       ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
872
873   NetIpSubnetMap:
874     type: OS::TripleO::Network::Ports::NetIpSubnetMap
875     properties:
876       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
877       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
878       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
879       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
880       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
881       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
882       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
883
884   NetworkConfig:
885     type: OS::TripleO::Controller::Net::SoftwareConfig
886     properties:
887       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
888       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
889       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
890       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
891       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
892       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
893       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
894
895   NetworkDeployment:
896     type: OS::TripleO::SoftwareDeployment
897     properties:
898       name: NetworkDeployment
899       config: {get_resource: NetworkConfig}
900       server: {get_resource: Controller}
901       actions: {get_param: NetworkDeploymentActions}
902       input_values:
903         bridge_name: br-ex
904         interface_name: {get_param: NeutronPublicInterface}
905
906   # Resource for site-specific injection of root certificate
907   NodeTLSCAData:
908     depends_on: NetworkDeployment
909     type: OS::TripleO::NodeTLSCAData
910     properties:
911       server: {get_resource: Controller}
912
913   # Resource for site-specific passing of private keys/certificates
914   NodeTLSData:
915     depends_on: NodeTLSCAData
916     type: OS::TripleO::NodeTLSData
917     properties:
918       server: {get_resource: Controller}
919       NodeIndex: {get_param: NodeIndex}
920
921
922   ControllerDeployment:
923     type: OS::TripleO::SoftwareDeployment
924     depends_on: NetworkDeployment
925     properties:
926       name: ControllerDeployment
927       config: {get_resource: ControllerConfig}
928       server: {get_resource: Controller}
929       input_values:
930         bootstack_nodeid: {get_attr: [Controller, name]}
931         ceilometer_workers: {get_param: CeilometerWorkers}
932         cinder_workers: {get_param: CinderWorkers}
933         glance_workers: {get_param: GlanceWorkers}
934         heat_workers: {get_param: HeatWorkers}
935         keystone_workers: {get_param: KeystoneWorkers}
936         nova_workers: {get_param: NovaWorkers}
937         neutron_workers: {get_param: NeutronWorkers}
938         swift_workers: {get_param: SwiftWorkers}
939         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
940         neutron_enable_l2pop: {get_param: NeutronEnableL2Pop}
941         neutron_enable_isolated_metadata: {get_param: NeutronEnableIsolatedMetadata}
942         haproxy_log_address: {get_param: HAProxySyslogAddress}
943         heat.watch_server_url:
944           list_join:
945             - ''
946             - - 'http://'
947               - {get_param: HeatApiVirtualIPUri}
948               - ':8003'
949         heat.metadata_server_url:
950           list_join:
951             - ''
952             - - 'http://'
953               - {get_param: HeatApiVirtualIPUri}
954               - ':8000'
955         heat.waitcondition_server_url:
956           list_join:
957             - ''
958             - - 'http://'
959               - {get_param: HeatApiVirtualIPUri}
960               - ':8000/v1/waitcondition'
961         heat_auth_encryption_key: {get_param: HeatAuthEncryptionKey}
962         heat_enable_db_purge: {get_param: HeatEnableDBPurge}
963         horizon_allowed_hosts: {get_param: HorizonAllowedHosts}
964         horizon_secret: {get_param: HorizonSecret}
965         admin_email: {get_param: AdminEmail}
966         admin_password: {get_param: AdminPassword}
967         admin_token: {get_param: AdminToken}
968         neutron_public_interface_ip: {get_param: NeutronPublicInterfaceIP}
969         debug: {get_param: Debug}
970         cinder_enable_db_purge: {get_param: CinderEnableDBPurge}
971         cinder_enable_nfs_backend: {get_param: CinderEnableNfsBackend}
972         cinder_enable_rbd_backend: {get_param: CinderEnableRbdBackend}
973         cinder_nfs_mount_options: {get_param: CinderNfsMountOptions}
974         cinder_nfs_servers:
975           str_replace:
976             template: SERVERS
977             params:
978               SERVERS: {get_param: CinderNfsServers}
979         cinder_lvm_loop_device_size: {get_param: CinderLVMLoopDeviceSize}
980         cinder_password: {get_param: CinderPassword}
981         cinder_enable_iscsi_backend: {get_param: CinderEnableIscsiBackend}
982         cinder_iscsi_helper: {get_param: CinderISCSIHelper}
983         cinder_backend_config: {get_param: CinderBackendConfig}
984         cinder_dsn:
985           list_join:
986             - ''
987             - - 'mysql+pymysql://cinder:'
988               - {get_param: CinderPassword}
989               - '@'
990               - {get_param: MysqlVirtualIPUri}
991               - '/cinder'
992         glance_port: {get_param: [EndpointMap, GlanceInternal, port]}
993         glance_password: {get_param: GlancePassword}
994         glance_backend: {get_param: GlanceBackend}
995         glance_file_pcmk_device: {get_param: GlanceFilePcmkDevice}
996         glance_file_pcmk_fstype: {get_param: GlanceFilePcmkFstype}
997         glance_file_pcmk_manage: {get_param: GlanceFilePcmkManage}
998         glance_file_pcmk_options: {get_param: GlanceFilePcmkOptions}
999         glance_notifier_strategy: {get_param: GlanceNotifierStrategy}
1000         glance_log_file: {get_param: GlanceLogFile}
1001         glance_dsn:
1002           list_join:
1003             - ''
1004             - - 'mysql+pymysql://glance:'
1005               - {get_param: GlancePassword}
1006               - '@'
1007               - {get_param: MysqlVirtualIPUri}
1008               - '/glance'
1009         heat_password: {get_param: HeatPassword}
1010         heat_stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
1011         heat_dsn:
1012           list_join:
1013             - ''
1014             - - 'mysql+pymysql://heat:'
1015               - {get_param: HeatPassword}
1016               - '@'
1017               - {get_param: MysqlVirtualIPUri}
1018               - '/heat'
1019         keystone_ca_certificate: {get_param: KeystoneCACertificate}
1020         keystone_signing_key: {get_param: KeystoneSigningKey}
1021         keystone_signing_certificate: {get_param: KeystoneSigningCertificate}
1022         keystone_ssl_certificate: {get_param: KeystoneSSLCertificate}
1023         keystone_ssl_certificate_key: {get_param: KeystoneSSLCertificateKey}
1024         keystone_notification_driver: {get_param: KeystoneNotificationDriver}
1025         keystone_notification_format: {get_param: KeystoneNotificationFormat}
1026         keystone_enable_db_purge: {get_param: KeystoneEnableDBPurge}
1027         keystone_dsn:
1028           list_join:
1029             - ''
1030             - - 'mysql+pymysql://keystone:'
1031               - {get_param: AdminToken}
1032               - '@'
1033               - {get_param: MysqlVirtualIPUri}
1034               - '/keystone'
1035         keystone_identity_uri: { get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix] }
1036         keystone_auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri] }
1037         keystone_public_url: { get_param: [EndpointMap, KeystonePublic, uri_no_suffix] }
1038         keystone_internal_url: { get_param: [EndpointMap, KeystoneInternal, uri_no_suffix] }
1039         keystone_ec2_uri: { get_param: [EndpointMap, KeystoneEC2, uri] }
1040         enable_fencing: {get_param: EnableFencing}
1041         enable_galera: {get_param: EnableGalera}
1042         enable_load_balancer: {get_param: EnableLoadBalancer}
1043         enable_ceph_storage: {get_param: EnableCephStorage}
1044         enable_swift_storage: {get_param: EnableSwiftStorage}
1045         manage_firewall: {get_param: ManageFirewall}
1046         purge_firewall_rules: {get_param: PurgeFirewallRules}
1047         mysql_innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
1048         mysql_max_connections: {get_param: MysqlMaxConnections}
1049         mysql_root_password: {get_param: MysqlRootPassword}
1050         mysql_cluster_name:
1051           str_replace:
1052             template: tripleo-CLUSTER
1053             params:
1054               CLUSTER: {get_param: MysqlClusterUniquePart}
1055         neutron_flat_networks:
1056           str_replace:
1057             template: NETWORKS
1058             params:
1059               NETWORKS: {get_param: NeutronFlatNetworks}
1060         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
1061         neutron_agent_mode: {get_param: NeutronAgentMode}
1062         neutron_router_distributed: {get_param: NeutronDVR}
1063         neutron_core_plugin: {get_param: NeutronCorePlugin}
1064         neutron_service_plugins:
1065           str_replace:
1066             template: PLUGINS
1067             params:
1068               PLUGINS: {get_param: NeutronServicePlugins}
1069         neutron_type_drivers:
1070           str_replace:
1071             template: DRIVERS
1072             params:
1073               DRIVERS: {get_param: NeutronTypeDrivers}
1074         neutron_enable_dhcp_agent: {get_param: NeutronEnableDHCPAgent}
1075         neutron_enable_l3_agent: {get_param: NeutronEnableL3Agent}
1076         neutron_enable_metadata_agent: {get_param: NeutronEnableMetadataAgent}
1077         neutron_enable_ovs_agent: {get_param: NeutronEnableOVSAgent}
1078         neutron_mechanism_drivers:
1079           str_replace:
1080             template: MECHANISMS
1081             params:
1082               MECHANISMS: {get_param: NeutronMechanismDrivers}
1083         neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
1084         neutron_l3_ha: {get_param: NeutronL3HA}
1085         neutron_dhcp_agents_per_network: {get_param: NeutronDhcpAgentsPerNetwork}
1086         neutron_network_vlan_ranges:
1087           str_replace:
1088             template: RANGES
1089             params:
1090               RANGES: {get_param: NeutronNetworkVLANRanges}
1091         neutron_bridge_mappings:
1092           str_replace:
1093             template: MAPPINGS
1094             params:
1095               MAPPINGS: {get_param: NeutronBridgeMappings}
1096         neutron_external_network_bridge: {get_param: NeutronExternalNetworkBridge}
1097         neutron_public_interface: {get_param: NeutronPublicInterface}
1098         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
1099         neutron_public_interface_default_route: {get_param: NeutronPublicInterfaceDefaultRoute}
1100         neutron_public_interface_tag: {get_param: NeutronPublicInterfaceTag}
1101         neutron_tunnel_id_ranges:
1102           str_replace:
1103             template: RANGES
1104             params:
1105               RANGES: {get_param: NeutronTunnelIdRanges}
1106         neutron_vni_ranges:
1107           str_replace:
1108             template: RANGES
1109             params:
1110               RANGES: {get_param: NeutronVniRanges}
1111         neutron_tenant_network_types:
1112           str_replace:
1113             template: TYPES
1114             params:
1115               TYPES: {get_param: NeutronNetworkType}
1116         neutron_tunnel_types:
1117           str_replace:
1118             template: TYPES
1119             params:
1120               TYPES: {get_param: NeutronTunnelTypes}
1121         neutron_plugin_extensions:
1122           str_replace:
1123             template: PLUGIN_EXTENSIONS
1124             params:
1125               PLUGIN_EXTENSIONS: {get_param: NeutronPluginExtensions}
1126         neutron_agent_extensions:
1127           str_replace:
1128             template: AGENT_EXTENSIONS
1129             params:
1130               AGENT_EXTENSIONS: {get_param: NeutronAgentExtensions}
1131         neutron_password: {get_param: NeutronPassword}
1132         neutron_tenant_mtu: {get_param: NeutronTenantMtu}
1133         neutron_dnsmasq_options: {get_param: NeutronDnsmasqOptions}
1134         neutron_dsn:
1135           list_join:
1136             - ''
1137             - - 'mysql+pymysql://neutron:'
1138               - {get_param: NeutronPassword}
1139               - '@'
1140               - {get_param: MysqlVirtualIPUri}
1141               - '/ovs_neutron?charset=utf8'
1142         neutron_internal_url: { get_param: [ EndpointMap, NeutronInternal, uri ] }
1143         neutron_public_url: { get_param: [ EndpointMap, NeutronPublic, uri ] }
1144         neutron_admin_url: { get_param: [ EndpointMap, NeutronAdmin, uri ] }
1145         neutron_auth_url: { get_param: [ EndpointMap, KeystoneV3Admin, uri ] }
1146         nova_internal_url: { get_param: [ EndpointMap, NovaInternal, uri ] }
1147         ceilometer_backend: {get_param: CeilometerBackend}
1148         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
1149         ceilometer_password: {get_param: CeilometerPassword}
1150         ceilometer_store_events: {get_param: CeilometerStoreEvents}
1151         ceilometer_coordination_url:
1152           list_join:
1153             - ''
1154             - - 'redis://'
1155               - {get_param: RedisVirtualIPUri}
1156               - ':6379/?password='
1157               - {get_param: RedisPassword}
1158         ceilometer_dsn:
1159           list_join:
1160             - ''
1161             - - 'mysql+pymysql://ceilometer:'
1162               - {get_param: CeilometerPassword}
1163               - '@'
1164               - {get_param: MysqlVirtualIPUri}
1165               - '/ceilometer'
1166         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
1167         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
1168         nova_enable_db_purge: {get_param: NovaEnableDBPurge}
1169         nova_ipv6: {get_param: NovaIPv6}
1170         corosync_ipv6: {get_param: CorosyncIPv6}
1171         nova_password: {get_param: NovaPassword}
1172         nova_dsn:
1173           list_join:
1174             - ''
1175             - - 'mysql+pymysql://nova:'
1176               - {get_param: NovaPassword}
1177               - '@'
1178               - {get_param: MysqlVirtualIPUri}
1179               - '/nova'
1180         nova_api_dsn:
1181           list_join:
1182             - ''
1183             - - 'mysql+pymysql://nova_api:'
1184               - {get_param: NovaPassword}
1185               - '@'
1186               - {get_param: MysqlVirtualIPUri}
1187               - '/nova_api'
1188         upgrade_level_nova_compute: {get_param: UpgradeLevelNovaCompute}
1189         instance_name_template: {get_param: InstanceNameTemplate}
1190         fencing_config: {get_param: FencingConfig}
1191         pcsd_password: {get_param: PcsdPassword}
1192         rabbit_username: {get_param: RabbitUserName}
1193         rabbit_password: {get_param: RabbitPassword}
1194         rabbit_cookie: {get_param: RabbitCookie}
1195         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
1196         rabbit_client_port: {get_param: RabbitClientPort}
1197         rabbit_ipv6: {get_param: RabbitIPv6}
1198         mongodb_no_journal: {get_param: MongoDbNoJournal}
1199         mongodb_ipv6: {get_param: MongoDbIPv6}
1200         # We need to force this into quotes or hiera will return integer causing
1201         # the puppet module validation regexp to fail.
1202         # Remove when: https://github.com/puppetlabs/puppetlabs-rabbitmq/pull/401
1203         rabbit_fd_limit:
1204           str_replace:
1205             template: "'LIMIT'"
1206             params:
1207               LIMIT: {get_param: RabbitFDLimit}
1208         ntp_servers: {get_param: NtpServer}
1209         timezone: {get_param: TimeZone}
1210         control_virtual_interface: {get_param: ControlVirtualInterface}
1211         public_virtual_interface: {get_param: PublicVirtualInterface}
1212         swift_hash_suffix: {get_param: SwiftHashSuffix}
1213         swift_password: {get_param: SwiftPassword}
1214         swift_part_power: {get_param: SwiftPartPower}
1215         swift_replicas: {get_param: SwiftReplicas}
1216         swift_min_part_hours: {get_param: SwiftMinPartHours}
1217         swift_mount_check: {get_param: SwiftMountCheck}
1218         enable_package_install: {get_param: EnablePackageInstall}
1219         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
1220         sahara_password: {get_param: SaharaPassword}
1221         sahara_dsn:
1222           list_join:
1223             - ''
1224             - - 'mysql://sahara:'
1225               - {get_param: SaharaPassword}
1226               - '@'
1227               - {get_param: MysqlVirtualIPUri}
1228               - '/sahara'
1229         swift_proxy_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1230         swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
1231         cinder_iscsi_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderIscsiNetwork]}]}
1232         cinder_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1233         glance_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1234         glance_registry_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1235         glance_api_servers: { get_param: [EndpointMap, GlanceInternal, uri]}
1236         glance_registry_host: {get_param: GlanceRegistryVirtualIP}
1237         heat_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1238         keystone_public_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1239         keystone_admin_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1240         keystone_region: {get_param: KeystoneRegion}
1241         mongo_db_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
1242         neutron_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1243         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
1244         ceilometer_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1245         nova_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1246         nova_metadata_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1247         horizon_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1248         rabbitmq_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1249         redis_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
1250         redis_password: {get_param: RedisPassword}
1251         redis_vip: {get_param: RedisVirtualIP}
1252         sahara_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1253         memcached_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
1254         mysql_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1255         mysql_virtual_ip: {get_param: MysqlVirtualIP}
1256         ceph_cluster_network: {get_attr: [NetIpSubnetMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephClusterNetwork]}]}
1257         ceph_public_network: {get_attr: [NetIpSubnetMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
1258         ceph_public_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
1259
1260   # Map heat metadata into hiera datafiles
1261   ControllerConfig:
1262     type: OS::Heat::StructuredConfig
1263     properties:
1264       group: os-apply-config
1265       config:
1266         hiera:
1267           hierarchy:
1268             - '"%{::uuid}"'
1269             - heat_config_%{::deploy_config_name}
1270             - controller_extraconfig
1271             - extraconfig
1272             - controller
1273             - database
1274             - object
1275             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
1276             - ceph_cluster # provided by CephClusterConfig
1277             - ceph
1278             - bootstrap_node # provided by BootstrapNodeConfig
1279             - all_nodes # provided by allNodesConfig
1280             - vip_data # provided by vip-config
1281             - '"%{::osfamily}"'
1282             - common
1283             - cinder_dellsc_data # Optionally provided by ControllerExtraConfigPre
1284             - cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
1285             - cinder_eqlx_data # Optionally provided by ControllerExtraConfigPre
1286             - neutron_bigswitch_data # Optionally provided by ControllerExtraConfigPre
1287             - neutron_cisco_data # Optionally provided by ControllerExtraConfigPre
1288             - cisco_n1kv_data # Optionally provided by ControllerExtraConfigPre
1289             - neutron_nuage_data # Optionally provided by ControllerExtraConfigPre
1290             - midonet_data #Optionally provided by AllNodesExtraConfig
1291             - neutron_opencontrail_data # Optionally provided by ControllerExtraConfigPre
1292           datafiles:
1293             controller_extraconfig:
1294               mapped_data: {get_param: ControllerExtraConfig}
1295             extraconfig:
1296               mapped_data: {get_param: ExtraConfig}
1297             common:
1298               raw_data: {get_file: hieradata/common.yaml}
1299             ceph:
1300               raw_data: {get_file: hieradata/ceph.yaml}
1301               mapped_data:
1302                 ceph::profile::params::cluster_network: {get_input: ceph_cluster_network}
1303                 ceph::profile::params::public_network: {get_input: ceph_public_network}
1304                 ceph::profile::params::public_addr: {get_input: ceph_public_ip}
1305             database:
1306               raw_data: {get_file: hieradata/database.yaml}
1307             object:
1308               raw_data: {get_file: hieradata/object.yaml}
1309             controller:
1310               raw_data: {get_file: hieradata/controller.yaml}
1311               mapped_data: # data supplied directly to this deployment configuration, etc
1312                 bootstack_nodeid: {get_input: bootstack_nodeid}
1313
1314                 # Pacemaker
1315                 enable_fencing: {get_input: enable_fencing}
1316                 enable_load_balancer: {get_input: enable_load_balancer}
1317                 hacluster_pwd: {get_input: pcsd_password}
1318                 corosync_ipv6: {get_input: corosync_ipv6}
1319                 tripleo::fencing::config: {get_input: fencing_config}
1320
1321                 # Swift
1322                 swift::proxy::proxy_local_net_ip: {get_input: swift_proxy_network}
1323                 swift::proxy::authtoken::auth_uri: {get_input: keystone_auth_uri}
1324                 swift::proxy::authtoken::identity_uri: {get_input: keystone_identity_uri}
1325                 swift::storage::all::storage_local_net_ip: {get_input: swift_management_network}
1326                 swift::swift_hash_suffix: {get_input: swift_hash_suffix}
1327                 swift::proxy::authtoken::admin_password: {get_input: swift_password}
1328                 swift::proxy::workers: {get_input: swift_workers}
1329                 tripleo::ringbuilder::part_power: {get_input: swift_part_power}
1330                 tripleo::ringbuilder::replicas: {get_input: swift_replicas}
1331                 tripleo::ringbuilder::min_part_hours: {get_input: swift_min_part_hours}
1332                 swift_mount_check: {get_input: swift_mount_check}
1333
1334                 # NOTE(dprince): build_ring support is currently not wired in.
1335                 # See: https://review.openstack.org/#/c/109225/
1336                 tripleo::ringbuilder::build_ring: True
1337
1338                 # Cinder
1339                 cinder_enable_db_purge: {get_input: cinder_enable_db_purge}
1340                 cinder_enable_nfs_backend: {get_input: cinder_enable_nfs_backend}
1341                 cinder_enable_rbd_backend: {get_input: cinder_enable_rbd_backend}
1342                 cinder_nfs_mount_options: {get_input: cinder_nfs_mount_options}
1343                 cinder_nfs_servers: {get_input: cinder_nfs_servers}
1344                 cinder_lvm_loop_device_size: {get_input: cinder_lvm_loop_device_size}
1345                 cinder_iscsi_helper: {get_input: cinder_iscsi_helper}
1346                 cinder_iscsi_ip_address: {get_input: cinder_iscsi_network}
1347                 cinder::database_connection: {get_input: cinder_dsn}
1348                 cinder::api::keystone_password: {get_input: cinder_password}
1349                 cinder::api::auth_uri: {get_input: keystone_auth_uri}
1350                 cinder::api::identity_uri: {get_input: keystone_identity_uri}
1351                 cinder::api::bind_host: {get_input: cinder_api_network}
1352                 cinder::rabbit_userid: {get_input: rabbit_username}
1353                 cinder::rabbit_password: {get_input: rabbit_password}
1354                 cinder::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1355                 cinder::rabbit_port: {get_input: rabbit_client_port}
1356                 cinder::debug: {get_input: debug}
1357                 cinder_enable_iscsi_backend: {get_input: cinder_enable_iscsi_backend}
1358                 cinder::glance::glance_api_servers: {get_input: glance_api_servers}
1359                 cinder_backend_config: {get_input: CinderBackendConfig}
1360                 cinder::db::mysql::password: {get_input: cinder_password}
1361
1362                 # Glance
1363                 glance::api::bind_port: {get_input: glance_port}
1364                 glance::api::bind_host: {get_input: glance_api_network}
1365                 glance::api::auth_uri: {get_input: keystone_auth_uri}
1366                 glance::api::identity_uri: {get_input: keystone_identity_uri}
1367                 glance::api::registry_host: {get_input: glance_registry_host}
1368                 glance::api::keystone_password: {get_input: glance_password}
1369                 glance::api::debug: {get_input: debug}
1370                 glance::api::workers: {get_input: glance_workers}
1371                 glance_notifier_strategy: {get_input: glance_notifier_strategy}
1372                 glance_log_file: {get_input: glance_log_file}
1373                 glance_log_file: {get_input: glance_log_file}
1374                 glance::api::database_connection: {get_input: glance_dsn}
1375                 glance::registry::keystone_password: {get_input: glance_password}
1376                 glance::registry::database_connection: {get_input: glance_dsn}
1377                 glance::registry::bind_host: {get_input: glance_registry_network}
1378                 glance::registry::auth_uri: {get_input: keystone_auth_uri}
1379                 glance::registry::identity_uri: {get_input: keystone_identity_uri}
1380                 glance::registry::debug: {get_input: debug}
1381                 glance::backend::swift::swift_store_auth_address: {get_input: keystone_auth_uri}
1382                 glance::registry::workers: {get_input: glance_workers}
1383                 glance::backend::swift::swift_store_user: service:glance
1384                 glance::backend::swift::swift_store_key: {get_input: glance_password}
1385                 glance_backend: {get_input: glance_backend}
1386                 glance::db::mysql::password: {get_input: glance_password}
1387                 glance_file_pcmk_device: {get_input: glance_file_pcmk_device}
1388                 glance_file_pcmk_fstype: {get_input: glance_file_pcmk_fstype}
1389                 glance_file_pcmk_manage: {get_input: glance_file_pcmk_manage}
1390                 glance_file_pcmk_options: {get_input: glance_file_pcmk_options}
1391                 glance::notify::rabbitmq::rabbit_userid: {get_input: rabbit_username}
1392                 glance::notify::rabbitmq::rabbit_password: {get_input: rabbit_password}
1393                 glance::notify::rabbitmq::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1394
1395                 # Heat
1396                 heat_stack_domain_admin_password: {get_input: heat_stack_domain_admin_password}
1397                 heat::engine::heat_watch_server_url: {get_input: heat.watch_server_url}
1398                 heat::engine::heat_metadata_server_url: {get_input: heat.metadata_server_url}
1399                 heat::engine::heat_waitcondition_server_url: {get_input: heat.waitcondition_server_url}
1400                 heat::engine::auth_encryption_key: {get_input: heat_auth_encryption_key}
1401                 heat::rabbit_userid: {get_input: rabbit_username}
1402                 heat::rabbit_password: {get_input: rabbit_password}
1403                 heat::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1404                 heat::rabbit_port: {get_input: rabbit_client_port}
1405                 heat::auth_uri: {get_input: keystone_auth_uri}
1406                 heat::keystone_ec2_uri: {get_input: keystone_ec2_uri}
1407                 heat::identity_uri: {get_input: keystone_identity_uri}
1408                 heat::keystone_password: {get_input: heat_password}
1409                 heat::api::bind_host: {get_input: heat_api_network}
1410                 heat::api::workers: {get_input: heat_workers}
1411                 heat::api_cloudwatch::bind_host: {get_input: heat_api_network}
1412                 heat::api_cloudwatch::workers: {get_input: heat_workers}
1413                 heat::api_cfn::bind_host: {get_input: heat_api_network}
1414                 heat::api_cfn::workers: {get_input: heat_workers}
1415                 heat::database_connection: {get_input: heat_dsn}
1416                 heat::debug: {get_input: debug}
1417                 heat::db::mysql::password: {get_input: heat_password}
1418                 heat_enable_db_purge: {get_input: heat_enable_db_purge}
1419                 heat::keystone::domain::domain_password: {get_input: heat_stack_domain_admin_password}
1420
1421                 # Keystone
1422                 keystone::admin_token: {get_input: admin_token}
1423                 keystone::roles::admin::password: {get_input: admin_password}
1424                 keystone_ca_certificate: {get_input: keystone_ca_certificate}
1425                 keystone_signing_key: {get_input: keystone_signing_key}
1426                 keystone_signing_certificate: {get_input: keystone_signing_certificate}
1427                 keystone_ssl_certificate: {get_input: keystone_ssl_certificate}
1428                 keystone_ssl_certificate_key: {get_input: keystone_ssl_certificate_key}
1429                 keystone::database_connection: {get_input: keystone_dsn}
1430                 keystone::admin_bind_host: {get_input: keystone_admin_api_network}
1431                 keystone::public_bind_host: {get_input: keystone_public_api_network}
1432                 keystone::wsgi::apache::bind_host: {get_input: keystone_public_api_network}
1433                 keystone::wsgi::apache::admin_bind_host: {get_input: keystone_admin_api_network}
1434                 keystone::debug: {get_input: debug}
1435                 keystone::db::mysql::password: {get_input: admin_token}
1436                 keystone::rabbit_userid: {get_input: rabbit_username}
1437                 keystone::rabbit_password: {get_input: rabbit_password}
1438                 keystone::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1439                 keystone::rabbit_port: {get_input: rabbit_client_port}
1440                 keystone::notification_driver: {get_input: keystone_notification_driver}
1441                 keystone::notification_format: {get_input: keystone_notification_format}
1442                 keystone::roles::admin::email: {get_input: admin_email}
1443                 keystone::roles::admin::password: {get_input: admin_password}
1444                 keystone::endpoint::public_url: {get_input: keystone_public_url}
1445                 keystone::endpoint::internal_url: {get_input: keystone_internal_url}
1446                 keystone::endpoint::admin_url: {get_input: keystone_identity_uri}
1447                 keystone::endpoint::region: {get_input: keystone_region}
1448                 keystone::admin_workers: {get_input: keystone_workers}
1449                 keystone::public_workers: {get_input: keystone_workers}
1450                 keystone_enable_db_purge: {get_input: keystone_enable_db_purge}
1451                 keystone::public_endpoint: {get_input: keystone_public_url}
1452                 # MongoDB
1453                 mongodb::server::bind_ip: {get_input: mongo_db_network}
1454                 mongodb::server::nojournal: {get_input: mongodb_no_journal}
1455                 mongodb::server::ipv6: {get_input: mongodb_ipv6}
1456                 # MySQL
1457                 admin_password: {get_input: admin_password}
1458                 enable_galera: {get_input: enable_galera}
1459                 enable_ceph_storage: {get_input: enable_ceph_storage}
1460                 enable_swift_storage: {get_input: enable_swift_storage}
1461                 mysql_innodb_buffer_pool_size: {get_input: mysql_innodb_buffer_pool_size}
1462                 mysql_max_connections: {get_input: mysql_max_connections}
1463                 mysql::server::root_password: {get_input: mysql_root_password}
1464                 mysql_cluster_name: {get_input: mysql_cluster_name}
1465                 mysql_bind_host: {get_input: mysql_network}
1466                 mysql_virtual_ip: {get_input: mysql_virtual_ip}
1467
1468                 # Neutron
1469                 neutron::bind_host: {get_input: neutron_api_network}
1470                 neutron::rabbit_password: {get_input: rabbit_password}
1471                 neutron::rabbit_user: {get_input: rabbit_username}
1472                 neutron::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1473                 neutron::rabbit_port: {get_input: rabbit_client_port}
1474                 neutron::debug: {get_input: debug}
1475                 neutron::server::auth_uri: {get_input: keystone_auth_uri}
1476                 neutron::server::identity_uri: {get_input: keystone_identity_uri}
1477                 neutron::server::database_connection: {get_input: neutron_dsn}
1478                 neutron::server::api_workers: {get_input: neutron_workers}
1479                 neutron::agents::l3::external_network_bridge: {get_input: neutron_external_network_bridge}
1480                 neutron::network_device_mtu: {get_input: neutron_tenant_mtu}
1481                 neutron::agents::ml2::ovs::enable_tunneling: {get_input: neutron_enable_tunneling}
1482                 neutron::agents::ml2::ovs::l2_population: {get_input: neutron_enable_l2pop}
1483                 neutron::agents::dhcp::enable_isolated_metadata: {get_input: neutron_enable_isolated_metadata}
1484                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
1485                 neutron::plugins::ml2::flat_networks: {get_input: neutron_flat_networks}
1486                 neutron::agents::metadata::shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
1487                 neutron::agents::metadata::metadata_ip: {get_input: neutron_api_network}
1488                 neutron::agents::metadata::metadata_workers: {get_input: neutron_workers}
1489                 neutron_agent_mode: {get_input: neutron_agent_mode}
1490                 neutron_router_distributed: {get_input: neutron_router_distributed}
1491                 neutron::core_plugin: {get_input: neutron_core_plugin}
1492                 neutron::service_plugins: {get_input: neutron_service_plugins}
1493                 neutron::enable_dhcp_agent: {get_input: neutron_enable_dhcp_agent}
1494                 neutron::enable_l3_agent: {get_input: neutron_enable_l3_agent}
1495                 neutron::enable_metadata_agent: {get_input: neutron_enable_metadata_agent}
1496                 neutron::enable_ovs_agent: {get_input: neutron_enable_ovs_agent}
1497                 neutron::plugins::ml2::type_drivers: {get_input: neutron_type_drivers}
1498                 neutron::plugins::ml2::mechanism_drivers: {get_input: neutron_mechanism_drivers}
1499                 neutron::plugins::ml2::extension_drivers: {get_input: neutron_plugin_extensions}
1500                 neutron::server::allow_automatic_l3agent_failover: {get_input: neutron_allow_l3agent_failover}
1501                 neutron::server::l3_ha: {get_input: neutron_l3_ha}
1502                 neutron::dhcp_agents_per_network: {get_input: neutron_dhcp_agents_per_network}
1503                 neutron::plugins::ml2::network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
1504                 neutron::plugins::ml2::tunnel_id_ranges: {get_input: neutron_tunnel_id_ranges}
1505                 neutron::plugins::ml2::vni_ranges: {get_input: neutron_vni_ranges}
1506                 neutron::agents::ml2::ovs::bridge_mappings: {get_input: neutron_bridge_mappings}
1507                 neutron_public_interface: {get_input: neutron_public_interface}
1508                 neutron_public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
1509                 neutron_public_interface_default_route: {get_input: neutron_public_interface_default_route}
1510                 neutron_public_interface_tag: {get_input: neutron_public_interface_tag}
1511                 neutron::plugins::ml2::tenant_network_types: {get_input: neutron_tenant_network_types}
1512                 neutron::agents::ml2::ovs::tunnel_types: {get_input: neutron_tunnel_types}
1513                 neutron::agents::ml2::ovs::extensions: {get_input: neutron_agent_extensions}
1514                 neutron::server::auth_password: {get_input: neutron_password}
1515                 neutron::agents::metadata::auth_password: {get_input: neutron_password}
1516                 neutron_dnsmasq_options: {get_input: neutron_dnsmasq_options}
1517                 neutron_dsn: {get_input: neutron_dsn}
1518                 neutron::agents::metadata::auth_url: {get_input: keystone_identity_uri}
1519                 neutron::db::mysql::password: {get_input: neutron_password}
1520                 neutron::keystone::auth::public_url: {get_input: neutron_public_url }
1521                 neutron::keystone::auth::internal_url: {get_input: neutron_internal_url }
1522                 neutron::keystone::auth::admin_url: {get_input: neutron_admin_url }
1523                 neutron::keystone::auth::password: {get_input: neutron_password }
1524                 neutron::keystone::auth::region: {get_input: keystone_region}
1525                 neutron::server::notifications::nova_url: {get_input: nova_internal_url}
1526                 neutron::server::notifications::auth_url: {get_input: neutron_auth_url}
1527                 neutron::server::notifications::tenant_name: 'service'
1528                 neutron::server::notifications::project_name: 'service'
1529                 neutron::server::notifications::password: {get_input: nova_password}
1530
1531                 # Ceilometer
1532                 ceilometer_backend: {get_input: ceilometer_backend}
1533                 ceilometer_mysql_conn_string: {get_input: ceilometer_dsn}
1534                 ceilometer::metering_secret: {get_input: ceilometer_metering_secret}
1535                 ceilometer::rabbit_userid: {get_input: rabbit_username}
1536                 ceilometer::rabbit_password: {get_input: rabbit_password}
1537                 ceilometer::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1538                 ceilometer::rabbit_port: {get_input: rabbit_client_port}
1539                 ceilometer::debug: {get_input: debug}
1540                 ceilometer::api::host: {get_input: ceilometer_api_network}
1541                 ceilometer::api::keystone_password: {get_input: ceilometer_password}
1542                 ceilometer::api::keystone_auth_uri: {get_input: keystone_auth_uri}
1543                 ceilometer::api::keystone_identity_uri: {get_input: keystone_identity_uri}
1544                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
1545                 ceilometer::agent::auth::auth_url: {get_input: keystone_auth_uri}
1546                 ceilometer::agent::central::coordination_url: {get_input: ceilometer_coordination_url}
1547                 ceilometer::agent::notification::store_events: {get_input: ceilometer_store_events}
1548                 ceilometer::db::mysql::password: {get_input: ceilometer_password}
1549                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
1550                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
1551
1552                 # Nova
1553                 nova::rabbit_userid: {get_input: rabbit_username}
1554                 nova::rabbit_password: {get_input: rabbit_password}
1555                 nova::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1556                 nova::rabbit_port: {get_input: rabbit_client_port}
1557                 nova::upgrade_level_compute: {get_input: upgrade_level_nova_compute}
1558                 nova::debug: {get_input: debug}
1559                 nova::use_ipv6: {get_input: nova_ipv6}
1560                 nova::api::auth_uri: {get_input: keystone_auth_uri}
1561                 nova::api::identity_uri: {get_input: keystone_identity_uri}
1562                 nova::api::api_bind_address: {get_input: nova_api_network}
1563                 nova::api::metadata_listen: {get_input: nova_metadata_network}
1564                 nova::api::admin_password: {get_input: nova_password}
1565                 nova::api::osapi_compute_workers: {get_input: nova_workers}
1566                 nova::api::ec2_workers: {get_input: nova_workers}
1567                 nova::api::metadata_workers: {get_input: nova_workers}
1568                 nova::compute::network_device_mtu: {get_input: neutron_tenant_mtu}
1569                 nova::database_connection: {get_input: nova_dsn}
1570                 nova::api_database_connection: {get_input: nova_api_dsn}
1571                 nova::glance_api_servers: {get_input: glance_api_servers}
1572                 nova::api::neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
1573                 nova::api::instance_name_template: {get_input: instance_name_template}
1574                 nova::network::neutron::neutron_password: {get_input: neutron_password}
1575                 nova::network::neutron::neutron_url: {get_input: neutron_internal_url}
1576                 nova::network::neutron::neutron_auth_url: {get_input: neutron_auth_url}
1577                 nova::vncproxy::host: {get_input: nova_api_network}
1578                 nova::db::mysql::password: {get_input: nova_password}
1579                 nova::db::mysql_api::password: {get_input: nova_password}
1580                 nova_enable_db_purge: {get_input: nova_enable_db_purge}
1581
1582                 # Horizon
1583                 apache::ip: {get_input: horizon_network}
1584                 horizon::allowed_hosts: {get_input: horizon_allowed_hosts}
1585                 horizon::django_debug: {get_input: debug}
1586                 horizon::secret_key: {get_input: horizon_secret}
1587                 horizon::bind_address: {get_input: horizon_network}
1588                 horizon::keystone_url: {get_input: keystone_auth_uri}
1589
1590                 # Sahara
1591                 sahara::host: {get_input: sahara_api_network}
1592                 sahara::plugins:
1593                   - cdh
1594                   - hdp
1595                   - mapr
1596                   - vanilla
1597                   - spark
1598                   - storm
1599                 sahara::admin_password: {get_input: sahara_password}
1600                 sahara::auth_uri: {get_input: keystone_auth_uri}
1601                 sahara::admin_user: sahara
1602                 sahara::identity_uri: {get_input: keystone_identity_uri}
1603                 sahara::use_neutron: true
1604                 sahara::database_connection: {get_input: sahara_dsn}
1605                 sahara::debug: {get_input: debug}
1606                 sahara::rpc_backend: rabbit
1607                 sahara::rabbit_userid: {get_input: rabbit_username}
1608                 sahara::rabbit_password: {get_input: rabbit_password}
1609                 sahara::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1610                 sahara::rabbit_port: {get_input: rabbit_client_port}
1611                 sahara::db::mysql::password: {get_input: sahara_password}
1612
1613                 # Rabbit
1614                 rabbitmq::node_ip_address: {get_input: rabbitmq_network}
1615                 rabbitmq::erlang_cookie: {get_input: rabbit_cookie}
1616                 rabbitmq::file_limit: {get_input: rabbit_fd_limit}
1617                 rabbitmq::default_user: {get_input: rabbit_username}
1618                 rabbitmq::default_pass: {get_input: rabbit_password}
1619                 rabbit_ipv6: {get_input: rabbit_ipv6}
1620                 # Redis
1621                 redis::bind: {get_input: redis_network}
1622                 redis::requirepass: {get_input: redis_password}
1623                 redis::masterauth: {get_input: redis_password}
1624                 redis::sentinel_auth_pass: {get_input: redis_password}
1625                 redis_vip: {get_input: redis_vip}
1626                 # Firewall
1627                 tripleo::firewall::manage_firewall: {get_input: manage_firewall}
1628                 tripleo::firewall::purge_firewall_rules: {get_input: purge_firewall_rules}
1629                 # Misc
1630                 memcached::listen_ip: {get_input: memcached_network}
1631                 neutron_public_interface_ip: {get_input: neutron_public_interface_ip}
1632                 ntp::servers: {get_input: ntp_servers}
1633                 timezone::timezone: {get_input: timezone}
1634                 control_virtual_interface: {get_input: control_virtual_interface}
1635                 public_virtual_interface: {get_input: public_virtual_interface}
1636                 tripleo::loadbalancer::control_virtual_interface: {get_input: control_virtual_interface}
1637                 tripleo::loadbalancer::public_virtual_interface: {get_input: public_virtual_interface}
1638                 tripleo::loadbalancer::haproxy_log_address: {get_input: haproxy_log_address}
1639                 tripleo::loadbalancer::service_certificate: {get_attr: [NodeTLSData, deployed_ssl_certificate_path]}
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]}