+++ /dev/null
-# == 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]'})
- }
-
-}