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