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