Parameterize RabbitMQ FD limit
[apex-tripleo-heat-templates.git] / puppet / controller.yaml
1 heat_template_version: 2015-04-30
2
3 description: >
4   OpenStack controller node configured by Puppet.
5
6 parameters:
7   AdminPassword:
8     default: unset
9     description: The password for the keystone admin account, used for monitoring, querying neutron etc.
10     type: string
11     hidden: true
12   AdminToken:
13     default: unset
14     description: The keystone auth secret and db password.
15     type: string
16     hidden: true
17   CeilometerBackend:
18     default: 'mongodb'
19     description: The ceilometer backend type.
20     type: string
21   CeilometerMeteringSecret:
22     default: unset
23     description: Secret shared by the ceilometer services.
24     type: string
25     hidden: true
26   CeilometerPassword:
27     default: unset
28     description: The password for the ceilometer service  and db account.
29     type: string
30     hidden: true
31   CinderEnableNfsBackend:
32     default: false
33     description: Whether to enable or not the NFS backend for Cinder
34     type: boolean
35   CinderEnableIscsiBackend:
36     default: true
37     description: Whether to enable or not the Iscsi backend for Cinder
38     type: boolean
39   CinderEnableRbdBackend:
40     default: false
41     description: Whether to enable or not the Rbd backend for Cinder
42     type: boolean
43   CinderISCSIHelper:
44     default: tgtadm
45     description: The iSCSI helper to use with cinder.
46     type: string
47   CinderLVMLoopDeviceSize:
48     default: 5000
49     description: The size of the loopback file used by the cinder LVM driver.
50     type: number
51   CinderNfsMountOptions:
52     default: ''
53     description: >
54       Mount options for NFS mounts used by Cinder NFS backend. Effective
55       when CinderEnableNfsBackend is true.
56     type: string
57   CinderNfsServers:
58     default: ''
59     description: >
60       NFS servers used by Cinder NFS backend. Effective when
61       CinderEnableNfsBackend is true.
62     type: comma_delimited_list
63   CinderPassword:
64     default: unset
65     description: The password for the cinder service and db account, used by cinder-api.
66     type: string
67     hidden: true
68   CinderBackendConfig:
69     default: {}
70     description: Contains parameters to configure Cinder backends. Typically
71                  set via parameter_defaults in the resource registry.
72     type: json
73   CloudName:
74     default: ''
75     description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
76     type: string
77   ControllerExtraConfig:
78     default: {}
79     description: |
80       Controller specific hiera configuration data to inject into the cluster.
81     type: json
82   ControlVirtualInterface:
83     default: 'br-ex'
84     description: Interface where virtual ip will be assigned.
85     type: string
86   Debug:
87     default: ''
88     description: Set to True to enable debugging on all services.
89     type: string
90   EnableFencing:
91     default: false
92     description: Whether to enable fencing in Pacemaker or not.
93     type: boolean
94   EnableGalera:
95     default: true
96     description: Whether to use Galera instead of regular MariaDB.
97     type: boolean
98   EnableCephStorage:
99     default: false
100     description: Whether to deploy Ceph Storage (OSD) on the Controller
101     type: boolean
102   EnableSwiftStorage:
103     default: true
104     description: Whether to enable Swift Storage on the Controller
105     type: boolean
106   ExtraConfig:
107     default: {}
108     description: |
109       Additional hieradata to inject into the cluster, note that
110       ControllerExtraConfig takes precedence over ExtraConfig.
111     type: json
112   FencingConfig:
113     default: {}
114     description: |
115       Pacemaker fencing configuration. The JSON should have
116       the following structure:
117         {
118           "devices": [
119             {
120               "agent": "AGENT_NAME",
121               "host_mac": "HOST_MAC_ADDRESS",
122               "params": {"PARAM_NAME": "PARAM_VALUE"}
123             }
124           ]
125         }
126       For instance:
127         {
128           "devices": [
129             {
130               "agent": "fence_xvm",
131               "host_mac": "52:54:00:aa:bb:cc",
132               "params": {
133                 "multicast_address": "225.0.0.12",
134                 "port": "baremetal_0",
135                 "manage_fw": true,
136                 "manage_key_file": true,
137                 "key_file": "/etc/fence_xvm.key",
138                 "key_file_password": "abcdef"
139               }
140             }
141           ]
142         }
143     type: json
144   Flavor:
145     description: Flavor for control nodes to request when deploying.
146     type: string
147     constraints:
148       - custom_constraint: nova.flavor
149   GlanceNotifierStrategy:
150     description: Strategy to use for Glance notification queue
151     type: string
152     default: noop
153   GlanceLogFile:
154     description: The filepath of the file to use for logging messages from Glance.
155     type: string
156     default: ''
157   GlancePassword:
158     default: unset
159     description: The password for the glance service and db account, used by the glance services.
160     type: string
161     hidden: true
162   GlancePort:
163     default: "9292"
164     description: Glance port.
165     type: string
166   GlanceProtocol:
167     default: http
168     description: Protocol to use when connecting to glance, set to https for SSL.
169     type: string
170   GlanceBackend:
171     default: swift
172     description: The short name of the Glance backend to use. Should be one
173       of swift, rbd, or file
174     type: string
175     constraints:
176     - allowed_values: ['swift', 'file', 'rbd']
177   HeatPassword:
178     default: unset
179     description: The password for the Heat service and db account, used by the Heat services.
180     type: string
181     hidden: true
182   HeatStackDomainAdminPassword:
183     description: Password for heat_domain_admin user.
184     type: string
185     default: ''
186     hidden: true
187   HeatAuthEncryptionKey:
188     description: Auth encryption key for heat-engine
189     type: string
190   HorizonAllowedHosts:
191     default: '*'
192     description: A list of IP/Hostname allowed to connect to horizon
193     type: comma_delimited_list
194   HorizonSecret:
195     description: Secret key for Django
196     type: string
197   Image:
198     type: string
199     default: overcloud-control
200     constraints:
201       - custom_constraint: glance.image
202   ImageUpdatePolicy:
203     default: 'REBUILD_PRESERVE_EPHEMERAL'
204     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
205     type: string
206   KeyName:
207     default: default
208     description: Name of an existing EC2 KeyPair to enable SSH access to the instances
209     type: string
210     constraints:
211       - custom_constraint: nova.keypair
212   KeystoneCACertificate:
213     default: ''
214     description: Keystone self-signed certificate authority certificate.
215     type: string
216   KeystoneSigningCertificate:
217     default: ''
218     description: Keystone certificate for verifying token validity.
219     type: string
220   KeystoneSigningKey:
221     default: ''
222     description: Keystone key for signing tokens.
223     type: string
224     hidden: true
225   KeystoneSSLCertificate:
226     default: ''
227     description: Keystone certificate for verifying token validity.
228     type: string
229   KeystoneSSLCertificateKey:
230     default: ''
231     description: Keystone key for signing tokens.
232     type: string
233     hidden: true
234   KeystoneNotificationDriver:
235     description: Comma-separated list of Oslo notification drivers used by Keystone
236     default: ['messaging']
237     type: comma_delimited_list
238   KeystoneNotificationFormat:
239     description: The Keystone notification format
240     default: 'basic'
241     type: string
242     constraints:
243       - allowed_values: [ 'basic', 'cadf' ]
244   MysqlClusterUniquePart:
245     description: A unique identifier of the MySQL cluster the controller is in.
246     type: string
247     default: 'unset'  # Has to be here because of the ignored empty value bug
248     # Drop the validation: https://bugs.launchpad.net/tripleo/+bug/1405446
249     # constraints:
250     # - length: {min: 4, max: 10}
251   MysqlInnodbBufferPoolSize:
252     description: >
253         Specifies the size of the buffer pool in megabytes. Setting to
254         zero should be interpreted as "no value" and will defer to the
255         lower level default.
256     type: number
257     default: 0
258   MysqlMaxConnections:
259     description: Configures MySQL max_connections config setting
260     type: number
261     default: 4096
262   MysqlRootPassword:
263     type: string
264     hidden: true
265     default: ''  # Has to be here because of the ignored empty value bug
266   NeutronExternalNetworkBridge:
267     description: Name of bridge used for external network traffic.
268     type: string
269     default: 'br-ex'
270   NeutronBridgeMappings:
271     description: >
272       The OVS logical->physical bridge mappings to use. See the Neutron
273       documentation for details. Defaults to mapping br-ex - the external
274       bridge on hosts - to a physical name 'datacentre' which can be used
275       to create provider networks (and we use this for the default floating
276       network) - if changing this either use different post-install network
277       scripts or be sure to keep 'datacentre' as a mapping network name.
278     type: string
279     default: "datacentre:br-ex"
280   NeutronDnsmasqOptions:
281     default: 'dhcp-option-force=26,1400'
282     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.
283     type: string
284   NeutronAgentMode:
285     default: 'dvr_snat'
286     description: Agent mode for the neutron-l3-agent on the controller hosts
287     type: string
288   NeutronL3HA:
289     default: 'False'
290     description: Whether to enable l3-agent HA
291     type: string
292   NeutronDhcpAgentsPerNetwork:
293     type: number
294     default: 3
295     description: The number of neutron dhcp agents to schedule per network
296   NeutronDVR:
297     default: 'False'
298     description: Whether to configure Neutron Distributed Virtual Routers
299     type: string
300   NeutronMetadataProxySharedSecret:
301     default: 'unset'
302     description: Shared secret to prevent spoofing
303     type: string
304   NeutronCorePlugin:
305     default: 'ml2'
306     description: |
307         The core plugin for Neutron. The value should be the entrypoint to be loaded
308         from neutron.core_plugins namespace.
309     type: string
310   NeutronServicePlugins:
311     default: "router"
312     description: |
313         Comma-separated list of service plugin entrypoints to be loaded from the
314         neutron.service_plugins namespace.
315     type: comma_delimited_list
316   NeutronTypeDrivers:
317     default: "vxlan,vlan,flat,gre"
318     description: |
319         Comma-separated list of network type driver entrypoints to be loaded.
320     type: comma_delimited_list
321   NeutronMechanismDrivers:
322     default: 'openvswitch'
323     description: |
324         The mechanism drivers for the Neutron tenant network. To specify multiple
325         values, use a comma separated string, like so: 'openvswitch,l2_population'
326     type: string
327   NeutronAllowL3AgentFailover:
328     default: 'True'
329     description: Allow automatic l3-agent failover
330     type: string
331   NeutronEnableTunnelling:
332     type: string
333     default: "True"
334   NeutronFlatNetworks:
335     type: string
336     default: 'datacentre'
337     description: If set, flat networks to configure in neutron plugins.
338   NeutronL3HA:
339     default: 'False'
340     description: Whether to enable l3-agent HA
341     type: string
342   NeutronNetworkType:
343     default: 'vxlan'
344     description: The tenant network type for Neutron, either gre or vxlan.
345     type: string
346   NeutronNetworkVLANRanges:
347     default: 'datacentre'
348     description: >
349       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
350       Neutron documentation for permitted values. Defaults to permitting any
351       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
352     type: comma_delimited_list
353   NeutronPassword:
354     default: unset
355     description: The password for the neutron service and db account, used by neutron agents.
356     type: string
357     hidden: true
358   NeutronPublicInterface:
359     default: nic1
360     description: What interface to bridge onto br-ex for network nodes.
361     type: string
362   NeutronPublicInterfaceTag:
363     default: ''
364     description: >
365       VLAN tag for creating a public VLAN. The tag will be used to
366       create an access port on the exterior bridge for each control plane node,
367       and that port will be given the IP address returned by neutron from the
368       public network. Set CONTROLEXTRA=overcloud-vlan-port.yaml when compiling
369       overcloud.yaml to include the deployment of VLAN ports to the control
370       plane.
371     type: string
372   NeutronPublicInterfaceDefaultRoute:
373     default: ''
374     description: A custom default route for the NeutronPublicInterface.
375     type: string
376   NeutronPublicInterfaceIP:
377     default: ''
378     description: A custom IP address to put onto the NeutronPublicInterface.
379     type: string
380   NeutronPublicInterfaceRawDevice:
381     default: ''
382     description: If set, the public interface is a vlan with this device as the raw device.
383     type: string
384   NeutronTunnelTypes:
385     default: 'vxlan'
386     description: |
387         The tunnel types for the Neutron tenant network. To specify multiple
388         values, use a comma separated string, like so: 'gre,vxlan'
389     type: string
390   NeutronTunnelIdRanges:
391     description: |
392         Comma-separated list of <tun_min>:<tun_max> tuples enumerating ranges
393         of GRE tunnel IDs that are available for tenant network allocation
394     default: ["1:1000", ]
395     type: comma_delimited_list
396   NeutronVniRanges:
397     description: |
398         Comma-separated list of <vni_min>:<vni_max> tuples enumerating ranges
399         of VXLAN VNI IDs that are available for tenant network allocation
400     default: ["1:1000", ]
401     type: comma_delimited_list
402   NovaPassword:
403     default: unset
404     description: The password for the nova service and db account, used by nova-api.
405     type: string
406     hidden: true
407   MongoDbNoJournal:
408     default: false
409     description: Should MongoDb journaling be disabled
410     type: boolean
411   NtpServer:
412     type: string
413     default: ''
414   PcsdPassword:
415     type: string
416     description: The password for the 'pcsd' user.
417   PublicVirtualInterface:
418     default: 'br-ex'
419     description: >
420         Specifies the interface where the public-facing virtual ip will be assigned.
421         This should be int_public when a VLAN is being used.
422     type: string
423   PublicVirtualIP: # DEPRECATED: use per service settings instead
424     type: string
425     default: ''  # Has to be here because of the ignored empty value bug
426   RabbitCookie:
427     type: string
428     default: ''  # Has to be here because of the ignored empty value bug
429     hidden: true
430   RabbitPassword:
431     default: guest
432     description: The password for RabbitMQ
433     type: string
434     hidden: true
435   RabbitUserName:
436     default: guest
437     description: The username for RabbitMQ
438     type: string
439   RabbitClientUseSSL:
440     default: false
441     description: >
442         Rabbit client subscriber parameter to specify
443         an SSL connection to the RabbitMQ host.
444     type: string
445   RabbitClientPort:
446     default: 5672
447     description: Set rabbit subscriber port, change this if using SSL
448     type: number
449   RabbitFDLimit:
450     default: 16384
451     description: Configures RabbitMQ FD limit
452     type: string
453   RedisVirtualIP:
454     type: string
455     default: ''  # Has to be here because of the ignored empty value bug
456   SnmpdReadonlyUserName:
457     default: ro_snmp_user
458     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
459     type: string
460   SnmpdReadonlyUserPassword:
461     default: unset
462     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
463     type: string
464     hidden: true
465   SSLCACertificate:
466     default: ''
467     description: If set, the contents of an SSL certificate authority file.
468     type: string
469   SSLCertificate:
470     default: ''
471     description: If set, the contents of an SSL certificate .crt file for encrypting SSL endpoints.
472     type: string
473     hidden: true
474   SSLKey:
475     default: ''
476     description: If set, the contents of an SSL certificate .key file for encrypting SSL endpoints.
477     type: string
478     hidden: true
479   SwiftHashSuffix:
480     default: unset
481     description: A random string to be used as a salt when hashing to determine mappings
482       in the ring.
483     hidden: true
484     type: string
485   SwiftMountCheck:
486     default: 'false'
487     description: Value of mount_check in Swift account/container/object -server.conf
488     type: boolean
489   SwiftMinPartHours:
490     type: number
491     default: 1
492     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
493   SwiftPartPower:
494     default: 10
495     description: Partition Power to use when building Swift rings
496     type: number
497   SwiftPassword:
498     default: unset
499     description: The password for the swift service account, used by the swift proxy
500       services.
501     hidden: true
502     type: string
503   SwiftReplicas:
504     type: number
505     default: 3
506     description: How many replicas to use in the swift rings.
507   VirtualIP: # DEPRECATED: use per service settings instead
508     type: string
509     default: ''  # Has to be here because of the ignored empty value bug
510   HeatApiVirtualIP:
511     type: string
512     default: ''
513   GlanceApiVirtualIP:
514     type: string
515     default: ''
516   GlanceRegistryVirtualIP:
517     type: string
518     default: ''
519   MysqlVirtualIP:
520     type: string
521     default: ''
522   KeystoneAdminApiVirtualIP:
523     type: string
524     default: ''
525   KeystonePublicApiVirtualIP:
526     type: string
527     default: ''
528   NeutronApiVirtualIP:
529     type: string
530     default: ''
531   EnablePackageInstall:
532     default: 'false'
533     description: Set to true to enable package installation via Puppet
534     type: boolean
535   ServiceNetMap:
536     default: {}
537     description: Mapping of service_name -> network name. Typically set
538                  via parameter_defaults in the resource registry.
539     type: json
540   UpdateIdentifier:
541     default: ''
542     type: string
543     description: >
544       Setting to a previously unused value during stack-update will trigger
545       package update on all nodes
546   Hostname:
547     type: string
548     default: '' # Defaults to Heat created hostname
549
550 resources:
551
552   Controller:
553     type: OS::Nova::Server
554     properties:
555       image: {get_param: Image}
556       image_update_policy: {get_param: ImageUpdatePolicy}
557       flavor: {get_param: Flavor}
558       key_name: {get_param: KeyName}
559       networks:
560         - network: ctlplane
561       user_data_format: SOFTWARE_CONFIG
562       user_data: {get_resource: UserData}
563       name: {get_param: Hostname}
564
565   # Combine the NodeAdminUserData and NodeUserData mime archives
566   UserData:
567     type: OS::Heat::MultipartMime
568     properties:
569       parts:
570       - config: {get_resource: NodeAdminUserData}
571         type: multipart
572       - config: {get_resource: NodeUserData}
573         type: multipart
574
575   # Creates the "heat-admin" user if configured via the environment
576   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
577   NodeAdminUserData:
578     type: OS::TripleO::NodeAdminUserData
579
580   # For optional operator additional userdata
581   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
582   NodeUserData:
583     type: OS::TripleO::NodeUserData
584
585   ExternalPort:
586     type: OS::TripleO::Controller::Ports::ExternalPort
587     properties:
588       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
589
590   InternalApiPort:
591     type: OS::TripleO::Controller::Ports::InternalApiPort
592     properties:
593       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
594
595   StoragePort:
596     type: OS::TripleO::Controller::Ports::StoragePort
597     properties:
598       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
599
600   StorageMgmtPort:
601     type: OS::TripleO::Controller::Ports::StorageMgmtPort
602     properties:
603       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
604
605   TenantPort:
606     type: OS::TripleO::Controller::Ports::TenantPort
607     properties:
608       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
609
610   NetIpMap:
611     type: OS::TripleO::Network::Ports::NetIpMap
612     properties:
613       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
614       ExternalIp: {get_attr: [ExternalPort, ip_address]}
615       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
616       StorageIp: {get_attr: [StoragePort, ip_address]}
617       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
618       TenantIp: {get_attr: [TenantPort, ip_address]}
619
620   NetIpSubnetMap:
621     type: OS::TripleO::Network::Ports::NetIpSubnetMap
622     properties:
623       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
624       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
625       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
626       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
627       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
628       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
629
630   NetworkConfig:
631     type: OS::TripleO::Controller::Net::SoftwareConfig
632     properties:
633       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
634       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
635       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
636       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
637       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
638       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
639
640   NetworkDeployment:
641     type: OS::TripleO::SoftwareDeployment
642     properties:
643       config: {get_resource: NetworkConfig}
644       server: {get_resource: Controller}
645       input_values:
646         bridge_name: br-ex
647         interface_name: {get_param: NeutronPublicInterface}
648
649   ControllerDeployment:
650     type: OS::TripleO::SoftwareDeployment
651     depends_on: NetworkDeployment
652     properties:
653       config: {get_resource: ControllerConfig}
654       server: {get_resource: Controller}
655       input_values:
656         bootstack_nodeid: {get_attr: [Controller, name]}
657         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
658         heat.watch_server_url:
659           list_join:
660             - ''
661             - - 'http://'
662               - {get_param: HeatApiVirtualIP}
663               - ':8003'
664         heat.metadata_server_url:
665           list_join:
666             - ''
667             - - 'http://'
668               - {get_param: HeatApiVirtualIP}
669               - ':8000'
670         heat.waitcondition_server_url:
671           list_join:
672             - ''
673             - - 'http://'
674               - {get_param: HeatApiVirtualIP}
675               - ':8000/v1/waitcondition'
676         heat_auth_encryption_key: {get_param: HeatAuthEncryptionKey}
677         horizon_allowed_hosts: {get_param: HorizonAllowedHosts}
678         horizon_secret: {get_param: HorizonSecret}
679         admin_password: {get_param: AdminPassword}
680         admin_token: {get_param: AdminToken}
681         neutron_public_interface_ip: {get_param: NeutronPublicInterfaceIP}
682         debug: {get_param: Debug}
683         cinder_enable_nfs_backend: {get_param: CinderEnableNfsBackend}
684         cinder_enable_rbd_backend: {get_param: CinderEnableRbdBackend}
685         cinder_nfs_mount_options: {get_param: CinderNfsMountOptions}
686         cinder_nfs_servers:
687           str_replace:
688             template: "['SERVERS']"
689             params:
690               SERVERS:
691                 list_join:
692                 - "','"
693                 - {get_param: CinderNfsServers}
694         cinder_lvm_loop_device_size: {get_param: CinderLVMLoopDeviceSize}
695         cinder_password: {get_param: CinderPassword}
696         cinder_enable_iscsi_backend: {get_param: CinderEnableIscsiBackend}
697         cinder_iscsi_helper: {get_param: CinderISCSIHelper}
698         cinder_backend_config: {get_param: CinderBackendConfig}
699         cinder_dsn:
700           list_join:
701             - ''
702             - - 'mysql://cinder:'
703               - {get_param: CinderPassword}
704               - '@'
705               - {get_param: MysqlVirtualIP}
706               - '/cinder'
707         glance_port: {get_param: GlancePort}
708         glance_password: {get_param: GlancePassword}
709         glance_backend: {get_param: GlanceBackend}
710         glance_notifier_strategy: {get_param: GlanceNotifierStrategy}
711         glance_log_file: {get_param: GlanceLogFile}
712         glance_dsn:
713           list_join:
714             - ''
715             - - 'mysql://glance:'
716               - {get_param: GlancePassword}
717               - '@'
718               - {get_param: MysqlVirtualIP}
719               - '/glance'
720         heat_password: {get_param: HeatPassword}
721         heat_stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
722         heat_dsn:
723           list_join:
724             - ''
725             - - 'mysql://heat:'
726               - {get_param: HeatPassword}
727               - '@'
728               - {get_param: MysqlVirtualIP}
729               - '/heat'
730         keystone_auth_address: {list_join: ['', ['http://', {get_param: KeystonePublicApiVirtualIP} , ':5000/v2.0']]}
731         keystone_ca_certificate: {get_param: KeystoneCACertificate}
732         keystone_signing_key: {get_param: KeystoneSigningKey}
733         keystone_signing_certificate: {get_param: KeystoneSigningCertificate}
734         keystone_ssl_certificate: {get_param: KeystoneSSLCertificate}
735         keystone_ssl_certificate_key: {get_param: KeystoneSSLCertificateKey}
736         keystone_notification_driver: {get_param: KeystoneNotificationDriver}
737         keystone_notification_format: {get_param: KeystoneNotificationFormat}
738         keystone_dsn:
739           list_join:
740             - ''
741             - - 'mysql://keystone:'
742               - {get_param: AdminToken}
743               - '@'
744               - {get_param: MysqlVirtualIP}
745               - '/keystone'
746         keystone_identity_uri:
747           list_join:
748             - ''
749             - - 'http://'
750               - {get_param: KeystoneAdminApiVirtualIP}
751               - ':35357/'
752         keystone_auth_uri:
753           list_join:
754             - ''
755             - - 'http://'
756               - {get_param: KeystonePublicApiVirtualIP}
757               - ':5000/v2.0/'
758         keystone_ec2_uri:
759           list_join:
760             - ''
761             - - 'http://'
762               - {get_param: KeystonePublicApiVirtualIP}
763               - ':5000/v2.0/ec2tokens'
764         enable_fencing: {get_param: EnableFencing}
765         enable_galera: {get_param: EnableGalera}
766         enable_ceph_storage: {get_param: EnableCephStorage}
767         enable_swift_storage: {get_param: EnableSwiftStorage}
768         mysql_innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
769         mysql_max_connections: {get_param: MysqlMaxConnections}
770         mysql_root_password: {get_param: MysqlRootPassword}
771         mysql_cluster_name:
772           str_replace:
773             template: tripleo-CLUSTER
774             params:
775               CLUSTER: {get_param: MysqlClusterUniquePart}
776         neutron_flat_networks: {get_param: NeutronFlatNetworks}
777         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
778         neutron_agent_mode: {get_param: NeutronAgentMode}
779         neutron_router_distributed: {get_param: NeutronDVR}
780         neutron_core_plugin: {get_param: NeutronCorePlugin}
781         neutron_service_plugins:
782           str_replace:
783             template: "['PLUGINS']"
784             params:
785               PLUGINS:
786                 list_join:
787                 - "','"
788                 - {get_param: NeutronServicePlugins}
789         neutron_type_drivers:
790           str_replace:
791             template: "['DRIVERS']"
792             params:
793               DRIVERS:
794                 list_join:
795                 - "','"
796                 - {get_param: NeutronTypeDrivers}
797         neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
798         neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
799         neutron_l3_ha: {get_param: NeutronL3HA}
800         neutron_dhcp_agents_per_network: {get_param: NeutronDhcpAgentsPerNetwork}
801         neutron_network_vlan_ranges:
802           str_replace:
803             template: "['RANGES']"
804             params:
805               RANGES:
806                 list_join:
807                 - "','"
808                 - {get_param: NeutronNetworkVLANRanges}
809         neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
810         neutron_external_network_bridge: {get_param: NeutronExternalNetworkBridge}
811         neutron_public_interface: {get_param: NeutronPublicInterface}
812         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
813         neutron_public_interface_default_route: {get_param: NeutronPublicInterfaceDefaultRoute}
814         neutron_public_interface_tag: {get_param: NeutronPublicInterfaceTag}
815         neutron_tenant_network_type: {get_param: NeutronNetworkType}
816         neutron_tunnel_types: {get_param: NeutronTunnelTypes}
817         neutron_tunnel_id_ranges:
818           str_replace:
819             template: "['RANGES']"
820             params:
821               RANGES:
822                 list_join:
823                 - "','"
824                 - {get_param: NeutronTunnelIdRanges}
825         neutron_vni_ranges:
826           str_replace:
827             template: "['RANGES']"
828             params:
829               RANGES:
830                 list_join:
831                 - "','"
832                 - {get_param: NeutronVniRanges}
833         neutron_password: {get_param: NeutronPassword}
834         neutron_dnsmasq_options: {get_param: NeutronDnsmasqOptions}
835         neutron_dsn:
836           list_join:
837             - ''
838             - - 'mysql://neutron:'
839               - {get_param: NeutronPassword}
840               - '@'
841               - {get_param: MysqlVirtualIP}
842               - '/ovs_neutron?charset=utf8'
843         neutron_url:
844           list_join:
845             - ''
846             - - 'http://'
847               - {get_param: NeutronApiVirtualIP}
848               - ':9696'
849         neutron_admin_auth_url:
850           list_join:
851             - ''
852             - - 'http://'
853               - {get_param: KeystoneAdminApiVirtualIP}
854               - ':35357/v2.0'
855         ceilometer_backend: {get_param: CeilometerBackend}
856         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
857         ceilometer_password: {get_param: CeilometerPassword}
858         ceilometer_coordination_url:
859           list_join:
860             - ''
861             - - 'redis://'
862               - {get_param: RedisVirtualIP}
863               - ':6379'
864         ceilometer_dsn:
865           list_join:
866             - ''
867             - - 'mysql://ceilometer:unset@'
868               - {get_param: MysqlVirtualIP}
869               - '/ceilometer'
870         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
871         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
872         nova_password: {get_param: NovaPassword}
873         nova_dsn:
874           list_join:
875             - ''
876             - - 'mysql://nova:'
877               - {get_param: NovaPassword}
878               - '@'
879               - {get_param: MysqlVirtualIP}
880               - '/nova'
881         fencing_config: {get_param: FencingConfig}
882         pcsd_password: {get_param: PcsdPassword}
883         rabbit_username: {get_param: RabbitUserName}
884         rabbit_password: {get_param: RabbitPassword}
885         rabbit_cookie: {get_param: RabbitCookie}
886         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
887         rabbit_client_port: {get_param: RabbitClientPort}
888         mongodb_no_journal: {get_param: MongoDbNoJournal}
889         # We need to force this into quotes or hiera will return integer causing
890         # the puppet module validation regexp to fail.
891         # Remove when: https://github.com/puppetlabs/puppetlabs-rabbitmq/pull/401
892         rabbit_fd_limit:
893           str_replace:
894             template: "'LIMIT'"
895             params:
896               LIMIT: {get_param: RabbitFDLimit}
897         ntp_servers:
898           str_replace:
899             template: '["server"]'
900             params:
901               server: {get_param: NtpServer}
902         control_virtual_interface: {get_param: ControlVirtualInterface}
903         public_virtual_interface: {get_param: PublicVirtualInterface}
904         swift_hash_suffix: {get_param: SwiftHashSuffix}
905         swift_password: {get_param: SwiftPassword}
906         swift_part_power: {get_param: SwiftPartPower}
907         swift_replicas: {get_param: SwiftReplicas}
908         swift_min_part_hours: {get_param: SwiftMinPartHours}
909         swift_mount_check: {get_param: SwiftMountCheck}
910         enable_package_install: {get_param: EnablePackageInstall}
911         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
912         swift_proxy_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
913         swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
914         cinder_iscsi_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderIscsiNetwork]}]}
915         cinder_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
916         glance_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
917         glance_registry_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
918         glance_api_servers:
919           list_join:
920             - ''
921             - - {get_param: GlanceProtocol}
922               - '://'
923               - {get_param: GlanceApiVirtualIP}
924               - ':'
925               - {get_param: GlancePort}
926         glance_registry_host: {get_param: GlanceRegistryVirtualIP}
927         heat_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
928         keystone_public_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
929         keystone_admin_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
930         mongo_db_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
931         neutron_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
932         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
933         ceilometer_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
934         nova_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
935         nova_metadata_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
936         horizon_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
937         rabbitmq_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
938         redis_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
939         redis_vip: {get_param: RedisVirtualIP}
940         memcached_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
941         mysql_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
942         mysql_virtual_ip: {get_param: MysqlVirtualIP}
943         ceph_cluster_network: {get_attr: [NetIpSubnetMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephClusterNetwork]}]}
944         ceph_public_network: {get_attr: [NetIpSubnetMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
945         ceph_public_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
946
947   # Map heat metadata into hiera datafiles
948   ControllerConfig:
949     type: OS::Heat::StructuredConfig
950     properties:
951       group: os-apply-config
952       config:
953         hiera:
954           hierarchy:
955             - '"%{::uuid}"'
956             - heat_config_%{::deploy_config_name}
957             - controller_extraconfig
958             - extraconfig
959             - controller
960             - database
961             - object
962             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
963             - ceph_cluster # provided by CephClusterConfig
964             - ceph
965             - bootstrap_node # provided by BootstrapNodeConfig
966             - all_nodes # provided by allNodesConfig
967             - vip_data # provided by vip-config
968             - '"%{::osfamily}"'
969             - common
970             - cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
971             - neutron_bigswitch_data # Optionally provided by ControllerExtraConfigPre
972             - neutron_cisco_data # Optionally provided by ControllerExtraConfigPre
973             - cisco_n1kv_data # Optionally provided by ControllerExtraConfigPre
974           datafiles:
975             controller_extraconfig:
976               mapped_data: {get_param: ControllerExtraConfig}
977             extraconfig:
978               mapped_data: {get_param: ExtraConfig}
979             common:
980               raw_data: {get_file: hieradata/common.yaml}
981             ceph:
982               raw_data: {get_file: hieradata/ceph.yaml}
983               mapped_data:
984                 ceph::profile::params::cluster_network: {get_input: ceph_cluster_network}
985                 ceph::profile::params::public_network: {get_input: ceph_public_network}
986                 ceph::mon::public_addr: {get_input: ceph_public_ip}
987             database:
988               raw_data: {get_file: hieradata/database.yaml}
989             object:
990               raw_data: {get_file: hieradata/object.yaml}
991             controller:
992               raw_data: {get_file: hieradata/controller.yaml}
993               mapped_data: # data supplied directly to this deployment configuration, etc
994                 bootstack_nodeid: {get_input: bootstack_nodeid}
995
996                 # Pacemaker
997                 enable_fencing: {get_input: enable_fencing}
998                 hacluster_pwd: {get_input: pcsd_password}
999                 tripleo::fencing::config: {get_input: fencing_config}
1000
1001                 # Swift
1002                 swift::proxy::proxy_local_net_ip: {get_input: swift_proxy_network}
1003                 swift::proxy::authtoken::auth_uri: {get_input: keystone_auth_uri}
1004                 swift::proxy::authtoken::identity_uri: {get_input: keystone_identity_uri}
1005                 swift::storage::all::storage_local_net_ip: {get_input: swift_management_network}
1006                 swift::swift_hash_suffix: {get_input: swift_hash_suffix}
1007                 swift::proxy::authtoken::admin_password: {get_input: swift_password}
1008                 tripleo::ringbuilder::part_power: {get_input: swift_part_power}
1009                 tripleo::ringbuilder::replicas: {get_input: swift_replicas}
1010                 tripleo::ringbuilder::min_part_hours: {get_input: swift_min_part_hours}
1011                 swift_mount_check: {get_input: swift_mount_check}
1012
1013                 # NOTE(dprince): build_ring support is currently not wired in.
1014                 # See: https://review.openstack.org/#/c/109225/
1015                 tripleo::ringbuilder::build_ring: True
1016
1017                 # Cinder
1018                 cinder_enable_nfs_backend: {get_input: cinder_enable_nfs_backend}
1019                 cinder_enable_rbd_backend: {get_input: cinder_enable_rbd_backend}
1020                 cinder_nfs_mount_options: {get_input: cinder_nfs_mount_options}
1021                 cinder_nfs_servers: {get_input: cinder_nfs_servers}
1022                 cinder_lvm_loop_device_size: {get_input: cinder_lvm_loop_device_size}
1023                 cinder_iscsi_helper: {get_input: cinder_iscsi_helper}
1024                 cinder_iscsi_ip_address: {get_input: cinder_iscsi_network}
1025                 cinder::database_connection: {get_input: cinder_dsn}
1026                 cinder::api::keystone_password: {get_input: cinder_password}
1027                 cinder::api::auth_uri: {get_input: keystone_auth_uri}
1028                 cinder::api::identity_uri: {get_input: keystone_identity_uri}
1029                 cinder::api::bind_host: {get_input: cinder_api_network}
1030                 cinder::rabbit_userid: {get_input: rabbit_username}
1031                 cinder::rabbit_password: {get_input: rabbit_password}
1032                 cinder::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1033                 cinder::rabbit_port: {get_input: rabbit_client_port}
1034                 cinder::debug: {get_input: debug}
1035                 cinder_enable_iscsi_backend: {get_input: cinder_enable_iscsi_backend}
1036                 cinder::glance::glance_api_servers: {get_input: glance_api_servers}
1037                 cinder_backend_config: {get_input: CinderBackendConfig}
1038                 cinder::db::mysql::password: {get_input: cinder_password}
1039
1040                 # Glance
1041                 glance::api::bind_port: {get_input: glance_port}
1042                 glance::api::bind_host: {get_input: glance_api_network}
1043                 glance::api::auth_uri: {get_input: keystone_auth_uri}
1044                 glance::api::identity_uri: {get_input: keystone_identity_uri}
1045                 glance::api::registry_host: {get_input: glance_registry_host}
1046                 glance::api::keystone_password: {get_input: glance_password}
1047                 glance::api::debug: {get_input: debug}
1048                 glance_notifier_strategy: {get_input: glance_notifier_strategy}
1049                 glance_log_file: {get_input: glance_log_file}
1050                 glance_log_file: {get_input: glance_log_file}
1051                 glance::api::database_connection: {get_input: glance_dsn}
1052                 glance::registry::keystone_password: {get_input: glance_password}
1053                 glance::registry::database_connection: {get_input: glance_dsn}
1054                 glance::registry::bind_host: {get_input: glance_registry_network}
1055                 glance::registry::auth_uri: {get_input: keystone_auth_uri}
1056                 glance::registry::identity_uri: {get_input: keystone_identity_uri}
1057                 glance::registry::debug: {get_input: debug}
1058                 glance::backend::swift::swift_store_auth_address: {get_input: keystone_auth_address}
1059                 glance::backend::swift::swift_store_user: service:glance
1060                 glance::backend::swift::swift_store_key: {get_input: glance_password}
1061                 glance_backend: {get_input: glance_backend}
1062                 glance::db::mysql::password: {get_input: glance_password}
1063
1064                 # Heat
1065                 heat_stack_domain_admin_password: {get_input: heat_stack_domain_admin_password}
1066                 heat::engine::heat_watch_server_url: {get_input: heat.watch_server_url}
1067                 heat::engine::heat_metadata_server_url: {get_input: heat.metadata_server_url}
1068                 heat::engine::heat_waitcondition_server_url: {get_input: heat.waitcondition_server_url}
1069                 heat::engine::auth_encryption_key: {get_input: heat_auth_encryption_key}
1070                 heat::rabbit_userid: {get_input: rabbit_username}
1071                 heat::rabbit_password: {get_input: rabbit_password}
1072                 heat::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1073                 heat::rabbit_port: {get_input: rabbit_client_port}
1074                 heat::auth_uri: {get_input: keystone_auth_uri}
1075                 heat::keystone_ec2_uri: {get_input: keystone_ec2_uri}
1076                 heat::identity_uri: {get_input: keystone_identity_uri}
1077                 heat::keystone_password: {get_input: heat_password}
1078                 heat::api::bind_host: {get_input: heat_api_network}
1079                 heat::api_cloudwatch::bind_host: {get_input: heat_api_network}
1080                 heat::api_cfn::bind_host: {get_input: heat_api_network}
1081                 heat::database_connection: {get_input: heat_dsn}
1082                 heat::debug: {get_input: debug}
1083                 heat::db::mysql::password: {get_input: heat_password}
1084
1085                 # Keystone
1086                 keystone::admin_token: {get_input: admin_token}
1087                 keystone_ca_certificate: {get_input: keystone_ca_certificate}
1088                 keystone_signing_key: {get_input: keystone_signing_key}
1089                 keystone_signing_certificate: {get_input: keystone_signing_certificate}
1090                 keystone_ssl_certificate: {get_input: keystone_ssl_certificate}
1091                 keystone_ssl_certificate_key: {get_input: keystone_ssl_certificate_key}
1092                 keystone::database_connection: {get_input: keystone_dsn}
1093                 keystone::public_bind_host: {get_input: keystone_public_api_network}
1094                 keystone::admin_bind_host: {get_input: keystone_admin_api_network}
1095                 keystone::debug: {get_input: debug}
1096                 keystone::db::mysql::password: {get_input: admin_token}
1097                 keystone::rabbit_userid: {get_input: rabbit_username}
1098                 keystone::rabbit_password: {get_input: rabbit_password}
1099                 keystone::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1100                 keystone::rabbit_port: {get_input: rabbit_client_port}
1101                 keystone::notification_driver: {get_input: keystone_notification_driver}
1102                 keystone::notification_format: {get_input: keystone_notification_format}
1103                 # MongoDB
1104                 mongodb::server::bind_ip: {get_input: mongo_db_network}
1105                 mongodb::server::nojournal: {get_input: mongodb_no_journal}
1106                 # MySQL
1107                 admin_password: {get_input: admin_password}
1108                 enable_galera: {get_input: enable_galera}
1109                 enable_ceph_storage: {get_input: enable_ceph_storage}
1110                 enable_swift_storage: {get_input: enable_swift_storage}
1111                 mysql_innodb_buffer_pool_size: {get_input: mysql_innodb_buffer_pool_size}
1112                 mysql_max_connections: {get_input: mysql_max_connections}
1113                 mysql::server::root_password: {get_input: mysql_root_password}
1114                 mysql_cluster_name: {get_input: mysql_cluster_name}
1115                 mysql_bind_host: {get_input: mysql_network}
1116                 mysql_virtual_ip: {get_input: mysql_virtual_ip}
1117
1118                 # Neutron
1119                 neutron::bind_host: {get_input: neutron_api_network}
1120                 neutron::rabbit_password: {get_input: rabbit_password}
1121                 neutron::rabbit_user: {get_input: rabbit_user}
1122                 neutron::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1123                 neutron::rabbit_port: {get_input: rabbit_client_port}
1124                 neutron::debug: {get_input: debug}
1125                 neutron::server::auth_uri: {get_input: keystone_auth_uri}
1126                 neutron::server::identity_uri: {get_input: keystone_identity_uri}
1127                 neutron::server::database_connection: {get_input: neutron_dsn}
1128                 neutron::agents::l3::external_network_bridge: {get_input: neutron_external_network_bridge}
1129                 neutron::agents::ml2::ovs::enable_tunneling: {get_input: neutron_enable_tunneling}
1130                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
1131                 neutron_flat_networks: {get_input: neutron_flat_networks}
1132                 neutron::agents::metadata::shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
1133                 neutron::agents::metadata::metadata_ip: {get_input: neutron_api_network}
1134                 neutron_agent_mode: {get_input: neutron_agent_mode}
1135                 neutron_router_distributed: {get_input: neutron_router_distributed}
1136                 neutron::core_plugin: {get_input: neutron_core_plugin}
1137                 neutron::service_plugins: {get_input: neutron_service_plugins}
1138                 neutron::plugins::ml2::type_drivers: {get_input: neutron_type_drivers}
1139                 neutron_mechanism_drivers: {get_input: neutron_mechanism_drivers}
1140                 neutron::server::allow_automatic_l3agent_failover: {get_input: neutron_allow_l3agent_failover}
1141                 neutron::server::l3_ha: {get_input: neutron_l3_ha}
1142                 neutron::dhcp_agents_per_network: {get_input: neutron_dhcp_agents_per_network}
1143                 neutron::plugins::ml2::network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
1144                 neutron::plugins::ml2::tunnel_id_ranges: {get_input: neutron_tunnel_id_ranges}
1145                 neutron::plugins::ml2::vni_ranges: {get_input: neutron_vni_ranges}
1146                 neutron_bridge_mappings: {get_input: neutron_bridge_mappings}
1147                 neutron_public_interface: {get_input: neutron_public_interface}
1148                 neutron_public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
1149                 neutron_public_interface_default_route: {get_input: neutron_public_interface_default_route}
1150                 neutron_public_interface_tag: {get_input: neutron_public_interface_tag}
1151                 neutron_tenant_network_type: {get_input: neutron_tenant_network_type}
1152                 neutron_tunnel_types: {get_input: neutron_tunnel_types}
1153                 neutron::server::auth_password: {get_input: neutron_password}
1154                 neutron::agents::metadata::auth_password: {get_input: neutron_password}
1155                 neutron_dnsmasq_options: {get_input: neutron_dnsmasq_options}
1156                 neutron_dsn: {get_input: neutron_dsn}
1157                 neutron::agents::metadata::auth_url: {get_input: keystone_identity_uri}
1158                 neutron::db::mysql::password: {get_input: neutron_password}
1159
1160                 # Ceilometer
1161                 ceilometer_backend: {get_input: ceilometer_backend}
1162                 ceilometer_mysql_conn_string: {get_input: ceilometer_dsn}
1163                 ceilometer::metering_secret: {get_input: ceilometer_metering_secret}
1164                 ceilometer::rabbit_userid: {get_input: rabbit_username}
1165                 ceilometer::rabbit_password: {get_input: rabbit_password}
1166                 ceilometer::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1167                 ceilometer::rabbit_port: {get_input: rabbit_client_port}
1168                 ceilometer::debug: {get_input: debug}
1169                 ceilometer::api::host: {get_input: ceilometer_api_network}
1170                 ceilometer::api::keystone_password: {get_input: ceilometer_password}
1171                 ceilometer::api::keystone_auth_uri: {get_input: keystone_auth_uri}
1172                 ceilometer::api::keystone_identity_uri: {get_input: keystone_identity_uri}
1173                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
1174                 ceilometer::agent::auth::auth_url: {get_input: keystone_auth_address}
1175                 ceilometer::agent::central::coordination_url: {get_input: ceilometer_coordination_url}
1176                 ceilometer::db::mysql::password: {get_input: ceilometer_password}
1177                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
1178                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
1179
1180                 # Nova
1181                 nova::rabbit_userid: {get_input: rabbit_username}
1182                 nova::rabbit_password: {get_input: rabbit_password}
1183                 nova::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1184                 nova::rabbit_port: {get_input: rabbit_client_port}
1185                 nova::debug: {get_input: debug}
1186                 nova::api::auth_uri: {get_input: keystone_auth_uri}
1187                 nova::api::identity_uri: {get_input: keystone_identity_uri}
1188                 nova::api::api_bind_address: {get_input: nova_api_network}
1189                 nova::api::metadata_listen: {get_input: nova_metadata_network}
1190                 nova::api::admin_password: {get_input: nova_password}
1191                 nova::database_connection: {get_input: nova_dsn}
1192                 nova::glance_api_servers: {get_input: glance_api_servers}
1193                 nova::api::neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
1194                 nova::network::neutron::neutron_admin_password: {get_input: neutron_password}
1195                 nova::network::neutron::neutron_url: {get_input: neutron_url}
1196                 nova::network::neutron::neutron_admin_auth_url: {get_input: neutron_admin_auth_url}
1197                 nova::vncproxy::host: {get_input: nova_api_network}
1198                 nova::db::mysql::password: {get_input: nova_password}
1199
1200                 # Horizon
1201                 apache::ip: {get_input: horizon_network}
1202                 horizon::allowed_hosts: {get_input: horizon_allowed_hosts}
1203                 horizon::django_debug: {get_input: debug}
1204                 horizon::secret_key: {get_input: horizon_secret}
1205                 horizon::bind_address: {get_input: horizon_network}
1206                 horizon::keystone_url: {get_input: keystone_auth_uri}
1207
1208                 # Rabbit
1209                 rabbitmq::node_ip_address: {get_input: rabbitmq_network}
1210                 rabbitmq::erlang_cookie: {get_input: rabbit_cookie}
1211                 rabbitmq::file_limit: {get_input: rabbit_fd_limit}
1212                 # Redis
1213                 redis::bind: {get_input: redis_network}
1214                 redis_vip: {get_input: redis_vip}
1215                 # Misc
1216                 memcached::listen_ip: {get_input: memcached_network}
1217                 neutron_public_interface_ip: {get_input: neutron_public_interface_ip}
1218                 ntp::servers: {get_input: ntp_servers}
1219                 control_virtual_interface: {get_input: control_virtual_interface}
1220                 public_virtual_interface: {get_input: public_virtual_interface}
1221                 tripleo::loadbalancer::control_virtual_interface: {get_input: control_virtual_interface}
1222                 tripleo::loadbalancer::public_virtual_interface: {get_input: public_virtual_interface}
1223                 tripleo::packages::enable_install: {get_input: enable_package_install}
1224                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
1225
1226   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
1227   ControllerExtraConfigPre:
1228     depends_on: ControllerDeployment
1229     type: OS::TripleO::ControllerExtraConfigPre
1230     properties:
1231         server: {get_resource: Controller}
1232
1233   # Hook for site-specific additional pre-deployment config,
1234   # applying to all nodes, e.g node registration/unregistration
1235   NodeExtraConfig:
1236     depends_on: ControllerExtraConfigPre
1237     type: OS::TripleO::NodeExtraConfig
1238     properties:
1239         server: {get_resource: Controller}
1240
1241   UpdateConfig:
1242     type: OS::TripleO::Tasks::PackageUpdate
1243
1244   UpdateDeployment:
1245     type: OS::Heat::SoftwareDeployment
1246     properties:
1247       config: {get_resource: UpdateConfig}
1248       server: {get_resource: Controller}
1249       input_values:
1250         update_identifier:
1251           get_param: UpdateIdentifier
1252
1253 outputs:
1254   ip_address:
1255     description: IP address of the server in the ctlplane network
1256     value: {get_attr: [Controller, networks, ctlplane, 0]}
1257   external_ip_address:
1258     description: IP address of the server in the external network
1259     value: {get_attr: [ExternalPort, ip_address]}
1260   internal_api_ip_address:
1261     description: IP address of the server in the internal_api network
1262     value: {get_attr: [InternalApiPort, ip_address]}
1263   storage_ip_address:
1264     description: IP address of the server in the storage network
1265     value: {get_attr: [StoragePort, ip_address]}
1266   storage_mgmt_ip_address:
1267     description: IP address of the server in the storage_mgmt network
1268     value: {get_attr: [StorageMgmtPort, ip_address]}
1269   tenant_ip_address:
1270     description: IP address of the server in the tenant network
1271     value: {get_attr: [TenantPort, ip_address]}
1272   hostname:
1273     description: Hostname of the server
1274     value: {get_attr: [Controller, name]}
1275   corosync_node:
1276     description: >
1277       Node object in the format {ip: ..., name: ...} format that the corosync
1278       element expects
1279     value:
1280       ip: {get_attr: [Controller, networks, ctlplane, 0]}
1281       name: {get_attr: [Controller, name]}
1282   hosts_entry:
1283     description: >
1284       Server's IP address and hostname in the /etc/hosts format
1285     value:
1286       str_replace:
1287         template: IP HOST.localdomain HOST CLOUDNAME
1288         params:
1289           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ControllerHostnameResolveNetwork]}]}
1290           HOST: {get_attr: [Controller, name]}
1291           CLOUDNAME: {get_param: CloudName}
1292   nova_server_resource:
1293     description: Heat resource handle for the Nova compute server
1294     value:
1295       {get_resource: Controller}
1296   swift_device:
1297     description: Swift device formatted for swift-ring-builder
1298     value:
1299       str_replace:
1300         template: 'r1z1-IP:%PORT%/d1'
1301         params:
1302           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
1303   swift_proxy_memcache:
1304     description: Swift proxy-memcache value
1305     value:
1306       str_replace:
1307         template: "IP:11211"
1308         params:
1309           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
1310   config_identifier:
1311     description: identifier which changes if the controller configuration may need re-applying
1312     value:
1313       list_join:
1314         - ','
1315         - - {get_attr: [ControllerDeployment, deploy_stdout]}
1316           - {get_attr: [ControllerExtraConfigPre, deploy_stdout]}
1317           - {get_param: UpdateIdentifier}