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