--- /dev/null
+#
+# == Parameters
+# [database_connection]
+# Url used to connect to database.
+# (Optional) Defaults to
+# 'sqlite:////var/lib/cinder/cinder.sqlite'
+#
+# [database_idle_timeout]
+# Timeout when db connections should be reaped.
+# (Optional) Defaults to 3600.
+#
+# [database_min_pool_size]
+# Minimum number of SQL connections to keep open in a pool.
+# (Optional) Defaults to 1.
+#
+# [database_max_pool_size]
+# Maximum number of SQL connections to keep open in a pool.
+# (Optional) Defaults to undef.
+#
+# [database_max_retries]
+# Maximum db connection retries during startup.
+# Setting -1 implies an infinite retry count.
+# (Optional) Defaults to 10.
+#
+# [database_retry_interval]
+# Interval between retries of opening a sql connection.
+# (Optional) Defaults to 10.
+#
+# [database_max_overflow]
+# If set, use this value for max_overflow with sqlalchemy.
+# (Optional) Defaults to undef.
+#
+# [*rabbit_use_ssl*]
+# (optional) Connect over SSL for RabbitMQ
+# Defaults to false
+#
+# [*kombu_ssl_ca_certs*]
+# (optional) SSL certification authority file (valid only if SSL enabled).
+# Defaults to undef
+#
+# [*kombu_ssl_certfile*]
+# (optional) SSL cert file (valid only if SSL enabled).
+# Defaults to undef
+#
+# [*kombu_ssl_keyfile*]
+# (optional) SSL key file (valid only if SSL enabled).
+# Defaults to undef
+#
+# [*kombu_ssl_version*]
+# (optional) SSL version to use (valid only if SSL enabled).
+# Valid values are TLSv1, SSLv23 and SSLv3. SSLv2 may be
+# available on some distributions.
+# Defaults to 'TLSv1'
+#
+# [amqp_durable_queues]
+# Use durable queues in amqp.
+# (Optional) Defaults to false.
+#
+# [use_syslog]
+# Use syslog for logging.
+# (Optional) Defaults to false.
+#
+# [log_facility]
+# Syslog facility to receive log lines.
+# (Optional) Defaults to LOG_USER.
+#
+# [*log_dir*]
+# (optional) Directory where logs should be stored.
+# If set to boolean false, it will not log to any directory.
+# Defaults to '/var/log/cinder'
+#
+# [*use_ssl*]
+# (optional) Enable SSL on the API server
+# Defaults to false, not set
+#
+# [*cert_file*]
+# (optinal) Certificate file to use when starting API server securely
+# Defaults to false, not set
+#
+# [*key_file*]
+# (optional) Private key file to use when starting API server securely
+# Defaults to false, not set
+#
+# [*ca_file*]
+# (optional) CA certificate file to use to verify connecting clients
+# Defaults to false, not set_
+#
+# [*mysql_module*]
+# (optional) Deprecated. Does nothing.
+#
+# [*storage_availability_zone*]
+# (optional) Availability zone of the node.
+# Defaults to 'nova'
+#
+# [*default_availability_zone*]
+# (optional) Default availability zone for new volumes.
+# If not set, the storage_availability_zone option value is used as
+# the default for new volumes.
+# Defaults to false
+#
+# [sql_connection]
+# DEPRECATED
+# [sql_idle_timeout]
+# DEPRECATED
+#
+class cinder (
+ $database_connection = 'sqlite:////var/lib/cinder/cinder.sqlite',
+ $database_idle_timeout = '3600',
+ $database_min_pool_size = '1',
+ $database_max_pool_size = undef,
+ $database_max_retries = '10',
+ $database_retry_interval = '10',
+ $database_max_overflow = undef,
+ $rpc_backend = 'cinder.openstack.common.rpc.impl_kombu',
+ $control_exchange = 'openstack',
+ $rabbit_host = '127.0.0.1',
+ $rabbit_port = 5672,
+ $rabbit_hosts = false,
+ $rabbit_virtual_host = '/',
+ $rabbit_userid = 'guest',
+ $rabbit_password = false,
+ $rabbit_use_ssl = false,
+ $kombu_ssl_ca_certs = undef,
+ $kombu_ssl_certfile = undef,
+ $kombu_ssl_keyfile = undef,
+ $kombu_ssl_version = 'TLSv1',
+ $amqp_durable_queues = false,
+ $qpid_hostname = 'localhost',
+ $qpid_port = '5672',
+ $qpid_username = 'guest',
+ $qpid_password = false,
+ $qpid_sasl_mechanisms = false,
+ $qpid_reconnect = true,
+ $qpid_reconnect_timeout = 0,
+ $qpid_reconnect_limit = 0,
+ $qpid_reconnect_interval_min = 0,
+ $qpid_reconnect_interval_max = 0,
+ $qpid_reconnect_interval = 0,
+ $qpid_heartbeat = 60,
+ $qpid_protocol = 'tcp',
+ $qpid_tcp_nodelay = true,
+ $package_ensure = 'present',
+ $use_ssl = false,
+ $ca_file = false,
+ $cert_file = false,
+ $key_file = false,
+ $api_paste_config = '/etc/cinder/api-paste.ini',
+ $use_syslog = false,
+ $log_facility = 'LOG_USER',
+ $log_dir = '/var/log/cinder',
+ $verbose = false,
+ $debug = false,
+ $storage_availability_zone = 'nova',
+ $default_availability_zone = false,
+ # DEPRECATED PARAMETERS
+ $mysql_module = undef,
+ $sql_connection = undef,
+ $sql_idle_timeout = undef,
+) {
+
+ include cinder::params
+
+ Package['cinder'] -> Cinder_config<||>
+ Package['cinder'] -> Cinder_api_paste_ini<||>
+
+ if $mysql_module {
+ warning('The mysql_module parameter is deprecated. The latest 2.x mysql module will be used.')
+ }
+
+ if $sql_connection {
+ warning('The sql_connection parameter is deprecated, use database_connection instead.')
+ $database_connection_real = $sql_connection
+ } else {
+ $database_connection_real = $database_connection
+ }
+
+ if $sql_idle_timeout {
+ warning('The sql_idle_timeout parameter is deprecated, use database_idle_timeout instead.')
+ $database_idle_timeout_real = $sql_idle_timeout
+ } else {
+ $database_idle_timeout_real = $database_idle_timeout
+ }
+
+ if $use_ssl {
+ if !$cert_file {
+ fail('The cert_file parameter is required when use_ssl is set to true')
+ }
+ if !$key_file {
+ fail('The key_file parameter is required when use_ssl is set to true')
+ }
+ }
+
+ # this anchor is used to simplify the graph between cinder components by
+ # allowing a resource to serve as a point where the configuration of cinder begins
+ anchor { 'cinder-start': }
+
+ package { 'cinder':
+ ensure => $package_ensure,
+ name => $::cinder::params::package_name,
+ require => Anchor['cinder-start'],
+ }
+
+ file { $::cinder::params::cinder_conf:
+ ensure => present,
+ owner => 'cinder',
+ group => 'cinder',
+ mode => '0600',
+ require => Package['cinder'],
+ }
+
+ file { $::cinder::params::cinder_paste_api_ini:
+ ensure => present,
+ owner => 'cinder',
+ group => 'cinder',
+ mode => '0600',
+ require => Package['cinder'],
+ }
+
+ if $rpc_backend == 'cinder.openstack.common.rpc.impl_kombu' {
+
+ if ! $rabbit_password {
+ fail('Please specify a rabbit_password parameter.')
+ }
+
+ cinder_config {
+ 'DEFAULT/rabbit_password': value => $rabbit_password, secret => true;
+ 'DEFAULT/rabbit_userid': value => $rabbit_userid;
+ 'DEFAULT/rabbit_virtual_host': value => $rabbit_virtual_host;
+ 'DEFAULT/rabbit_use_ssl': value => $rabbit_use_ssl;
+ 'DEFAULT/control_exchange': value => $control_exchange;
+ 'DEFAULT/amqp_durable_queues': value => $amqp_durable_queues;
+ }
+
+ if $rabbit_hosts {
+ cinder_config { 'DEFAULT/rabbit_hosts': value => join($rabbit_hosts, ',') }
+ cinder_config { 'DEFAULT/rabbit_ha_queues': value => true }
+ cinder_config { 'DEFAULT/rabbit_host': ensure => absent }
+ cinder_config { 'DEFAULT/rabbit_port': ensure => absent }
+ } else {
+ cinder_config { 'DEFAULT/rabbit_host': value => $rabbit_host }
+ cinder_config { 'DEFAULT/rabbit_port': value => $rabbit_port }
+ cinder_config { 'DEFAULT/rabbit_hosts': value => "${rabbit_host}:${rabbit_port}" }
+ cinder_config { 'DEFAULT/rabbit_ha_queues': value => false }
+ }
+
+ if $rabbit_use_ssl {
+ cinder_config { 'DEFAULT/kombu_ssl_version': value => $kombu_ssl_version }
+
+ if $kombu_ssl_ca_certs {
+ cinder_config { 'DEFAULT/kombu_ssl_ca_certs': value => $kombu_ssl_ca_certs }
+ } else {
+ cinder_config { 'DEFAULT/kombu_ssl_ca_certs': ensure => absent}
+ }
+
+ if $kombu_ssl_certfile {
+ cinder_config { 'DEFAULT/kombu_ssl_certfile': value => $kombu_ssl_certfile }
+ } else {
+ cinder_config { 'DEFAULT/kombu_ssl_certfile': ensure => absent}
+ }
+
+ if $kombu_ssl_keyfile {
+ cinder_config { 'DEFAULT/kombu_ssl_keyfile': value => $kombu_ssl_keyfile }
+ } else {
+ cinder_config { 'DEFAULT/kombu_ssl_keyfile': ensure => absent}
+ }
+ } else {
+ cinder_config {
+ 'DEFAULT/kombu_ssl_ca_certs': ensure => absent;
+ 'DEFAULT/kombu_ssl_certfile': ensure => absent;
+ 'DEFAULT/kombu_ssl_keyfile': ensure => absent;
+ 'DEFAULT/kombu_ssl_version': ensure => absent;
+ }
+ }
+
+ }
+
+ if $rpc_backend == 'cinder.openstack.common.rpc.impl_qpid' {
+
+ if ! $qpid_password {
+ fail('Please specify a qpid_password parameter.')
+ }
+
+ cinder_config {
+ 'DEFAULT/qpid_hostname': value => $qpid_hostname;
+ 'DEFAULT/qpid_port': value => $qpid_port;
+ 'DEFAULT/qpid_username': value => $qpid_username;
+ 'DEFAULT/qpid_password': value => $qpid_password, secret => true;
+ 'DEFAULT/qpid_reconnect': value => $qpid_reconnect;
+ 'DEFAULT/qpid_reconnect_timeout': value => $qpid_reconnect_timeout;
+ 'DEFAULT/qpid_reconnect_limit': value => $qpid_reconnect_limit;
+ 'DEFAULT/qpid_reconnect_interval_min': value => $qpid_reconnect_interval_min;
+ 'DEFAULT/qpid_reconnect_interval_max': value => $qpid_reconnect_interval_max;
+ 'DEFAULT/qpid_reconnect_interval': value => $qpid_reconnect_interval;
+ 'DEFAULT/qpid_heartbeat': value => $qpid_heartbeat;
+ 'DEFAULT/qpid_protocol': value => $qpid_protocol;
+ 'DEFAULT/qpid_tcp_nodelay': value => $qpid_tcp_nodelay;
+ 'DEFAULT/amqp_durable_queues': value => $amqp_durable_queues;
+ }
+
+ if is_array($qpid_sasl_mechanisms) {
+ cinder_config {
+ 'DEFAULT/qpid_sasl_mechanisms': value => join($qpid_sasl_mechanisms, ' ');
+ }
+ } elsif $qpid_sasl_mechanisms {
+ cinder_config {
+ 'DEFAULT/qpid_sasl_mechanisms': value => $qpid_sasl_mechanisms;
+ }
+ } else {
+ cinder_config {
+ 'DEFAULT/qpid_sasl_mechanisms': ensure => absent;
+ }
+ }
+ }
+
+ if ! $default_availability_zone {
+ $default_availability_zone_real = $storage_availability_zone
+ } else {
+ $default_availability_zone_real = $default_availability_zone
+ }
+
+ cinder_config {
+ 'database/connection': value => $database_connection_real, secret => true;
+ 'database/idle_timeout': value => $database_idle_timeout_real;
+ 'database/min_pool_size': value => $database_min_pool_size;
+ 'database/max_retries': value => $database_max_retries;
+ 'database/retry_interval': value => $database_retry_interval;
+ 'DEFAULT/verbose': value => $verbose;
+ 'DEFAULT/debug': value => $debug;
+ 'DEFAULT/api_paste_config': value => $api_paste_config;
+ 'DEFAULT/rpc_backend': value => $rpc_backend;
+ 'DEFAULT/storage_availability_zone': value => $storage_availability_zone;
+ 'DEFAULT/default_availability_zone': value => $default_availability_zone_real;
+ }
+
+ if $database_max_pool_size {
+ cinder_config {
+ 'database/max_pool_size': value => $database_max_pool_size;
+ }
+ } else {
+ cinder_config {
+ 'database/max_pool_size': ensure => absent;
+ }
+ }
+
+ if $database_max_overflow {
+ cinder_config {
+ 'database/max_overflow': value => $database_max_overflow;
+ }
+ } else {
+ cinder_config {
+ 'database/max_overflow': ensure => absent;
+ }
+ }
+
+ if($database_connection_real =~ /mysql:\/\/\S+:\S+@\S+\/\S+/) {
+ require 'mysql::bindings'
+ require 'mysql::bindings::python'
+ } elsif($database_connection_real =~ /postgresql:\/\/\S+:\S+@\S+\/\S+/) {
+
+ } elsif($database_connection_real =~ /sqlite:\/\//) {
+
+ } else {
+ fail("Invalid db connection ${database_connection_real}")
+ }
+
+ if $log_dir {
+ cinder_config {
+ 'DEFAULT/log_dir': value => $log_dir;
+ }
+ } else {
+ cinder_config {
+ 'DEFAULT/log_dir': ensure => absent;
+ }
+ }
+
+ # SSL Options
+ if $use_ssl {
+ cinder_config {
+ 'DEFAULT/ssl_cert_file' : value => $cert_file;
+ 'DEFAULT/ssl_key_file' : value => $key_file;
+ }
+ if $ca_file {
+ cinder_config { 'DEFAULT/ssl_ca_file' :
+ value => $ca_file,
+ }
+ } else {
+ cinder_config { 'DEFAULT/ssl_ca_file' :
+ ensure => absent,
+ }
+ }
+ } else {
+ cinder_config {
+ 'DEFAULT/ssl_cert_file' : ensure => absent;
+ 'DEFAULT/ssl_key_file' : ensure => absent;
+ 'DEFAULT/ssl_ca_file' : ensure => absent;
+ }
+ }
+
+ if $use_syslog {
+ cinder_config {
+ 'DEFAULT/use_syslog': value => true;
+ 'DEFAULT/syslog_log_facility': value => $log_facility;
+ }
+ } else {
+ cinder_config {
+ 'DEFAULT/use_syslog': value => false;
+ }
+ }
+
+}