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