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