]> git.donarmstrong.com Git - dsa-puppet.git/blobdiff - 3rdparty/modules/cinder/manifests/api.pp
try again, with puppetforge modules, correctly included now
[dsa-puppet.git] / 3rdparty / modules / cinder / manifests / api.pp
diff --git a/3rdparty/modules/cinder/manifests/api.pp b/3rdparty/modules/cinder/manifests/api.pp
new file mode 100644 (file)
index 0000000..f9102c4
--- /dev/null
@@ -0,0 +1,251 @@
+# == Class: cinder::api
+#
+# Setup and configure the cinder API endpoint
+#
+# === Parameters
+#
+# [*keystone_password*]
+#   The password to use for authentication (keystone)
+#
+# [*keystone_enabled*]
+#   (optional) Use keystone for authentification
+#   Defaults to true
+#
+# [*keystone_tenant*]
+#   (optional) The tenant of the auth user
+#   Defaults to services
+#
+# [*keystone_user*]
+#   (optional) The name of the auth user
+#   Defaults to cinder
+#
+# [*keystone_auth_host*]
+#   (optional) The keystone host
+#   Defaults to localhost
+#
+# [*keystone_auth_port*]
+#   (optional) The keystone auth port
+#   Defaults to 35357
+#
+# [*keystone_auth_protocol*]
+#   (optional) The protocol used to access the auth host
+#   Defaults to http.
+#
+# [*os_region_name*]
+#   (optional) Some operations require cinder to make API requests
+#   to Nova. This sets the keystone region to be used for these
+#   requests. For example, boot-from-volume.
+#   Defaults to undef.
+#
+# [*keystone_auth_admin_prefix*]
+#   (optional) The admin_prefix used to admin endpoint of the auth host
+#   This allow admin auth URIs like http://auth_host:35357/keystone.
+#   (where '/keystone' is the admin prefix)
+#   Defaults to false for empty. If defined, should be a string with a
+#   leading '/' and no trailing '/'.
+#
+# [*service_port*]
+#   (optional) The cinder api port
+#   Defaults to 5000
+#
+# [*service_workers*]
+#   (optional) Number of cinder-api workers
+#   Defaults to $::processorcount
+#
+# [*package_ensure*]
+#   (optional) The state of the package
+#   Defaults to present
+#
+# [*bind_host*]
+#   (optional) The cinder api bind address
+#   Defaults to 0.0.0.0
+#
+# [*enabled*]
+#   (optional) The state of the service
+#   Defaults to true
+#
+# [*manage_service*]
+#   (optional) Whether to start/stop the service
+#   Defaults to true
+#
+# [*ratelimits*]
+#   (optional) The state of the service
+#   Defaults to undef. If undefined the default ratelimiting values are used.
+#
+# [*ratelimits_factory*]
+#   (optional) Factory to use for ratelimiting
+#   Defaults to 'cinder.api.v1.limits:RateLimitingMiddleware.factory'
+#
+# [*default_volume_type*]
+#   (optional) default volume type to use.
+#   This should contain the name of the default volume type to use.
+#   If not configured, it produces an error when creating a volume
+#   without specifying a type.
+#   Defaults to 'false'.
+#
+# [*validate*]
+#   (optional) Whether to validate the service is working after any service refreshes
+#   Defaults to false
+#
+# [*validation_options*]
+#   (optional) Service validation options
+#   Should be a hash of options defined in openstacklib::service_validation
+#   If empty, defaults values are taken from openstacklib function.
+#   Default command list volumes.
+#   Require validate set at True.
+#   Example:
+#   glance::api::validation_options:
+#     glance-api:
+#       command: check_cinder-api.py
+#       path: /usr/bin:/bin:/usr/sbin:/sbin
+#       provider: shell
+#       tries: 5
+#       try_sleep: 10
+#   Defaults to {}
+#
+class cinder::api (
+  $keystone_password,
+  $keystone_enabled           = true,
+  $keystone_tenant            = 'services',
+  $keystone_user              = 'cinder',
+  $keystone_auth_host         = 'localhost',
+  $keystone_auth_port         = '35357',
+  $keystone_auth_protocol     = 'http',
+  $keystone_auth_admin_prefix = false,
+  $keystone_auth_uri          = false,
+  $os_region_name             = undef,
+  $service_port               = '5000',
+  $service_workers            = $::processorcount,
+  $package_ensure             = 'present',
+  $bind_host                  = '0.0.0.0',
+  $enabled                    = true,
+  $manage_service             = true,
+  $ratelimits                 = undef,
+  $default_volume_type        = false,
+  $ratelimits_factory =
+    'cinder.api.v1.limits:RateLimitingMiddleware.factory',
+  $validate                   = false,
+  $validation_options         = {},
+) {
+
+  include cinder::params
+  include cinder::policy
+
+  Cinder_config<||> ~> Service['cinder-api']
+  Cinder_api_paste_ini<||> ~> Service['cinder-api']
+  Class['cinder::policy'] ~> Service['cinder-api']
+
+  if $::cinder::params::api_package {
+    Package['cinder-api'] -> Class['cinder::policy']
+    Package['cinder-api'] -> Cinder_config<||>
+    Package['cinder-api'] -> Cinder_api_paste_ini<||>
+    Package['cinder-api'] -> Service['cinder-api']
+    package { 'cinder-api':
+      ensure  => $package_ensure,
+      name    => $::cinder::params::api_package,
+    }
+  }
+
+  if $enabled {
+
+    Cinder_config<||> ~> Exec['cinder-manage db_sync']
+
+    exec { 'cinder-manage db_sync':
+      command     => $::cinder::params::db_sync_command,
+      path        => '/usr/bin',
+      user        => 'cinder',
+      refreshonly => true,
+      logoutput   => 'on_failure',
+      require     => Package['cinder'],
+    }
+    if $manage_service {
+      $ensure = 'running'
+    }
+  } else {
+    if $manage_service {
+      $ensure = 'stopped'
+    }
+  }
+
+  service { 'cinder-api':
+    ensure    => $ensure,
+    name      => $::cinder::params::api_service,
+    enable    => $enabled,
+    hasstatus => true,
+    require   => Package['cinder'],
+  }
+
+  cinder_config {
+    'DEFAULT/osapi_volume_listen':  value => $bind_host;
+    'DEFAULT/osapi_volume_workers': value => $service_workers;
+  }
+
+  if $os_region_name {
+    cinder_config {
+      'DEFAULT/os_region_name': value => $os_region_name;
+    }
+  }
+
+  if $keystone_auth_uri {
+    $auth_uri = $keystone_auth_uri
+  } else {
+    $auth_uri = "${keystone_auth_protocol}://${keystone_auth_host}:${service_port}/"
+  }
+  cinder_api_paste_ini { 'filter:authtoken/auth_uri': value => $auth_uri; }
+
+  if $keystone_enabled {
+    cinder_config {
+      'DEFAULT/auth_strategy':     value => 'keystone' ;
+    }
+    cinder_api_paste_ini {
+      'filter:authtoken/service_protocol':  value => $keystone_auth_protocol;
+      'filter:authtoken/service_host':      value => $keystone_auth_host;
+      'filter:authtoken/service_port':      value => $service_port;
+      'filter:authtoken/auth_protocol':     value => $keystone_auth_protocol;
+      'filter:authtoken/auth_host':         value => $keystone_auth_host;
+      'filter:authtoken/auth_port':         value => $keystone_auth_port;
+      'filter:authtoken/admin_tenant_name': value => $keystone_tenant;
+      'filter:authtoken/admin_user':        value => $keystone_user;
+      'filter:authtoken/admin_password':    value => $keystone_password, secret => true;
+    }
+
+  if ($ratelimits != undef) {
+    cinder_api_paste_ini {
+      'filter:ratelimit/paste.filter_factory': value => $ratelimits_factory;
+      'filter:ratelimit/limits':               value => $ratelimits;
+    }
+  }
+
+    if $keystone_auth_admin_prefix {
+      validate_re($keystone_auth_admin_prefix, '^(/.+[^/])?$')
+      cinder_api_paste_ini {
+        'filter:authtoken/auth_admin_prefix': value => $keystone_auth_admin_prefix;
+      }
+    } else {
+      cinder_api_paste_ini {
+        'filter:authtoken/auth_admin_prefix': ensure => absent;
+      }
+    }
+  }
+
+  if $default_volume_type {
+    cinder_config {
+      'DEFAULT/default_volume_type': value => $default_volume_type;
+    }
+  } else {
+    cinder_config {
+      'DEFAULT/default_volume_type': ensure => absent;
+    }
+  }
+
+  if $validate {
+    $defaults = {
+      'cinder-api' => {
+        'command'  => "cinder --os-auth-url ${auth_uri} --os-tenant-name ${keystone_tenant} --os-username ${keystone_user} --os-password ${keystone_password} list",
+      }
+    }
+    $validation_options_hash = merge ($defaults, $validation_options)
+    create_resources('openstacklib::service_validation', $validation_options_hash, {'subscribe' => 'Service[cinder-api]'})
+  }
+
+}