daddf4e5cb7f8e92e4e131567441f0bfc0fc4f53
[mirror/dsa-puppet.git] / 3rdparty / modules / cinder / manifests / init.pp
1 #
2 # == Parameters
3 # [database_connection]
4 #    Url used to connect to database.
5 #    (Optional) Defaults to
6 #    'sqlite:////var/lib/cinder/cinder.sqlite'
7 #
8 # [database_idle_timeout]
9 #   Timeout when db connections should be reaped.
10 #   (Optional) Defaults to 3600.
11 #
12 # [database_min_pool_size]
13 #   Minimum number of SQL connections to keep open in a pool.
14 #   (Optional) Defaults to 1.
15 #
16 # [database_max_pool_size]
17 #   Maximum number of SQL connections to keep open in a pool.
18 #   (Optional) Defaults to undef.
19 #
20 # [database_max_retries]
21 #   Maximum db connection retries during startup.
22 #   Setting -1 implies an infinite retry count.
23 #   (Optional) Defaults to 10.
24 #
25 # [database_retry_interval]
26 #   Interval between retries of opening a sql connection.
27 #   (Optional) Defaults to 10.
28 #
29 # [database_max_overflow]
30 #   If set, use this value for max_overflow with sqlalchemy.
31 #   (Optional) Defaults to undef.
32 #
33 # [*rabbit_use_ssl*]
34 #   (optional) Connect over SSL for RabbitMQ
35 #   Defaults to false
36 #
37 # [*kombu_ssl_ca_certs*]
38 #   (optional) SSL certification authority file (valid only if SSL enabled).
39 #   Defaults to undef
40 #
41 # [*kombu_ssl_certfile*]
42 #   (optional) SSL cert file (valid only if SSL enabled).
43 #   Defaults to undef
44 #
45 # [*kombu_ssl_keyfile*]
46 #   (optional) SSL key file (valid only if SSL enabled).
47 #   Defaults to undef
48 #
49 # [*kombu_ssl_version*]
50 #   (optional) SSL version to use (valid only if SSL enabled).
51 #   Valid values are TLSv1, SSLv23 and SSLv3. SSLv2 may be
52 #   available on some distributions.
53 #   Defaults to 'TLSv1'
54 #
55 # [amqp_durable_queues]
56 #   Use durable queues in amqp.
57 #   (Optional) Defaults to false.
58 #
59 # [use_syslog]
60 #   Use syslog for logging.
61 #   (Optional) Defaults to false.
62 #
63 # [log_facility]
64 #   Syslog facility to receive log lines.
65 #   (Optional) Defaults to LOG_USER.
66 #
67 # [*log_dir*]
68 #   (optional) Directory where logs should be stored.
69 #   If set to boolean false, it will not log to any directory.
70 #   Defaults to '/var/log/cinder'
71 #
72 # [*use_ssl*]
73 #   (optional) Enable SSL on the API server
74 #   Defaults to false, not set
75 #
76 # [*cert_file*]
77 #   (optinal) Certificate file to use when starting API server securely
78 #   Defaults to false, not set
79 #
80 # [*key_file*]
81 #   (optional) Private key file to use when starting API server securely
82 #   Defaults to false, not set
83 #
84 # [*ca_file*]
85 #   (optional) CA certificate file to use to verify connecting clients
86 #   Defaults to false, not set_
87 #
88 # [*mysql_module*]
89 #   (optional) Deprecated. Does nothing.
90 #
91 # [*storage_availability_zone*]
92 #   (optional) Availability zone of the node.
93 #   Defaults to 'nova'
94 #
95 # [*default_availability_zone*]
96 #   (optional) Default availability zone for new volumes.
97 #   If not set, the storage_availability_zone option value is used as
98 #   the default for new volumes.
99 #   Defaults to false
100 #
101 # [sql_connection]
102 #   DEPRECATED
103 # [sql_idle_timeout]
104 #   DEPRECATED
105 #
106 class cinder (
107   $database_connection         = 'sqlite:////var/lib/cinder/cinder.sqlite',
108   $database_idle_timeout       = '3600',
109   $database_min_pool_size      = '1',
110   $database_max_pool_size      = undef,
111   $database_max_retries        = '10',
112   $database_retry_interval     = '10',
113   $database_max_overflow       = undef,
114   $rpc_backend                 = 'cinder.openstack.common.rpc.impl_kombu',
115   $control_exchange            = 'openstack',
116   $rabbit_host                 = '127.0.0.1',
117   $rabbit_port                 = 5672,
118   $rabbit_hosts                = false,
119   $rabbit_virtual_host         = '/',
120   $rabbit_userid               = 'guest',
121   $rabbit_password             = false,
122   $rabbit_use_ssl              = false,
123   $kombu_ssl_ca_certs          = undef,
124   $kombu_ssl_certfile          = undef,
125   $kombu_ssl_keyfile           = undef,
126   $kombu_ssl_version           = 'TLSv1',
127   $amqp_durable_queues         = false,
128   $qpid_hostname               = 'localhost',
129   $qpid_port                   = '5672',
130   $qpid_username               = 'guest',
131   $qpid_password               = false,
132   $qpid_sasl_mechanisms        = false,
133   $qpid_reconnect              = true,
134   $qpid_reconnect_timeout      = 0,
135   $qpid_reconnect_limit        = 0,
136   $qpid_reconnect_interval_min = 0,
137   $qpid_reconnect_interval_max = 0,
138   $qpid_reconnect_interval     = 0,
139   $qpid_heartbeat              = 60,
140   $qpid_protocol               = 'tcp',
141   $qpid_tcp_nodelay            = true,
142   $package_ensure              = 'present',
143   $use_ssl                     = false,
144   $ca_file                     = false,
145   $cert_file                   = false,
146   $key_file                    = false,
147   $api_paste_config            = '/etc/cinder/api-paste.ini',
148   $use_syslog                  = false,
149   $log_facility                = 'LOG_USER',
150   $log_dir                     = '/var/log/cinder',
151   $verbose                     = false,
152   $debug                       = false,
153   $storage_availability_zone   = 'nova',
154   $default_availability_zone   = false,
155   # DEPRECATED PARAMETERS
156   $mysql_module                = undef,
157   $sql_connection              = undef,
158   $sql_idle_timeout            = undef,
159 ) {
160
161   include cinder::params
162
163   Package['cinder'] -> Cinder_config<||>
164   Package['cinder'] -> Cinder_api_paste_ini<||>
165
166   if $mysql_module {
167     warning('The mysql_module parameter is deprecated. The latest 2.x mysql module will be used.')
168   }
169
170   if $sql_connection {
171     warning('The sql_connection parameter is deprecated, use database_connection instead.')
172     $database_connection_real = $sql_connection
173   } else {
174     $database_connection_real = $database_connection
175   }
176
177   if $sql_idle_timeout {
178     warning('The sql_idle_timeout parameter is deprecated, use database_idle_timeout instead.')
179     $database_idle_timeout_real = $sql_idle_timeout
180   } else {
181     $database_idle_timeout_real = $database_idle_timeout
182   }
183
184   if $use_ssl {
185     if !$cert_file {
186       fail('The cert_file parameter is required when use_ssl is set to true')
187     }
188     if !$key_file {
189       fail('The key_file parameter is required when use_ssl is set to true')
190     }
191   }
192
193   # this anchor is used to simplify the graph between cinder components by
194   # allowing a resource to serve as a point where the configuration of cinder begins
195   anchor { 'cinder-start': }
196
197   package { 'cinder':
198     ensure  => $package_ensure,
199     name    => $::cinder::params::package_name,
200     require => Anchor['cinder-start'],
201   }
202
203   file { $::cinder::params::cinder_conf:
204     ensure  => present,
205     owner   => 'cinder',
206     group   => 'cinder',
207     mode    => '0600',
208     require => Package['cinder'],
209   }
210
211   file { $::cinder::params::cinder_paste_api_ini:
212     ensure  => present,
213     owner   => 'cinder',
214     group   => 'cinder',
215     mode    => '0600',
216     require => Package['cinder'],
217   }
218
219   if $rpc_backend == 'cinder.openstack.common.rpc.impl_kombu' {
220
221     if ! $rabbit_password {
222       fail('Please specify a rabbit_password parameter.')
223     }
224
225     cinder_config {
226       'DEFAULT/rabbit_password':     value => $rabbit_password, secret => true;
227       'DEFAULT/rabbit_userid':       value => $rabbit_userid;
228       'DEFAULT/rabbit_virtual_host': value => $rabbit_virtual_host;
229       'DEFAULT/rabbit_use_ssl':      value => $rabbit_use_ssl;
230       'DEFAULT/control_exchange':    value => $control_exchange;
231       'DEFAULT/amqp_durable_queues': value => $amqp_durable_queues;
232     }
233
234     if $rabbit_hosts {
235       cinder_config { 'DEFAULT/rabbit_hosts':     value => join($rabbit_hosts, ',') }
236       cinder_config { 'DEFAULT/rabbit_ha_queues': value => true }
237       cinder_config { 'DEFAULT/rabbit_host':      ensure => absent }
238       cinder_config { 'DEFAULT/rabbit_port':      ensure => absent }
239     } else {
240       cinder_config { 'DEFAULT/rabbit_host':      value => $rabbit_host }
241       cinder_config { 'DEFAULT/rabbit_port':      value => $rabbit_port }
242       cinder_config { 'DEFAULT/rabbit_hosts':     value => "${rabbit_host}:${rabbit_port}" }
243       cinder_config { 'DEFAULT/rabbit_ha_queues': value => false }
244     }
245
246     if $rabbit_use_ssl {
247       cinder_config { 'DEFAULT/kombu_ssl_version': value => $kombu_ssl_version }
248
249       if $kombu_ssl_ca_certs {
250         cinder_config { 'DEFAULT/kombu_ssl_ca_certs': value => $kombu_ssl_ca_certs }
251       } else {
252         cinder_config { 'DEFAULT/kombu_ssl_ca_certs': ensure => absent}
253       }
254
255       if $kombu_ssl_certfile {
256         cinder_config { 'DEFAULT/kombu_ssl_certfile': value => $kombu_ssl_certfile }
257       } else {
258         cinder_config { 'DEFAULT/kombu_ssl_certfile': ensure => absent}
259       }
260
261       if $kombu_ssl_keyfile {
262         cinder_config { 'DEFAULT/kombu_ssl_keyfile': value => $kombu_ssl_keyfile }
263       } else {
264         cinder_config { 'DEFAULT/kombu_ssl_keyfile': ensure => absent}
265       }
266     } else {
267       cinder_config {
268         'DEFAULT/kombu_ssl_ca_certs': ensure => absent;
269         'DEFAULT/kombu_ssl_certfile': ensure => absent;
270         'DEFAULT/kombu_ssl_keyfile':  ensure => absent;
271         'DEFAULT/kombu_ssl_version':  ensure => absent;
272       }
273     }
274
275   }
276
277   if $rpc_backend == 'cinder.openstack.common.rpc.impl_qpid' {
278
279     if ! $qpid_password {
280       fail('Please specify a qpid_password parameter.')
281     }
282
283     cinder_config {
284       'DEFAULT/qpid_hostname':               value => $qpid_hostname;
285       'DEFAULT/qpid_port':                   value => $qpid_port;
286       'DEFAULT/qpid_username':               value => $qpid_username;
287       'DEFAULT/qpid_password':               value => $qpid_password, secret => true;
288       'DEFAULT/qpid_reconnect':              value => $qpid_reconnect;
289       'DEFAULT/qpid_reconnect_timeout':      value => $qpid_reconnect_timeout;
290       'DEFAULT/qpid_reconnect_limit':        value => $qpid_reconnect_limit;
291       'DEFAULT/qpid_reconnect_interval_min': value => $qpid_reconnect_interval_min;
292       'DEFAULT/qpid_reconnect_interval_max': value => $qpid_reconnect_interval_max;
293       'DEFAULT/qpid_reconnect_interval':     value => $qpid_reconnect_interval;
294       'DEFAULT/qpid_heartbeat':              value => $qpid_heartbeat;
295       'DEFAULT/qpid_protocol':               value => $qpid_protocol;
296       'DEFAULT/qpid_tcp_nodelay':            value => $qpid_tcp_nodelay;
297       'DEFAULT/amqp_durable_queues':         value => $amqp_durable_queues;
298     }
299
300     if is_array($qpid_sasl_mechanisms) {
301       cinder_config {
302         'DEFAULT/qpid_sasl_mechanisms': value => join($qpid_sasl_mechanisms, ' ');
303       }
304     } elsif $qpid_sasl_mechanisms {
305       cinder_config {
306         'DEFAULT/qpid_sasl_mechanisms': value => $qpid_sasl_mechanisms;
307       }
308     } else {
309       cinder_config {
310         'DEFAULT/qpid_sasl_mechanisms': ensure => absent;
311       }
312     }
313   }
314
315   if ! $default_availability_zone {
316     $default_availability_zone_real = $storage_availability_zone
317   } else {
318     $default_availability_zone_real = $default_availability_zone
319   }
320
321   cinder_config {
322     'database/connection':               value => $database_connection_real, secret => true;
323     'database/idle_timeout':             value => $database_idle_timeout_real;
324     'database/min_pool_size':            value => $database_min_pool_size;
325     'database/max_retries':              value => $database_max_retries;
326     'database/retry_interval':           value => $database_retry_interval;
327     'DEFAULT/verbose':                   value => $verbose;
328     'DEFAULT/debug':                     value => $debug;
329     'DEFAULT/api_paste_config':          value => $api_paste_config;
330     'DEFAULT/rpc_backend':               value => $rpc_backend;
331     'DEFAULT/storage_availability_zone': value => $storage_availability_zone;
332     'DEFAULT/default_availability_zone': value => $default_availability_zone_real;
333   }
334
335   if $database_max_pool_size {
336     cinder_config {
337       'database/max_pool_size': value => $database_max_pool_size;
338     }
339   } else {
340     cinder_config {
341       'database/max_pool_size': ensure => absent;
342     }
343   }
344
345   if $database_max_overflow {
346     cinder_config {
347       'database/max_overflow': value => $database_max_overflow;
348     }
349   } else {
350     cinder_config {
351       'database/max_overflow': ensure => absent;
352     }
353   }
354
355   if($database_connection_real =~ /mysql:\/\/\S+:\S+@\S+\/\S+/) {
356     require 'mysql::bindings'
357     require 'mysql::bindings::python'
358   } elsif($database_connection_real =~ /postgresql:\/\/\S+:\S+@\S+\/\S+/) {
359
360   } elsif($database_connection_real =~ /sqlite:\/\//) {
361
362   } else {
363     fail("Invalid db connection ${database_connection_real}")
364   }
365
366   if $log_dir {
367     cinder_config {
368       'DEFAULT/log_dir': value => $log_dir;
369     }
370   } else {
371     cinder_config {
372       'DEFAULT/log_dir': ensure => absent;
373     }
374   }
375
376   # SSL Options
377   if $use_ssl {
378     cinder_config {
379       'DEFAULT/ssl_cert_file' : value => $cert_file;
380       'DEFAULT/ssl_key_file' :  value => $key_file;
381     }
382     if $ca_file {
383       cinder_config { 'DEFAULT/ssl_ca_file' :
384         value => $ca_file,
385       }
386     } else {
387       cinder_config { 'DEFAULT/ssl_ca_file' :
388         ensure => absent,
389       }
390     }
391   } else {
392     cinder_config {
393       'DEFAULT/ssl_cert_file' : ensure => absent;
394       'DEFAULT/ssl_key_file' :  ensure => absent;
395       'DEFAULT/ssl_ca_file' :   ensure => absent;
396     }
397   }
398
399   if $use_syslog {
400     cinder_config {
401       'DEFAULT/use_syslog':           value => true;
402       'DEFAULT/syslog_log_facility':  value => $log_facility;
403     }
404   } else {
405     cinder_config {
406       'DEFAULT/use_syslog':           value => false;
407     }
408   }
409
410 }