Merge "Allow deployer to choose Ceilometer backend"
[apex-tripleo-heat-templates.git] / puppet / controller-puppet.yaml
1 heat_template_version: 2014-10-16
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.
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 account.
29     type: string
30     hidden: true
31   CinderEnableIscsiBackend:
32     default: true
33     description: Whether to enable or not the Iscsi backend for Cinder
34     type: boolean
35   CinderEnableRbdBackend:
36     default: false
37     description: Whether to enable or not the Rbd backend for Cinder
38     type: boolean
39   CinderISCSIHelper:
40     default: tgtadm
41     description: The iSCSI helper to use with cinder.
42     type: string
43   CinderLVMLoopDeviceSize:
44     default: 5000
45     description: The size of the loopback file used by the cinder LVM driver.
46     type: number
47   CinderPassword:
48     default: unset
49     description: The password for the cinder service account, used by cinder-api.
50     type: string
51     hidden: true
52   CloudName:
53     default: ''
54     description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
55     type: string
56   ControllerExtraConfig:
57     default: {}
58     description: |
59       Controller specific configuration to inject into the cluster. Same
60       structure as ExtraConfig.
61     type: json
62   ControlVirtualInterface:
63     default: 'br-ex'
64     description: Interface where virtual ip will be assigned.
65     type: string
66   Debug:
67     default: ''
68     description: Set to True to enable debugging on all services.
69     type: string
70   EnableGalera:
71     default: true
72     description: Whether to use Galera instead of regular MariaDB.
73     type: boolean
74   EnablePacemaker:
75     default: false
76     description: If enabled services will be monitored by Pacemaker; it
77       will manage VIPs as well, in place of Keepalived.
78     type: boolean
79   EnableCephStorage:
80     default: false
81     description: Whether to deploy Ceph Storage (OSD) on the Controller
82     type: boolean
83   EnableSwiftStorage:
84     default: true
85     description: Whether to enable Swift Storage on the Controller
86     type: boolean
87   ExtraConfig:
88     default: {}
89     description: |
90       Additional configuration to inject into the cluster. The JSON should have
91       the following structure:
92         {"FILEKEY":
93           {"config":
94             [{"section": "SECTIONNAME",
95               "values":
96                 [{"option": "OPTIONNAME",
97                   "value": "VALUENAME"
98                  }
99                 ]
100              }
101             ]
102           }
103         }
104       For instance:
105         {"nova":
106           {"config":
107             [{"section": "default",
108               "values":
109                 [{"option": "compute_manager",
110                   "value": "ironic.nova.compute.manager.ClusterComputeManager"
111                  }
112                 ]
113              },
114              {"section": "cells",
115               "values":
116                 [{"option": "driver",
117                   "value": "nova.cells.rpc_driver.CellsRPCDriver"
118                  }
119                 ]
120              }
121             ]
122           }
123         }
124     type: json
125   Flavor:
126     description: Flavor for control nodes to request when deploying.
127     type: string
128     constraints:
129       - custom_constraint: nova.flavor
130   GlanceNotifierStrategy:
131     description: Strategy to use for Glance notification queue
132     type: string
133     default: noop
134   GlanceLogFile:
135     description: The filepath of the file to use for logging messages from Glance.
136     type: string
137     default: ''
138   GlancePassword:
139     default: unset
140     description: The password for the glance service account, used by the glance services.
141     type: string
142     hidden: true
143   GlancePort:
144     default: "9292"
145     description: Glance port.
146     type: string
147   GlanceProtocol:
148     default: http
149     description: Protocol to use when connecting to glance, set to https for SSL.
150     type: string
151   HeatPassword:
152     default: unset
153     description: The password for the Heat service account, used by the Heat services.
154     type: string
155     hidden: true
156   HeatStackDomainAdminPassword:
157     description: Password for heat_domain_admin user.
158     type: string
159     default: ''
160     hidden: true
161   HeatAuthEncryptionKey:
162     description: Auth encryption key for heat-engine
163     type: string
164   Image:
165     type: string
166     default: overcloud-control
167     constraints:
168       - custom_constraint: glance.image
169   ImageUpdatePolicy:
170     default: 'REBUILD_PRESERVE_EPHEMERAL'
171     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
172     type: string
173   KeyName:
174     default: default
175     description: Name of an existing EC2 KeyPair to enable SSH access to the instances
176     type: string
177     constraints:
178       - custom_constraint: nova.keypair
179   KeystoneCACertificate:
180     default: ''
181     description: Keystone self-signed certificate authority certificate.
182     type: string
183   KeystoneSigningCertificate:
184     default: ''
185     description: Keystone certificate for verifying token validity.
186     type: string
187   KeystoneSigningKey:
188     default: ''
189     description: Keystone key for signing tokens.
190     type: string
191     hidden: true
192   KeystoneSSLCertificate:
193     default: ''
194     description: Keystone certificate for verifying token validity.
195     type: string
196   KeystoneSSLCertificateKey:
197     default: ''
198     description: Keystone key for signing tokens.
199     type: string
200     hidden: true
201   MysqlClusterUniquePart:
202     description: A unique identifier of the MySQL cluster the controller is in.
203     type: string
204     default: 'unset'  # Has to be here because of the ignored empty value bug
205     # Drop the validation: https://bugs.launchpad.net/tripleo/+bug/1405446
206     # constraints:
207     # - length: {min: 4, max: 10}
208   MysqlInnodbBufferPoolSize:
209     description: >
210         Specifies the size of the buffer pool in megabytes. Setting to
211         zero should be interpreted as "no value" and will defer to the
212         lower level default.
213     type: number
214     default: 0
215   MysqlRootPassword:
216     type: string
217     hidden: true
218     default: ''  # Has to be here because of the ignored empty value bug
219   NeutronBridgeMappings:
220     description: >
221       The OVS logical->physical bridge mappings to use. See the Neutron
222       documentation for details. Defaults to mapping br-ex - the external
223       bridge on hosts - to a physical name 'datacentre' which can be used
224       to create provider networks (and we use this for the default floating
225       network) - if changing this either use different post-install network
226       scripts or be sure to keep 'datacentre' as a mapping network name.
227     type: string
228     default: "datacentre:br-ex"
229   NeutronDnsmasqOptions:
230     default: 'dhcp-option-force=26,1400'
231     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.
232     type: string
233   NeutronAgentMode:
234     default: 'dvr_snat'
235     description: Agent mode for the neutron-l3-agent on the controller hosts
236     type: string
237   NeutronL3HA: #FIXME this isn't wired in
238     default: 'False'
239     description: Whether to enable l3-agent HA
240     type: string
241   NeutronDVR:
242     default: 'False'
243     description: Whether to configure Neutron Distributed Virtual Routers
244     type: string
245   NeutronMetadataProxySharedSecret:
246     default: 'unset'
247     description: Shared secret to prevent spoofing
248     type: string
249   NeutronMechanismDrivers:
250     default: 'openvswitch'
251     description: |
252         The mechanism drivers for the Neutron tenant network. To specify multiple
253         values, use a comma separated string, like so: 'openvswitch,l2_population'
254     type: string
255   NeutronAllowL3AgentFailover:
256     default: 'True'
257     description: Allow automatic l3-agent failover
258     type: string
259   NeutronEnableTunnelling:
260     type: string
261     default: "True"
262   NeutronFlatNetworks:
263     type: string
264     default: 'datacentre'
265     description: If set, flat networks to configure in neutron plugins.
266   NeutronL3HA:
267     default: 'False'
268     description: Whether to enable l3-agent HA
269     type: string
270   NeutronNetworkType:
271     default: 'gre'
272     description: The tenant network type for Neutron, either gre or vxlan.
273     type: string
274   NeutronNetworkVLANRanges:
275     default: 'datacentre'
276     description: >
277       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
278       Neutron documentation for permitted values. Defaults to permitting any
279       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
280     type: string
281   NeutronPassword:
282     default: unset
283     description: The password for the neutron service account, used by neutron agents.
284     type: string
285     hidden: true
286   NeutronPublicInterface:
287     default: nic1
288     description: What interface to bridge onto br-ex for network nodes.
289     type: string
290   NeutronPublicInterfaceTag:
291     default: ''
292     description: >
293       VLAN tag for creating a public VLAN. The tag will be used to
294       create an access port on the exterior bridge for each control plane node,
295       and that port will be given the IP address returned by neutron from the
296       public network. Set CONTROLEXTRA=overcloud-vlan-port.yaml when compiling
297       overcloud.yaml to include the deployment of VLAN ports to the control
298       plane.
299     type: string
300   NeutronPublicInterfaceDefaultRoute:
301     default: ''
302     description: A custom default route for the NeutronPublicInterface.
303     type: string
304   NeutronPublicInterfaceIP:
305     default: ''
306     description: A custom IP address to put onto the NeutronPublicInterface.
307     type: string
308   NeutronPublicInterfaceRawDevice:
309     default: ''
310     description: If set, the public interface is a vlan with this device as the raw device.
311     type: string
312   NeutronTunnelTypes:
313     default: 'gre'
314     description: |
315         The tunnel types for the Neutron tenant network. To specify multiple
316         values, use a comma separated string, like so: 'gre,vxlan'
317     type: string
318   NovaPassword:
319     default: unset
320     description: The password for the nova service account, used by nova-api.
321     type: string
322     hidden: true
323   NtpServer:
324     type: string
325     default: ''
326   PcsdPassword:
327     type: string
328     description: The password for the 'pcsd' user.
329   PublicVirtualInterface:
330     default: 'br-ex'
331     description: >
332         Specifies the interface where the public-facing virtual ip will be assigned.
333         This should be int_public when a VLAN is being used.
334     type: string
335   PublicVirtualIP:
336     type: string
337     default: ''  # Has to be here because of the ignored empty value bug
338   RabbitCookie:
339     type: string
340     default: ''  # Has to be here because of the ignored empty value bug
341     hidden: true
342   RabbitPassword:
343     default: guest
344     description: The password for RabbitMQ
345     type: string
346     hidden: true
347   RabbitUserName:
348     default: guest
349     description: The username for RabbitMQ
350     type: string
351   RabbitClientUseSSL:
352     default: false
353     description: >
354         Rabbit client subscriber parameter to specify
355         an SSL connection to the RabbitMQ host.
356     type: string
357   RabbitClientPort:
358     default: 5672
359     description: Set rabbit subscriber port, change this if using SSL
360     type: number
361   SnmpdReadonlyUserName:
362     default: ro_snmp_user
363     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
364     type: string
365   SnmpdReadonlyUserPassword:
366     default: unset
367     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
368     type: string
369     hidden: true
370   SSLCACertificate:
371     default: ''
372     description: If set, the contents of an SSL certificate authority file.
373     type: string
374   SSLCertificate:
375     default: ''
376     description: If set, the contents of an SSL certificate .crt file for encrypting SSL endpoints.
377     type: string
378     hidden: true
379   SSLKey:
380     default: ''
381     description: If set, the contents of an SSL certificate .key file for encrypting SSL endpoints.
382     type: string
383     hidden: true
384   SwiftHashSuffix:
385     default: unset
386     description: A random string to be used as a salt when hashing to determine mappings
387       in the ring.
388     hidden: true
389     type: string
390   SwiftMountCheck:
391     default: 'false'
392     description: Value of mount_check in Swift account/container/object -server.conf
393     type: boolean
394   SwiftMinPartHours:
395     type: number
396     default: 1
397     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
398   SwiftPartPower:
399     default: 10
400     description: Partition Power to use when building Swift rings
401     type: number
402   SwiftPassword:
403     default: unset
404     description: The password for the swift service account, used by the swift proxy
405       services.
406     hidden: true
407     type: string
408   SwiftReplicas:
409     type: number
410     default: 3
411     description: How many replicas to use in the swift rings.
412   VirtualIP:
413     type: string
414     default: ''  # Has to be here because of the ignored empty value bug
415   EnablePackageInstall:
416     default: 'false'
417     description: Set to true to enable package installation via Puppet
418     type: boolean
419
420 resources:
421
422   Controller:
423     type: OS::Nova::Server
424     properties:
425       image: {get_param: Image}
426       image_update_policy: {get_param: ImageUpdatePolicy}
427       flavor: {get_param: Flavor}
428       key_name: {get_param: KeyName}
429       networks:
430         - network: ctlplane
431       user_data_format: SOFTWARE_CONFIG
432       user_data: {get_resource: NodeUserData}
433
434   NodeUserData:
435     type: OS::TripleO::NodeUserData
436
437   NetworkConfig:
438     type: OS::TripleO::Controller::Net::SoftwareConfig
439
440   NetworkDeployment:
441     type: OS::TripleO::SoftwareDeployment
442     properties:
443       signal_transport: NO_SIGNAL
444       config: {get_attr: [NetworkConfig, config_id]}
445       server: {get_resource: Controller}
446       input_values:
447         bridge_name: br-ex
448         interface_name: {get_param: NeutronPublicInterface}
449
450   ControllerDeployment:
451     type: OS::TripleO::SoftwareDeployment
452     properties:
453       signal_transport: NO_SIGNAL
454       config: {get_resource: ControllerConfig}
455       server: {get_resource: Controller}
456       input_values:
457         bootstack_nodeid: {get_attr: [Controller, name]}
458         controller_host: {get_attr: [Controller, networks, ctlplane, 0]}
459         controller_virtual_ip: {get_param: VirtualIP}
460         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
461         heat.watch_server_url:
462           list_join:
463             - ''
464             - - 'http://'
465               - {get_param: VirtualIP}
466               - ':8003'
467         heat.metadata_server_url:
468           list_join:
469             - ''
470             - - 'http://'
471               - {get_param: VirtualIP}
472               - ':8000'
473         heat.waitcondition_server_url:
474           list_join:
475             - ''
476             - - 'http://'
477               - {get_param: VirtualIP}
478               - ':8000/v1/waitcondition'
479         heat_auth_encryption_key: {get_param: HeatAuthEncryptionKey}
480         admin_password: {get_param: AdminPassword}
481         admin_token: {get_param: AdminToken}
482         neutron_public_interface_ip: {get_param: NeutronPublicInterfaceIP}
483         debug: {get_param: Debug}
484         cinder_enable_rbd_backend: {get_param: CinderEnableRbdBackend}
485         cinder_lvm_loop_device_size: {get_param: CinderLVMLoopDeviceSize}
486         cinder_password: {get_param: CinderPassword}
487         cinder_enable_iscsi_backend: {get_param: CinderEnableIscsiBackend}
488         cinder_iscsi_helper: {get_param: CinderISCSIHelper}
489         cinder_dsn:
490           list_join:
491             - ''
492             - - 'mysql://cinder:unset@'
493               - {get_param: VirtualIP}
494               - '/cinder'
495         glance_port: {get_param: GlancePort}
496         glance_protocol: {get_param: GlanceProtocol}
497         glance_password: {get_param: GlancePassword}
498         glance_swift_store_auth_address: {list_join: ['', ['http://', {get_param: VirtualIP} , ':5000/v2.0']]}
499         glance_notifier_strategy: {get_param: GlanceNotifierStrategy}
500         glance_log_file: {get_param: GlanceLogFile}
501         glance_dsn:
502           list_join:
503             - ''
504             - - 'mysql://glance:unset@'
505               - {get_param: VirtualIP}
506               - '/glance'
507         heat_password: {get_param: HeatPassword}
508         heat_stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
509         heat_dsn:
510           list_join:
511             - ''
512             - - 'mysql://heat:unset@'
513               - {get_param: VirtualIP}
514               - '/heat'
515         keystone_ca_certificate: {get_param: KeystoneCACertificate}
516         keystone_signing_key: {get_param: KeystoneSigningKey}
517         keystone_signing_certificate: {get_param: KeystoneSigningCertificate}
518         keystone_ssl_certificate: {get_param: KeystoneSSLCertificate}
519         keystone_ssl_certificate_key: {get_param: KeystoneSSLCertificateKey}
520         keystone_dsn:
521           list_join:
522             - ''
523             - - 'mysql://keystone:unset@'
524               - {get_param: VirtualIP}
525               - '/keystone'
526         keystone_identity_uri:
527           list_join:
528             - ''
529             - - 'http://'
530               - {get_param: VirtualIP}
531               - ':35357/'
532         keystone_auth_uri:
533           list_join:
534             - ''
535             - - 'http://'
536               - {get_param: VirtualIP}
537               - ':5000/v2.0/'
538         enable_galera: {get_param: EnableGalera}
539         enable_pacemaker: {get_param: EnablePacemaker}
540         enable_ceph_storage: {get_param: EnableCephStorage}
541         enable_swift_storage: {get_param: EnableSwiftStorage}
542         mysql_innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
543         mysql_root_password: {get_param: MysqlRootPassword}
544         mysql_cluster_name:
545           str_replace:
546             template: tripleo-CLUSTER
547             params:
548               CLUSTER: {get_param: MysqlClusterUniquePart}
549         neutron_flat_networks: {get_param: NeutronFlatNetworks}
550         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
551         neutron_agent_mode: {get_param: NeutronAgentMode}
552         neutron_router_distributed: {get_param: NeutronDVR}
553         neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
554         neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
555         neutron_l3_ha: {get_param: NeutronL3HA}
556         neutron_network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
557         neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
558         neutron_public_interface: {get_param: NeutronPublicInterface}
559         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
560         neutron_public_interface_default_route: {get_param: NeutronPublicInterfaceDefaultRoute}
561         neutron_public_interface_tag: {get_param: NeutronPublicInterfaceTag}
562         neutron_tenant_network_type: {get_param: NeutronNetworkType}
563         neutron_tunnel_types: {get_param: NeutronTunnelTypes}
564         neutron_password: {get_param: NeutronPassword}
565         neutron_dnsmasq_options: {get_param: NeutronDnsmasqOptions}
566         neutron_dsn:
567           list_join:
568             - ''
569             - - 'mysql://neutron:unset@'
570               - {get_param: VirtualIP}
571               - '/ovs_neutron?charset=utf8'
572         neutron_url:
573           list_join:
574             - ''
575             - - 'http://'
576               - {get_param: VirtualIP}
577               - ':9696'
578         neutron_admin_auth_url:
579           list_join:
580             - ''
581             - - 'http://'
582               - {get_param: VirtualIP}
583               - ':35357/v2.0'
584         ceilometer_backend: {get_param: CeilometerBackend}
585         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
586         ceilometer_password: {get_param: CeilometerPassword}
587         ceilometer_dsn:
588           list_join:
589             - ''
590             - - 'mysql://ceilometer:unset@'
591               - {get_param: VirtualIP}
592               - '/ceilometer'
593         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
594         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
595         nova_password: {get_param: NovaPassword}
596         nova_dsn:
597           list_join:
598             - ''
599             - - 'mysql://nova:unset@'
600               - {get_param: VirtualIP}
601               - '/nova'
602         pcsd_password: {get_param: PcsdPassword}
603         rabbit_hosts:
604           str_replace:
605             template: '["host"]'
606             params:
607               host: {get_param: VirtualIP}
608         rabbit_username: {get_param: RabbitUserName}
609         rabbit_password: {get_param: RabbitPassword}
610         rabbit_cookie: {get_param: RabbitCookie}
611         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
612         rabbit_client_port: {get_param: RabbitClientPort}
613         ntp_servers:
614           str_replace:
615             template: '["server"]'
616             params:
617               server: {get_param: NtpServer}
618         control_virtual_interface: {get_param: ControlVirtualInterface}
619         public_virtual_interface: {get_param: PublicVirtualInterface}
620         public_virtual_ip: {get_param: PublicVirtualIP}
621         swift_hash_suffix: {get_param: SwiftHashSuffix}
622         swift_password: {get_param: SwiftPassword}
623         swift_part_power: {get_param: SwiftPartPower}
624         swift_replicas: {get_param: SwiftReplicas}
625         swift_min_part_hours: {get_param: SwiftMinPartHours}
626         swift_mount_check: {get_param: SwiftMountCheck}
627         enable_package_install: {get_param: EnablePackageInstall}
628
629   # Map heat metadata into hiera datafiles
630   ControllerConfig:
631     type: OS::Heat::StructuredConfig
632     properties:
633       group: os-apply-config
634       config:
635         hiera:
636           hierarchy:
637             - heat_config_%{::deploy_config_name}
638             - controller
639             - object
640             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
641             - ceph_cluster # provided by CephClusterConfig
642             - ceph
643             - bootstrap_node # provided by BootstrapNodeConfig
644             - all_nodes # provided by allNodesConfig
645             - '"%{::osfamily}"'
646             - common
647           datafiles:
648             common:
649               raw_data: {get_file: hieradata/common.yaml}
650             ceph:
651               raw_data: {get_file: hieradata/ceph.yaml}
652             object:
653               raw_data: {get_file: hieradata/object.yaml}
654             controller:
655               raw_data: {get_file: hieradata/controller.yaml}
656               mapped_data: # data supplied directly to this deployment configuration, etc
657                 bootstack_nodeid: {get_input: bootstack_nodeid}
658                 controller_host: {get_input: controller_host} #local-ipv4
659
660                 # Pacemaker
661                 enable_pacemaker: {get_input: enable_pacemaker}
662                 hacluster_pwd: {get_input: pcsd_password}
663
664                 # Swift
665                 swift::proxy::proxy_local_net_ip: {get_input: controller_host}
666                 swift::proxy::authtoken::auth_uri: {get_input: keystone_auth_uri}
667                 swift::proxy::authtoken::identity_uri: {get_input: keystone_identity_uri}
668                 swift::storage::all::storage_local_net_ip: {get_input: controller_host}
669                 swift::swift_hash_suffix: {get_input: swift_hash_suffix}
670                 swift::proxy::authtoken::admin_password: {get_input: swift_password}
671                 tripleo::ringbuilder::part_power: {get_input: swift_part_power}
672                 tripleo::ringbuilder::replicas: {get_input: swift_replicas}
673                 tripleo::ringbuilder::min_part_hours: {get_input: swift_min_part_hours}
674                 swift_mount_check: {get_input: swift_mount_check}
675
676                 # NOTE(dprince): build_ring support is currently not wired in.
677                 # See: https://review.openstack.org/#/c/109225/
678                 tripleo::ringbuilder::build_ring: True
679
680                 # Cinder
681                 cinder_enable_rbd_backend: {get_input: cinder_enable_rbd_backend}
682                 cinder_lvm_loop_device_size: {get_input: cinder_lvm_loop_device_size}
683                 cinder_iscsi_helper: {get_input: cinder_iscsi_helper}
684                 cinder_iscsi_ip_address: {get_input: controller_host}
685                 cinder::database_connection: {get_input: cinder_dsn}
686                 cinder::api::keystone_password: {get_input: cinder_password}
687                 cinder::api::auth_uri: {get_input: keystone_auth_uri}
688                 cinder::api::identity_uri: {get_input: keystone_identity_uri}
689                 cinder::api::bind_host: {get_input: controller_host}
690                 cinder::rabbit_hosts: {get_input: rabbit_hosts}
691                 cinder::rabbit_userid: {get_input: rabbit_username}
692                 cinder::rabbit_password: {get_input: rabbit_password}
693                 cinder::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
694                 cinder::rabbit_port: {get_input: rabbit_client_port}
695                 cinder::debug: {get_input: debug}
696                 cinder_enable_iscsi_backend: {get_input: cinder_enable_iscsi_backend}
697
698                 # Glance
699                 glance::api::bind_port: {get_input: glance_port}
700                 glance::api::bind_host: {get_input: controller_host}
701                 glance::api::auth_uri: {get_input: keystone_auth_uri}
702                 glance::api::identity_uri: {get_input: keystone_identity_uri}
703                 glance::api::registry_host: {get_input: controller_host}
704                 glance::api::keystone_password: {get_input: glance_password}
705                 glance::api::debug: {get_input: debug}
706                 # used to construct glance_api_servers
707                 glance_port: {get_input: glance_port}
708                 glance_protocol: {get_input: glance_protocol}
709                 glance_notifier_strategy: {get_input: glance_notifier_strategy}
710                 glance_log_file: {get_input: glance_log_file}
711                 glance_log_file: {get_input: glance_log_file}
712                 glance::api::database_connection: {get_input: glance_dsn}
713                 glance::registry::keystone_password: {get_input: glance_password}
714                 glance::registry::database_connection: {get_input: glance_dsn}
715                 glance::registry::bind_host: {get_input: controller_host}
716                 glance::registry::auth_uri: {get_input: keystone_auth_uri}
717                 glance::registry::identity_uri: {get_input: keystone_identity_uri}
718                 glance::registry::debug: {get_input: debug}
719                 glance::backend::swift::swift_store_auth_address: {get_input: glance_swift_store_auth_address}
720                 glance::backend::swift::swift_store_user: service:glance
721                 glance::backend::swift::swift_store_key: {get_input: glance_password}
722
723                 # Heat
724                 heat_stack_domain_admin_password: {get_input: heat_stack_domain_admin_password}
725                 heat::engine::heat_watch_server_url: {get_input: heat.watch_server_url}
726                 heat::engine::heat_metadata_server_url: {get_input: heat.metadata_server_url}
727                 heat::engine::heat_waitcondition_server_url: {get_input: heat.waitcondition_server_url}
728                 heat::engine::auth_encryption_key: {get_input: heat_auth_encryption_key}
729                 heat::rabbit_hosts: {get_input: rabbit_hosts}
730                 heat::rabbit_userid: {get_input: rabbit_username}
731                 heat::rabbit_password: {get_input: rabbit_password}
732                 heat::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
733                 heat::rabbit_port: {get_input: rabbit_client_port}
734                 heat::auth_uri: {get_input: keystone_auth_uri}
735                 heat::identity_uri: {get_input: keystone_identity_uri}
736                 heat::keystone_password: {get_input: heat_password}
737                 heat::api::bind_host: {get_input: controller_host}
738                 heat::api_cloudwatch::bind_host: {get_input: controller_host}
739                 heat::api_cfn::bind_host: {get_input: controller_host}
740                 heat::database_connection: {get_input: heat_dsn}
741                 heat::instance_user: heat-admin
742                 heat::debug: {get_input: debug}
743
744                 # Keystone
745                 keystone::admin_token: {get_input: admin_token}
746                 keystone_ca_certificate: {get_input: keystone_ca_certificate}
747                 keystone_signing_key: {get_input: keystone_signing_key}
748                 keystone_signing_certificate: {get_input: keystone_signing_certificate}
749                 keystone_ssl_certificate: {get_input: keystone_ssl_certificate}
750                 keystone_ssl_certificate_key: {get_input: keystone_ssl_certificate_key}
751                 keystone::database_connection: {get_input: keystone_dsn}
752                 keystone::public_bind_host: {get_input: controller_host}
753                 keystone::admin_bind_host: {get_input: controller_host}
754                 keystone::debug: {get_input: debug}
755                 # MongoDB
756                 mongodb::server::bind_ip: {get_input: controller_host}
757                 # MySQL
758                 admin_password: {get_input: admin_password}
759                 enable_galera: {get_input: enable_galera}
760                 enable_ceph_storage: {get_input: enable_ceph_storage}
761                 enable_swift_storage: {get_input: enable_swift_storage}
762                 mysql_innodb_buffer_pool_size: {get_input: mysql_innodb_buffer_pool_size}
763                 mysql::server::root_password: {get_input: mysql_root_password}
764                 mysql_cluster_name: {get_input: mysql_cluster_name}
765
766                 # Neutron
767                 neutron::bind_host: {get_input: controller_host}
768                 neutron::rabbit_hosts: {get_input: rabbit_hosts}
769                 neutron::rabbit_password: {get_input: rabbit_password}
770                 neutron::rabbit_user: {get_input: rabbit_user}
771                 neutron::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
772                 neutron::rabbit_port: {get_input: rabbit_client_port}
773                 neutron::debug: {get_input: debug}
774                 neutron::server::auth_uri: {get_input: keystone_auth_uri}
775                 neutron::server::identity_uri: {get_input: keystone_identity_uri}
776                 neutron::server::database_connection: {get_input: neutron_dsn}
777                 neutron::agents::ml2::ovs::enable_tunneling: {get_input: neutron_enable_tunneling}
778                 neutron::agents::ml2::ovs::local_ip: {get_input: controller_host}
779                 neutron_flat_networks: {get_input: neutron_flat_networks}
780                 neutron::agents::metadata::shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
781                 neutron::agents::metadata::metadata_ip: {get_input: controller_virtual_ip}
782                 neutron_agent_mode: {get_input: neutron_agent_mode}
783                 neutron_router_distributed: {get_input: neutron_router_distributed}
784                 neutron_mechanism_drivers: {get_input: neutron_mechanism_drivers}
785                 neutron_allow_l3agent_failover: {get_input: neutron_allow_l3agent_failover}
786                 neutron::server::l3_ha: {get_input: neutron_l3_ha}
787                 neutron::plugins::ml2::network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
788                 neutron_bridge_mappings: {get_input: neutron_bridge_mappings}
789                 neutron_public_interface: {get_input: neutron_public_interface}
790                 neutron_public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
791                 neutron_public_interface_default_route: {get_input: neutron_public_interface_default_route}
792                 neutron_public_interface_tag: {get_input: neutron_public_interface_tag}
793                 neutron_tenant_network_type: {get_input: neutron_tenant_network_type}
794                 neutron_tunnel_types: {get_input: neutron_tunnel_types}
795                 neutron::server::auth_password: {get_input: neutron_password}
796                 neutron::agents::metadata::auth_password: {get_input: neutron_password}
797                 neutron_dnsmasq_options: {get_input: neutron_dnsmasq_options}
798                 neutron_dsn: {get_input: neutron_dsn}
799
800                 # Ceilometer
801                 ceilometer_backend: {get_input: ceilometer_backend}
802                 ceilometer_mysql_conn_string: {get_input: ceilometer_dsn}
803                 ceilometer::metering_secret: {get_input: ceilometer_metering_secret}
804                 ceilometer::rabbit_hosts: {get_input: rabbit_hosts}
805                 ceilometer::rabbit_userid: {get_input: rabbit_username}
806                 ceilometer::rabbit_password: {get_input: rabbit_password}
807                 ceilometer::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
808                 ceilometer::rabbit_port: {get_input: rabbit_client_port}
809                 ceilometer::debug: {get_input: debug}
810                 ceilometer::api::host: {get_input: controller_host}
811                 ceilometer::api::keystone_password: {get_input: ceilometer_password}
812                 ceilometer::api::keystone_auth_uri: {get_input: keystone_auth_uri}
813                 ceilometer::api::keystone_identity_uri: {get_input: keystone_identity_uri}
814                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
815                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
816                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
817
818                 # Nova
819                 nova::rabbit_hosts: {get_input: rabbit_hosts}
820                 nova::rabbit_userid: {get_input: rabbit_username}
821                 nova::rabbit_password: {get_input: rabbit_password}
822                 nova::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
823                 nova::rabbit_port: {get_input: rabbit_client_port}
824                 nova::debug: {get_input: debug}
825                 nova::api::auth_uri: {get_input: keystone_auth_uri}
826                 nova::api::identity_uri: {get_input: keystone_identity_uri}
827                 nova::api::api_bind_address: {get_input: controller_host}
828                 nova::api::metadata_listen: {get_input: controller_host}
829                 nova::api::admin_password: {get_input: nova_password}
830                 nova::database_connection: {get_input: nova_dsn}
831                 nova::api::neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
832                 nova::network::neutron::neutron_admin_password: {get_input: neutron_password}
833                 nova::network::neutron::neutron_url: {get_input: neutron_url}
834                 nova::network::neutron::neutron_admin_auth_url: {get_input: neutron_admin_auth_url}
835
836                 # Rabbit
837                 rabbitmq::node_ip_address: {get_input: controller_host}
838                 rabbitmq::erlang_cookie: {get_input: rabbit_cookie}
839                 # Redis
840                 redis::bind: {get_input: controller_host}
841                 # Misc
842                 memcached::listen_ip: {get_input: controller_host}
843                 neutron_public_interface_ip: {get_input: neutron_public_interface_ip}
844                 ntp::servers: {get_input: ntp_servers}
845                 control_virtual_interface: {get_input: control_virtual_interface}
846                 controller_virtual_ip: {get_input: controller_virtual_ip}
847                 public_virtual_interface: {get_input: public_virtual_interface}
848                 public_virtual_ip: {get_input: public_virtual_ip}
849                 tripleo::loadbalancer::control_virtual_interface: {get_input: control_virtual_interface}
850                 tripleo::loadbalancer::controller_virtual_ip: {get_input: controller_virtual_ip}
851                 tripleo::loadbalancer::public_virtual_interface: {get_input: public_virtual_interface}
852                 tripleo::loadbalancer::public_virtual_ip: {get_input: public_virtual_ip}
853                 enable_package_install: {get_input: enable_package_install}
854
855 outputs:
856   ip_address:
857     description: IP address of the server in the ctlplane network
858     value: {get_attr: [Controller, networks, ctlplane, 0]}
859   hostname:
860     description: Hostname of the server
861     value: {get_attr: [Controller, name]}
862   corosync_node:
863     description: >
864       Node object in the format {ip: ..., name: ...} format that the corosync
865       element expects
866     value:
867       ip: {get_attr: [Controller, networks, ctlplane, 0]}
868       name: {get_attr: [Controller, name]}
869   hosts_entry:
870     description: >
871       Server's IP address and hostname in the /etc/hosts format
872     value:
873       str_replace:
874         template: IP HOST CLOUDNAME
875         params:
876           IP: {get_attr: [Controller, networks, ctlplane, 0]}
877           HOST: {get_attr: [Controller, name]}
878           CLOUDNAME: {get_param: CloudName}
879   nova_server_resource:
880     description: Heat resource handle for the Nova compute server
881     value:
882       {get_resource: Controller}
883   swift_device:
884     description: Swift device formatted for swift-ring-builder
885     value:
886       str_replace:
887         template: 'r1z1-IP:%PORT%/d1'
888         params:
889           IP: {get_attr: [Controller, networks, ctlplane, 0]}
890   swift_proxy_memcache:
891     description: Swift proxy-memcache value
892     value:
893       str_replace:
894         template: "IP:11211"
895         params:
896           IP: {get_attr: [Controller, networks, ctlplane, 0]}