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