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