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