28aac934ff667568857484588769dcc67191f73e
[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_stack_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     description: The password for RabbitMQ
606     type: string
607     hidden: true
608   RabbitUserName:
609     default: guest
610     description: The username for RabbitMQ
611     type: string
612   RabbitClientUseSSL:
613     default: false
614     description: >
615         Rabbit client subscriber parameter to specify
616         an SSL connection to the RabbitMQ host.
617     type: string
618   RabbitClientPort:
619     default: 5672
620     description: Set rabbit subscriber port, change this if using SSL
621     type: number
622   RabbitFDLimit:
623     default: 16384
624     description: Configures RabbitMQ FD limit
625     type: string
626   RabbitIPv6:
627     default: false
628     description: Enable IPv6 in RabbitMQ
629     type: boolean
630   RedisPassword:
631     type: string
632     description: The password to access the Redis service
633     hidden: true
634   RedisVirtualIP:
635     type: string
636     default: ''  # Has to be here because of the ignored empty value bug
637   RedisVirtualIPUri:
638     type: string
639     default: ''  # Has to be here because of the ignored empty value bug
640     description: An IP address which is wrapped in brackets in case of IPv6
641   SnmpdReadonlyUserName:
642     default: ro_snmp_user
643     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
644     type: string
645   SnmpdReadonlyUserPassword:
646     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
647     type: string
648     hidden: true
649   SwiftHashSuffix:
650     description: A random string to be used as a salt when hashing to determine mappings
651       in the ring.
652     hidden: true
653     type: string
654   SwiftMountCheck:
655     default: 'false'
656     description: Value of mount_check in Swift account/container/object -server.conf
657     type: boolean
658   SwiftMinPartHours:
659     type: number
660     default: 1
661     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
662   SwiftPartPower:
663     default: 10
664     description: Partition Power to use when building Swift rings
665     type: number
666   SwiftPassword:
667     description: The password for the swift service account, used by the swift proxy
668       services.
669     hidden: true
670     type: string
671   SwiftProxyVirtualIP:
672     type: string
673     default: ''
674   SwiftReplicas:
675     type: number
676     default: 3
677     description: How many replicas to use in the swift rings.
678   SwiftWorkers:
679     default: 0
680     description: Number of workers for Swift service.
681     type: number
682   TimeZone:
683     default: 'UTC'
684     description: The timezone to be set on controller nodes.
685     type: string
686   UpgradeLevelNovaCompute:
687     type: string
688     description: Nova Compute upgrade level
689     default: ''
690   VirtualIP: # DEPRECATED: use per service settings instead
691     type: string
692     default: ''  # Has to be here because of the ignored empty value bug
693   HeatApiVirtualIP:
694     type: string
695     default: ''
696   HeatApiVirtualIPUri:
697     type: string
698     default: ''
699   GlanceApiVirtualIP:
700     type: string
701     default: ''
702   GlanceRegistryVirtualIP:
703     type: string
704     default: ''
705   MysqlVirtualIP:
706     type: string
707     default: ''
708   MysqlVirtualIPUri:
709     type: string
710     default: ''
711   KeystoneAdminApiVirtualIP:
712     type: string
713     default: ''
714   KeystonePublicApiVirtualIP:
715     type: string
716     default: ''
717   NeutronApiVirtualIP:
718     type: string
719     default: ''
720   EnablePackageInstall:
721     default: 'false'
722     description: Set to true to enable package installation via Puppet
723     type: boolean
724   ServiceNetMap:
725     default: {}
726     description: Mapping of service_name -> network name. Typically set
727                  via parameter_defaults in the resource registry.
728     type: json
729   EndpointMap:
730     default: {}
731     description: Mapping of service endpoint -> protocol. Typically set
732                  via parameter_defaults in the resource registry.
733     type: json
734   UpdateIdentifier:
735     default: ''
736     type: string
737     description: >
738       Setting to a previously unused value during stack-update will trigger
739       package update on all nodes
740   Hostname:
741     type: string
742     default: '' # Defaults to Heat created hostname
743   HostnameMap:
744     type: json
745     default: {}
746     description: Optional mapping to override hostnames
747   NetworkDeploymentActions:
748     type: comma_delimited_list
749     description: >
750       Heat action when to apply network configuration changes
751     default: ['CREATE']
752   NodeIndex:
753     type: number
754     default: 0
755   SoftwareConfigTransport:
756     default: POLL_SERVER_CFN
757     description: |
758       How the server should receive the metadata required for software configuration.
759     type: string
760     constraints:
761     - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
762   CloudDomain:
763     default: ''
764     type: string
765     description: >
766       The DNS domain used for the hosts. This should match the dhcp_domain
767       configured in the Undercloud neutron. Defaults to localdomain.
768   ServerMetadata:
769     default: {}
770     description: >
771       Extra properties or metadata passed to Nova for the created nodes in
772       the overcloud. It's accessible via the Nova metadata API.
773     type: json
774   SchedulerHints:
775     type: json
776     description: Optional scheduler hints to pass to nova
777     default: {}
778
779 resources:
780
781   Controller:
782     type: OS::Nova::Server
783     properties:
784       image: {get_param: Image}
785       image_update_policy: {get_param: ImageUpdatePolicy}
786       flavor: {get_param: Flavor}
787       key_name: {get_param: KeyName}
788       networks:
789         - network: ctlplane
790       user_data_format: SOFTWARE_CONFIG
791       user_data: {get_resource: UserData}
792       name:
793         str_replace:
794             template: {get_param: Hostname}
795             params: {get_param: HostnameMap}
796       software_config_transport: {get_param: SoftwareConfigTransport}
797       metadata: {get_param: ServerMetadata}
798       scheduler_hints: {get_param: SchedulerHints}
799
800   # Combine the NodeAdminUserData and NodeUserData mime archives
801   UserData:
802     type: OS::Heat::MultipartMime
803     properties:
804       parts:
805       - config: {get_resource: NodeAdminUserData}
806         type: multipart
807       - config: {get_resource: NodeUserData}
808         type: multipart
809
810   # Creates the "heat-admin" user if configured via the environment
811   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
812   NodeAdminUserData:
813     type: OS::TripleO::NodeAdminUserData
814
815   # For optional operator additional userdata
816   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
817   NodeUserData:
818     type: OS::TripleO::NodeUserData
819
820   ExternalPort:
821     type: OS::TripleO::Controller::Ports::ExternalPort
822     properties:
823       IPPool: {get_param: ControllerIPs}
824       NodeIndex: {get_param: NodeIndex}
825       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
826
827   InternalApiPort:
828     type: OS::TripleO::Controller::Ports::InternalApiPort
829     properties:
830       IPPool: {get_param: ControllerIPs}
831       NodeIndex: {get_param: NodeIndex}
832       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
833
834   StoragePort:
835     type: OS::TripleO::Controller::Ports::StoragePort
836     properties:
837       IPPool: {get_param: ControllerIPs}
838       NodeIndex: {get_param: NodeIndex}
839       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
840
841   StorageMgmtPort:
842     type: OS::TripleO::Controller::Ports::StorageMgmtPort
843     properties:
844       IPPool: {get_param: ControllerIPs}
845       NodeIndex: {get_param: NodeIndex}
846       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
847
848   TenantPort:
849     type: OS::TripleO::Controller::Ports::TenantPort
850     properties:
851       IPPool: {get_param: ControllerIPs}
852       NodeIndex: {get_param: NodeIndex}
853       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
854
855   ManagementPort:
856     type: OS::TripleO::Controller::Ports::ManagementPort
857     properties:
858       IPPool: {get_param: ControllerIPs}
859       NodeIndex: {get_param: NodeIndex}
860       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
861
862   NetIpMap:
863     type: OS::TripleO::Network::Ports::NetIpMap
864     properties:
865       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
866       ExternalIp: {get_attr: [ExternalPort, ip_address]}
867       ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
868       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
869       InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
870       StorageIp: {get_attr: [StoragePort, ip_address]}
871       StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
872       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
873       StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
874       TenantIp: {get_attr: [TenantPort, ip_address]}
875       TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
876       ManagementIp: {get_attr: [ManagementPort, ip_address]}
877       ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
878
879   NetIpSubnetMap:
880     type: OS::TripleO::Network::Ports::NetIpSubnetMap
881     properties:
882       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
883       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
884       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
885       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
886       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
887       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
888       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
889
890   NetworkConfig:
891     type: OS::TripleO::Controller::Net::SoftwareConfig
892     properties:
893       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
894       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
895       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
896       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
897       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
898       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
899       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
900
901   NetworkDeployment:
902     type: OS::TripleO::SoftwareDeployment
903     properties:
904       name: NetworkDeployment
905       config: {get_resource: NetworkConfig}
906       server: {get_resource: Controller}
907       actions: {get_param: NetworkDeploymentActions}
908       input_values:
909         bridge_name: br-ex
910         interface_name: {get_param: NeutronPublicInterface}
911
912   # Resource for site-specific injection of root certificate
913   NodeTLSCAData:
914     depends_on: NetworkDeployment
915     type: OS::TripleO::NodeTLSCAData
916     properties:
917       server: {get_resource: Controller}
918
919   # Resource for site-specific passing of private keys/certificates
920   NodeTLSData:
921     depends_on: NodeTLSCAData
922     type: OS::TripleO::NodeTLSData
923     properties:
924       server: {get_resource: Controller}
925       NodeIndex: {get_param: NodeIndex}
926
927
928   ControllerDeployment:
929     type: OS::TripleO::SoftwareDeployment
930     depends_on: NetworkDeployment
931     properties:
932       name: ControllerDeployment
933       config: {get_resource: ControllerConfig}
934       server: {get_resource: Controller}
935       input_values:
936         bootstack_nodeid: {get_attr: [Controller, name]}
937         ceilometer_workers: {get_param: CeilometerWorkers}
938         cinder_workers: {get_param: CinderWorkers}
939         glance_workers: {get_param: GlanceWorkers}
940         heat_workers: {get_param: HeatWorkers}
941         keystone_workers: {get_param: KeystoneWorkers}
942         nova_workers: {get_param: NovaWorkers}
943         neutron_workers: {get_param: NeutronWorkers}
944         swift_workers: {get_param: SwiftWorkers}
945         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
946         neutron_enable_l2pop: {get_param: NeutronEnableL2Pop}
947         neutron_enable_isolated_metadata: {get_param: NeutronEnableIsolatedMetadata}
948         haproxy_log_address: {get_param: HAProxySyslogAddress}
949         haproxy_stats_password: {get_param: HAProxyStatsPassword}
950         haproxy_stats_user: {get_param: HAProxyStatsUser}
951         heat.watch_server_url:
952           list_join:
953             - ''
954             - - 'http://'
955               - {get_param: HeatApiVirtualIPUri}
956               - ':8003'
957         heat.metadata_server_url:
958           list_join:
959             - ''
960             - - 'http://'
961               - {get_param: HeatApiVirtualIPUri}
962               - ':8000'
963         heat.waitcondition_server_url:
964           list_join:
965             - ''
966             - - 'http://'
967               - {get_param: HeatApiVirtualIPUri}
968               - ':8000/v1/waitcondition'
969         heat_auth_encryption_key: {get_param: HeatAuthEncryptionKey}
970         heat_enable_db_purge: {get_param: HeatEnableDBPurge}
971         horizon_allowed_hosts: {get_param: HorizonAllowedHosts}
972         horizon_secret: {get_param: HorizonSecret}
973         admin_email: {get_param: AdminEmail}
974         admin_password: {get_param: AdminPassword}
975         admin_token: {get_param: AdminToken}
976         neutron_public_interface_ip: {get_param: NeutronPublicInterfaceIP}
977         debug: {get_param: Debug}
978         cinder_enable_db_purge: {get_param: CinderEnableDBPurge}
979         cinder_enable_nfs_backend: {get_param: CinderEnableNfsBackend}
980         cinder_enable_rbd_backend: {get_param: CinderEnableRbdBackend}
981         cinder_nfs_mount_options: {get_param: CinderNfsMountOptions}
982         cinder_nfs_servers:
983           str_replace:
984             template: SERVERS
985             params:
986               SERVERS: {get_param: CinderNfsServers}
987         cinder_lvm_loop_device_size: {get_param: CinderLVMLoopDeviceSize}
988         cinder_password: {get_param: CinderPassword}
989         cinder_enable_iscsi_backend: {get_param: CinderEnableIscsiBackend}
990         cinder_iscsi_helper: {get_param: CinderISCSIHelper}
991         cinder_backend_config: {get_param: CinderBackendConfig}
992         cinder_dsn:
993           list_join:
994             - ''
995             - - 'mysql+pymysql://cinder:'
996               - {get_param: CinderPassword}
997               - '@'
998               - {get_param: MysqlVirtualIPUri}
999               - '/cinder'
1000         glance_port: {get_param: [EndpointMap, GlanceInternal, port]}
1001         glance_password: {get_param: GlancePassword}
1002         glance_backend: {get_param: GlanceBackend}
1003         glance_file_pcmk_device: {get_param: GlanceFilePcmkDevice}
1004         glance_file_pcmk_fstype: {get_param: GlanceFilePcmkFstype}
1005         glance_file_pcmk_manage: {get_param: GlanceFilePcmkManage}
1006         glance_file_pcmk_options: {get_param: GlanceFilePcmkOptions}
1007         glance_notifier_strategy: {get_param: GlanceNotifierStrategy}
1008         glance_log_file: {get_param: GlanceLogFile}
1009         glance_dsn:
1010           list_join:
1011             - ''
1012             - - 'mysql+pymysql://glance:'
1013               - {get_param: GlancePassword}
1014               - '@'
1015               - {get_param: MysqlVirtualIPUri}
1016               - '/glance'
1017         heat_password: {get_param: HeatPassword}
1018         heat_stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
1019         heat_dsn:
1020           list_join:
1021             - ''
1022             - - 'mysql+pymysql://heat:'
1023               - {get_param: HeatPassword}
1024               - '@'
1025               - {get_param: MysqlVirtualIPUri}
1026               - '/heat'
1027         keystone_ca_certificate: {get_param: KeystoneCACertificate}
1028         keystone_signing_key: {get_param: KeystoneSigningKey}
1029         keystone_signing_certificate: {get_param: KeystoneSigningCertificate}
1030         keystone_ssl_certificate: {get_param: KeystoneSSLCertificate}
1031         keystone_ssl_certificate_key: {get_param: KeystoneSSLCertificateKey}
1032         keystone_notification_driver: {get_param: KeystoneNotificationDriver}
1033         keystone_notification_format: {get_param: KeystoneNotificationFormat}
1034         keystone_enable_db_purge: {get_param: KeystoneEnableDBPurge}
1035         keystone_dsn:
1036           list_join:
1037             - ''
1038             - - 'mysql+pymysql://keystone:'
1039               - {get_param: AdminToken}
1040               - '@'
1041               - {get_param: MysqlVirtualIPUri}
1042               - '/keystone'
1043         keystone_identity_uri: { get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix] }
1044         keystone_auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri] }
1045         keystone_public_url: { get_param: [EndpointMap, KeystonePublic, uri_no_suffix] }
1046         keystone_internal_url: { get_param: [EndpointMap, KeystoneInternal, uri_no_suffix] }
1047         keystone_ec2_uri: { get_param: [EndpointMap, KeystoneEC2, uri] }
1048         enable_fencing: {get_param: EnableFencing}
1049         enable_galera: {get_param: EnableGalera}
1050         enable_load_balancer: {get_param: EnableLoadBalancer}
1051         enable_ceph_storage: {get_param: EnableCephStorage}
1052         enable_swift_storage: {get_param: EnableSwiftStorage}
1053         manage_firewall: {get_param: ManageFirewall}
1054         purge_firewall_rules: {get_param: PurgeFirewallRules}
1055         mysql_innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
1056         mysql_max_connections: {get_param: MysqlMaxConnections}
1057         mysql_root_password: {get_param: MysqlRootPassword}
1058         mysql_cluster_name:
1059           str_replace:
1060             template: tripleo-CLUSTER
1061             params:
1062               CLUSTER: {get_param: MysqlClusterUniquePart}
1063         neutron_flat_networks:
1064           str_replace:
1065             template: NETWORKS
1066             params:
1067               NETWORKS: {get_param: NeutronFlatNetworks}
1068         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
1069         neutron_agent_mode: {get_param: NeutronAgentMode}
1070         neutron_router_distributed: {get_param: NeutronDVR}
1071         neutron_core_plugin: {get_param: NeutronCorePlugin}
1072         neutron_service_plugins:
1073           str_replace:
1074             template: PLUGINS
1075             params:
1076               PLUGINS: {get_param: NeutronServicePlugins}
1077         neutron_type_drivers:
1078           str_replace:
1079             template: DRIVERS
1080             params:
1081               DRIVERS: {get_param: NeutronTypeDrivers}
1082         neutron_enable_dhcp_agent: {get_param: NeutronEnableDHCPAgent}
1083         neutron_enable_l3_agent: {get_param: NeutronEnableL3Agent}
1084         neutron_enable_metadata_agent: {get_param: NeutronEnableMetadataAgent}
1085         neutron_enable_ovs_agent: {get_param: NeutronEnableOVSAgent}
1086         neutron_mechanism_drivers:
1087           str_replace:
1088             template: MECHANISMS
1089             params:
1090               MECHANISMS: {get_param: NeutronMechanismDrivers}
1091         neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
1092         neutron_l3_ha: {get_param: NeutronL3HA}
1093         neutron_dhcp_agents_per_network: {get_param: NeutronDhcpAgentsPerNetwork}
1094         neutron_network_vlan_ranges:
1095           str_replace:
1096             template: RANGES
1097             params:
1098               RANGES: {get_param: NeutronNetworkVLANRanges}
1099         neutron_bridge_mappings:
1100           str_replace:
1101             template: MAPPINGS
1102             params:
1103               MAPPINGS: {get_param: NeutronBridgeMappings}
1104         neutron_external_network_bridge: {get_param: NeutronExternalNetworkBridge}
1105         neutron_public_interface: {get_param: NeutronPublicInterface}
1106         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
1107         neutron_public_interface_default_route: {get_param: NeutronPublicInterfaceDefaultRoute}
1108         neutron_public_interface_tag: {get_param: NeutronPublicInterfaceTag}
1109         neutron_tunnel_id_ranges:
1110           str_replace:
1111             template: RANGES
1112             params:
1113               RANGES: {get_param: NeutronTunnelIdRanges}
1114         neutron_vni_ranges:
1115           str_replace:
1116             template: RANGES
1117             params:
1118               RANGES: {get_param: NeutronVniRanges}
1119         neutron_tenant_network_types:
1120           str_replace:
1121             template: TYPES
1122             params:
1123               TYPES: {get_param: NeutronNetworkType}
1124         neutron_tunnel_types:
1125           str_replace:
1126             template: TYPES
1127             params:
1128               TYPES: {get_param: NeutronTunnelTypes}
1129         neutron_plugin_extensions:
1130           str_replace:
1131             template: PLUGIN_EXTENSIONS
1132             params:
1133               PLUGIN_EXTENSIONS: {get_param: NeutronPluginExtensions}
1134         neutron_agent_extensions:
1135           str_replace:
1136             template: AGENT_EXTENSIONS
1137             params:
1138               AGENT_EXTENSIONS: {get_param: NeutronAgentExtensions}
1139         neutron_password: {get_param: NeutronPassword}
1140         neutron_tenant_mtu: {get_param: NeutronTenantMtu}
1141         neutron_dnsmasq_options: {get_param: NeutronDnsmasqOptions}
1142         neutron_dsn:
1143           list_join:
1144             - ''
1145             - - 'mysql+pymysql://neutron:'
1146               - {get_param: NeutronPassword}
1147               - '@'
1148               - {get_param: MysqlVirtualIPUri}
1149               - '/ovs_neutron?charset=utf8'
1150         neutron_internal_url: { get_param: [ EndpointMap, NeutronInternal, uri ] }
1151         neutron_public_url: { get_param: [ EndpointMap, NeutronPublic, uri ] }
1152         neutron_admin_url: { get_param: [ EndpointMap, NeutronAdmin, uri ] }
1153         neutron_auth_url: { get_param: [ EndpointMap, KeystoneV3Admin, uri ] }
1154         nova_internal_url: { get_param: [ EndpointMap, NovaInternal, uri ] }
1155         ceilometer_backend: {get_param: CeilometerBackend}
1156         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
1157         ceilometer_password: {get_param: CeilometerPassword}
1158         ceilometer_store_events: {get_param: CeilometerStoreEvents}
1159         ceilometer_coordination_url:
1160           list_join:
1161             - ''
1162             - - 'redis://'
1163               - {get_param: RedisVirtualIPUri}
1164               - ':6379/?password='
1165               - {get_param: RedisPassword}
1166         ceilometer_dsn:
1167           list_join:
1168             - ''
1169             - - 'mysql+pymysql://ceilometer:'
1170               - {get_param: CeilometerPassword}
1171               - '@'
1172               - {get_param: MysqlVirtualIPUri}
1173               - '/ceilometer'
1174         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
1175         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
1176         nova_enable_db_purge: {get_param: NovaEnableDBPurge}
1177         nova_ipv6: {get_param: NovaIPv6}
1178         corosync_ipv6: {get_param: CorosyncIPv6}
1179         nova_password: {get_param: NovaPassword}
1180         nova_dsn:
1181           list_join:
1182             - ''
1183             - - 'mysql+pymysql://nova:'
1184               - {get_param: NovaPassword}
1185               - '@'
1186               - {get_param: MysqlVirtualIPUri}
1187               - '/nova'
1188         nova_api_dsn:
1189           list_join:
1190             - ''
1191             - - 'mysql+pymysql://nova_api:'
1192               - {get_param: NovaPassword}
1193               - '@'
1194               - {get_param: MysqlVirtualIPUri}
1195               - '/nova_api'
1196         upgrade_level_nova_compute: {get_param: UpgradeLevelNovaCompute}
1197         instance_name_template: {get_param: InstanceNameTemplate}
1198         fencing_config: {get_param: FencingConfig}
1199         pcsd_password: {get_param: PcsdPassword}
1200         rabbit_username: {get_param: RabbitUserName}
1201         rabbit_password: {get_param: RabbitPassword}
1202         rabbit_cookie: {get_param: RabbitCookie}
1203         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
1204         rabbit_client_port: {get_param: RabbitClientPort}
1205         rabbit_ipv6: {get_param: RabbitIPv6}
1206         rabbit_fd_limit: {get_param: RabbitFDLimit}
1207         mongodb_no_journal: {get_param: MongoDbNoJournal}
1208         mongodb_ipv6: {get_param: MongoDbIPv6}
1209         ntp_servers: {get_param: NtpServer}
1210         timezone: {get_param: TimeZone}
1211         control_virtual_interface: {get_param: ControlVirtualInterface}
1212         public_virtual_interface: {get_param: PublicVirtualInterface}
1213         swift_hash_suffix: {get_param: SwiftHashSuffix}
1214         swift_password: {get_param: SwiftPassword}
1215         swift_part_power: {get_param: SwiftPartPower}
1216         swift_replicas: {get_param: SwiftReplicas}
1217         swift_min_part_hours: {get_param: SwiftMinPartHours}
1218         swift_mount_check: {get_param: SwiftMountCheck}
1219         enable_package_install: {get_param: EnablePackageInstall}
1220         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
1221         sahara_password: {get_param: SaharaPassword}
1222         sahara_dsn:
1223           list_join:
1224             - ''
1225             - - 'mysql://sahara:'
1226               - {get_param: SaharaPassword}
1227               - '@'
1228               - {get_param: MysqlVirtualIPUri}
1229               - '/sahara'
1230         swift_proxy_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1231         swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
1232         cinder_iscsi_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderIscsiNetwork]}]}
1233         cinder_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1234         glance_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1235         glance_registry_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1236         glance_api_servers: { get_param: [EndpointMap, GlanceInternal, uri]}
1237         glance_registry_host: {get_param: GlanceRegistryVirtualIP}
1238         heat_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1239         keystone_public_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1240         keystone_admin_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1241         keystone_region: {get_param: KeystoneRegion}
1242         mongo_db_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
1243         neutron_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1244         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
1245         ceilometer_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1246         nova_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1247         nova_metadata_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1248         horizon_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1249         rabbitmq_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1250         redis_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
1251         redis_password: {get_param: RedisPassword}
1252         redis_vip: {get_param: RedisVirtualIP}
1253         sahara_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1254         memcached_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
1255         mysql_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1256         mysql_virtual_ip: {get_param: MysqlVirtualIP}
1257         ceph_cluster_network: {get_attr: [NetIpSubnetMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephClusterNetwork]}]}
1258         ceph_public_network: {get_attr: [NetIpSubnetMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
1259         ceph_public_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
1260
1261   # Map heat metadata into hiera datafiles
1262   ControllerConfig:
1263     type: OS::Heat::StructuredConfig
1264     properties:
1265       group: os-apply-config
1266       config:
1267         hiera:
1268           hierarchy:
1269             - '"%{::uuid}"'
1270             - heat_config_%{::deploy_config_name}
1271             - controller_extraconfig
1272             - extraconfig
1273             - controller
1274             - database
1275             - object
1276             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
1277             - ceph_cluster # provided by CephClusterConfig
1278             - ceph
1279             - bootstrap_node # provided by BootstrapNodeConfig
1280             - all_nodes # provided by allNodesConfig
1281             - vip_data # provided by vip-config
1282             - '"%{::osfamily}"'
1283             - common
1284             - cinder_dellsc_data # Optionally provided by ControllerExtraConfigPre
1285             - cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
1286             - cinder_eqlx_data # Optionally provided by ControllerExtraConfigPre
1287             - neutron_bigswitch_data # Optionally provided by ControllerExtraConfigPre
1288             - neutron_cisco_data # Optionally provided by ControllerExtraConfigPre
1289             - cisco_n1kv_data # Optionally provided by ControllerExtraConfigPre
1290             - neutron_nuage_data # Optionally provided by ControllerExtraConfigPre
1291             - midonet_data #Optionally provided by AllNodesExtraConfig
1292             - neutron_opencontrail_data # Optionally provided by ControllerExtraConfigPre
1293           datafiles:
1294             controller_extraconfig:
1295               mapped_data: {get_param: ControllerExtraConfig}
1296             extraconfig:
1297               mapped_data: {get_param: ExtraConfig}
1298             common:
1299               raw_data: {get_file: hieradata/common.yaml}
1300             ceph:
1301               raw_data: {get_file: hieradata/ceph.yaml}
1302               mapped_data:
1303                 ceph::profile::params::cluster_network: {get_input: ceph_cluster_network}
1304                 ceph::profile::params::public_network: {get_input: ceph_public_network}
1305                 ceph::profile::params::public_addr: {get_input: ceph_public_ip}
1306             database:
1307               raw_data: {get_file: hieradata/database.yaml}
1308             object:
1309               raw_data: {get_file: hieradata/object.yaml}
1310             controller:
1311               raw_data: {get_file: hieradata/controller.yaml}
1312               mapped_data: # data supplied directly to this deployment configuration, etc
1313                 bootstack_nodeid: {get_input: bootstack_nodeid}
1314
1315                 # Pacemaker
1316                 enable_fencing: {get_input: enable_fencing}
1317                 enable_load_balancer: {get_input: enable_load_balancer}
1318                 hacluster_pwd: {get_input: pcsd_password}
1319                 corosync_ipv6: {get_input: corosync_ipv6}
1320                 tripleo::fencing::config: {get_input: fencing_config}
1321
1322                 # Swift
1323                 swift::proxy::proxy_local_net_ip: {get_input: swift_proxy_network}
1324                 swift::proxy::authtoken::auth_uri: {get_input: keystone_auth_uri}
1325                 swift::proxy::authtoken::identity_uri: {get_input: keystone_identity_uri}
1326                 swift::storage::all::storage_local_net_ip: {get_input: swift_management_network}
1327                 swift::swift_hash_suffix: {get_input: swift_hash_suffix}
1328                 swift::proxy::authtoken::admin_password: {get_input: swift_password}
1329                 swift::proxy::workers: {get_input: swift_workers}
1330                 tripleo::ringbuilder::part_power: {get_input: swift_part_power}
1331                 tripleo::ringbuilder::replicas: {get_input: swift_replicas}
1332                 tripleo::ringbuilder::min_part_hours: {get_input: swift_min_part_hours}
1333                 swift_mount_check: {get_input: swift_mount_check}
1334
1335                 # NOTE(dprince): build_ring support is currently not wired in.
1336                 # See: https://review.openstack.org/#/c/109225/
1337                 tripleo::ringbuilder::build_ring: True
1338
1339                 # Cinder
1340                 cinder_enable_db_purge: {get_input: cinder_enable_db_purge}
1341                 cinder_enable_nfs_backend: {get_input: cinder_enable_nfs_backend}
1342                 cinder_enable_rbd_backend: {get_input: cinder_enable_rbd_backend}
1343                 cinder_nfs_mount_options: {get_input: cinder_nfs_mount_options}
1344                 cinder_nfs_servers: {get_input: cinder_nfs_servers}
1345                 cinder_lvm_loop_device_size: {get_input: cinder_lvm_loop_device_size}
1346                 cinder_iscsi_helper: {get_input: cinder_iscsi_helper}
1347                 cinder_iscsi_ip_address: {get_input: cinder_iscsi_network}
1348                 cinder::database_connection: {get_input: cinder_dsn}
1349                 cinder::api::keystone_password: {get_input: cinder_password}
1350                 cinder::api::auth_uri: {get_input: keystone_auth_uri}
1351                 cinder::api::identity_uri: {get_input: keystone_identity_uri}
1352                 cinder::api::bind_host: {get_input: cinder_api_network}
1353                 cinder::rabbit_userid: {get_input: rabbit_username}
1354                 cinder::rabbit_password: {get_input: rabbit_password}
1355                 cinder::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1356                 cinder::rabbit_port: {get_input: rabbit_client_port}
1357                 cinder::debug: {get_input: debug}
1358                 cinder_enable_iscsi_backend: {get_input: cinder_enable_iscsi_backend}
1359                 cinder::glance::glance_api_servers: {get_input: glance_api_servers}
1360                 cinder_backend_config: {get_input: CinderBackendConfig}
1361                 cinder::db::mysql::password: {get_input: cinder_password}
1362
1363                 # Glance
1364                 glance::api::bind_port: {get_input: glance_port}
1365                 glance::api::bind_host: {get_input: glance_api_network}
1366                 glance::api::auth_uri: {get_input: keystone_auth_uri}
1367                 glance::api::identity_uri: {get_input: keystone_identity_uri}
1368                 glance::api::registry_host: {get_input: glance_registry_host}
1369                 glance::api::keystone_password: {get_input: glance_password}
1370                 glance::api::debug: {get_input: debug}
1371                 glance::api::workers: {get_input: glance_workers}
1372                 glance_notifier_strategy: {get_input: glance_notifier_strategy}
1373                 glance_log_file: {get_input: glance_log_file}
1374                 glance_log_file: {get_input: glance_log_file}
1375                 glance::api::database_connection: {get_input: glance_dsn}
1376                 glance::registry::keystone_password: {get_input: glance_password}
1377                 glance::registry::database_connection: {get_input: glance_dsn}
1378                 glance::registry::bind_host: {get_input: glance_registry_network}
1379                 glance::registry::auth_uri: {get_input: keystone_auth_uri}
1380                 glance::registry::identity_uri: {get_input: keystone_identity_uri}
1381                 glance::registry::debug: {get_input: debug}
1382                 glance::backend::swift::swift_store_auth_address: {get_input: keystone_auth_uri}
1383                 glance::registry::workers: {get_input: glance_workers}
1384                 glance::backend::swift::swift_store_user: service:glance
1385                 glance::backend::swift::swift_store_key: {get_input: glance_password}
1386                 glance_backend: {get_input: glance_backend}
1387                 glance::db::mysql::password: {get_input: glance_password}
1388                 glance_file_pcmk_device: {get_input: glance_file_pcmk_device}
1389                 glance_file_pcmk_fstype: {get_input: glance_file_pcmk_fstype}
1390                 glance_file_pcmk_manage: {get_input: glance_file_pcmk_manage}
1391                 glance_file_pcmk_options: {get_input: glance_file_pcmk_options}
1392                 glance::notify::rabbitmq::rabbit_userid: {get_input: rabbit_username}
1393                 glance::notify::rabbitmq::rabbit_password: {get_input: rabbit_password}
1394                 glance::notify::rabbitmq::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1395
1396                 # Heat
1397                 heat_stack_domain_admin_password: {get_input: heat_stack_domain_admin_password}
1398                 heat::engine::heat_watch_server_url: {get_input: heat.watch_server_url}
1399                 heat::engine::heat_metadata_server_url: {get_input: heat.metadata_server_url}
1400                 heat::engine::heat_waitcondition_server_url: {get_input: heat.waitcondition_server_url}
1401                 heat::engine::auth_encryption_key: {get_input: heat_auth_encryption_key}
1402                 heat::rabbit_userid: {get_input: rabbit_username}
1403                 heat::rabbit_password: {get_input: rabbit_password}
1404                 heat::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1405                 heat::rabbit_port: {get_input: rabbit_client_port}
1406                 heat::auth_uri: {get_input: keystone_auth_uri}
1407                 heat::keystone_ec2_uri: {get_input: keystone_ec2_uri}
1408                 heat::identity_uri: {get_input: keystone_identity_uri}
1409                 heat::keystone_password: {get_input: heat_password}
1410                 heat::api::bind_host: {get_input: heat_api_network}
1411                 heat::api::workers: {get_input: heat_workers}
1412                 heat::api_cloudwatch::bind_host: {get_input: heat_api_network}
1413                 heat::api_cloudwatch::workers: {get_input: heat_workers}
1414                 heat::api_cfn::bind_host: {get_input: heat_api_network}
1415                 heat::api_cfn::workers: {get_input: heat_workers}
1416                 heat::database_connection: {get_input: heat_dsn}
1417                 heat::debug: {get_input: debug}
1418                 heat::db::mysql::password: {get_input: heat_password}
1419                 heat_enable_db_purge: {get_input: heat_enable_db_purge}
1420                 heat::keystone::domain::domain_password: {get_input: heat_stack_domain_admin_password}
1421
1422                 # Keystone
1423                 keystone::admin_token: {get_input: admin_token}
1424                 keystone::roles::admin::password: {get_input: admin_password}
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::requirepass: {get_input: redis_password}
1624                 redis::masterauth: {get_input: redis_password}
1625                 redis::sentinel_auth_pass: {get_input: redis_password}
1626                 redis_vip: {get_input: redis_vip}
1627                 # Firewall
1628                 tripleo::firewall::manage_firewall: {get_input: manage_firewall}
1629                 tripleo::firewall::purge_firewall_rules: {get_input: purge_firewall_rules}
1630                 # Misc
1631                 memcached::listen_ip: {get_input: memcached_network}
1632                 neutron_public_interface_ip: {get_input: neutron_public_interface_ip}
1633                 ntp::servers: {get_input: ntp_servers}
1634                 timezone::timezone: {get_input: timezone}
1635                 control_virtual_interface: {get_input: control_virtual_interface}
1636                 public_virtual_interface: {get_input: public_virtual_interface}
1637                 tripleo::loadbalancer::control_virtual_interface: {get_input: control_virtual_interface}
1638                 tripleo::loadbalancer::public_virtual_interface: {get_input: public_virtual_interface}
1639                 tripleo::loadbalancer::haproxy_log_address: {get_input: haproxy_log_address}
1640                 tripleo::loadbalancer::service_certificate: {get_attr: [NodeTLSData, deployed_ssl_certificate_path]}
1641                 tripleo::loadbalancer::haproxy_stats_user: {get_input: haproxy_stats_user}
1642                 tripleo::loadbalancer::haproxy_stats_password: {get_input: haproxy_stats_password}
1643                 tripleo::packages::enable_install: {get_input: enable_package_install}
1644                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
1645
1646   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
1647   ControllerExtraConfigPre:
1648     depends_on: ControllerDeployment
1649     type: OS::TripleO::ControllerExtraConfigPre
1650     properties:
1651         server: {get_resource: Controller}
1652
1653   # Hook for site-specific additional pre-deployment config,
1654   # applying to all nodes, e.g node registration/unregistration
1655   NodeExtraConfig:
1656     depends_on: [ControllerExtraConfigPre, NodeTLSData]
1657     type: OS::TripleO::NodeExtraConfig
1658     properties:
1659         server: {get_resource: Controller}
1660
1661   UpdateConfig:
1662     type: OS::TripleO::Tasks::PackageUpdate
1663
1664   UpdateDeployment:
1665     type: OS::Heat::SoftwareDeployment
1666     properties:
1667       name: UpdateDeployment
1668       config: {get_resource: UpdateConfig}
1669       server: {get_resource: Controller}
1670       input_values:
1671         update_identifier:
1672           get_param: UpdateIdentifier
1673
1674 outputs:
1675   ip_address:
1676     description: IP address of the server in the ctlplane network
1677     value: {get_attr: [Controller, networks, ctlplane, 0]}
1678   external_ip_address:
1679     description: IP address of the server in the external network
1680     value: {get_attr: [ExternalPort, ip_address]}
1681   internal_api_ip_address:
1682     description: IP address of the server in the internal_api network
1683     value: {get_attr: [InternalApiPort, ip_address]}
1684   storage_ip_address:
1685     description: IP address of the server in the storage network
1686     value: {get_attr: [StoragePort, ip_address]}
1687   storage_mgmt_ip_address:
1688     description: IP address of the server in the storage_mgmt network
1689     value: {get_attr: [StorageMgmtPort, ip_address]}
1690   tenant_ip_address:
1691     description: IP address of the server in the tenant network
1692     value: {get_attr: [TenantPort, ip_address]}
1693   management_ip_address:
1694     description: IP address of the server in the management network
1695     value: {get_attr: [ManagementPort, ip_address]}
1696   hostname:
1697     description: Hostname of the server
1698     value: {get_attr: [Controller, name]}
1699   corosync_node:
1700     description: >
1701       Node object in the format {ip: ..., name: ...} format that the corosync
1702       element expects
1703     value:
1704       ip: {get_attr: [Controller, networks, ctlplane, 0]}
1705       name: {get_attr: [Controller, name]}
1706   hosts_entry:
1707     description: >
1708       Server's IP address and hostname in the /etc/hosts format
1709     value:
1710       str_replace:
1711         template: |
1712           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
1713           EXTERNALIP EXTERNALHOST
1714           INTERNAL_APIIP INTERNAL_APIHOST
1715           STORAGEIP STORAGEHOST
1716           STORAGE_MGMTIP STORAGE_MGMTHOST
1717           TENANTIP TENANTHOST
1718           MANAGEMENTIP MANAGEMENTHOST
1719         params:
1720           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ControllerHostnameResolveNetwork]}]}
1721           DOMAIN: {get_param: CloudDomain}
1722           PRIMARYHOST: {get_attr: [Controller, name]}
1723           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
1724           EXTERNALHOST:
1725             list_join:
1726             - '-'
1727             - - {get_attr: [Controller, name]}
1728               - external
1729           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
1730           INTERNAL_APIHOST:
1731             list_join:
1732             - '-'
1733             - - {get_attr: [Controller, name]}
1734               - internalapi
1735           STORAGEIP: {get_attr: [StoragePort, ip_address]}
1736           STORAGEHOST:
1737             list_join:
1738             - '-'
1739             - - {get_attr: [Controller, name]}
1740               - storage
1741           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
1742           STORAGE_MGMTHOST:
1743             list_join:
1744             - '-'
1745             - - {get_attr: [Controller, name]}
1746               - storagemgmt
1747           TENANTIP: {get_attr: [TenantPort, ip_address]}
1748           TENANTHOST:
1749             list_join:
1750             - '-'
1751             - - {get_attr: [Controller, name]}
1752               - tenant
1753           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
1754           MANAGEMENTHOST:
1755             list_join:
1756             - '-'
1757             - - {get_attr: [Controller, name]}
1758               - management
1759   nova_server_resource:
1760     description: Heat resource handle for the Nova compute server
1761     value:
1762       {get_resource: Controller}
1763   swift_device:
1764     description: Swift device formatted for swift-ring-builder
1765     value:
1766       str_replace:
1767         template: 'r1z1-IP:%PORT%/d1'
1768         params:
1769           IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
1770   swift_proxy_memcache:
1771     description: Swift proxy-memcache value
1772     value:
1773       str_replace:
1774         template: "IP:11211"
1775         params:
1776           IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
1777   config_identifier:
1778     description: identifier which changes if the controller configuration may need re-applying
1779     value:
1780       list_join:
1781         - ','
1782         - - {get_attr: [ControllerDeployment, deploy_stdout]}
1783           - {get_attr: [NodeTLSCAData, deploy_stdout]}
1784           - {get_attr: [NodeTLSData, deploy_stdout]}
1785           - {get_attr: [ControllerExtraConfigPre, deploy_stdout]}
1786           - {get_param: UpdateIdentifier}
1787   tls_key_modulus_md5:
1788     description: MD5 checksum of the TLS Key Modulus
1789     value: {get_attr: [NodeTLSData, key_modulus_md5]}
1790   tls_cert_modulus_md5:
1791     description: MD5 checksum of the TLS Certificate Modulus
1792     value: {get_attr: [NodeTLSData, cert_modulus_md5]}