]> review.fuel-infra Code Review - puppet-modules/puppet-ceilometer.git/commitdiff
Move ceilometer to authtoken
authorIury Gregory Melo Ferreira <iurygregory@gmail.com>
Fri, 22 Jul 2016 04:21:49 +0000 (01:21 -0300)
committerMaksim Malchuk <mmalchuk@mirantis.com>
Fri, 19 Aug 2016 08:16:15 +0000 (08:16 +0000)
In ceilometer::api, use keystone::resource::authtoken to configure
keystone_authsection in the configuration file.

Some deprecations:
- ceilometer::api::identity_uri is deprecated in favor of
ceilometer::api::auth_url
- ceilometer::api::keystone_tenant is deprecated in favor of
ceilometer::api::project_name.
- ceilometer::api::keystone_user is deprecated in favor of
ceilometer::api::username.
- ceilometer::api::keystone_password is deprecated in favor of
ceilometer::api::password.

-Remove deprecated parameters

Change-Id: Iebfb4caf7d4675e17b866142292d421dcf62f63b
Related-Bug: #1604463

examples/ceilometer_with_gnocchi.pp
examples/site.pp
manifests/api.pp
manifests/keystone/authtoken.pp [new file with mode: 0644]
releasenotes/notes/authtoken_resource-be94146ce8104cea.yaml [new file with mode: 0644]
spec/acceptance/ceilometer_wsgi_apache_spec.rb
spec/classes/ceilometer_api_spec.rb
spec/classes/ceilometer_keystone_authtoken_spec.rb [new file with mode: 0644]

index 708595ba8448c02529a4abc2904aea227b554873..84144570b4eeb36ac5be81eb0460b31bf01a1bfb 100644 (file)
@@ -17,11 +17,12 @@ class { '::ceilometer::client': }
 class { '::ceilometer::expirer': }
 class { '::ceilometer::agent::central': }
 class { '::ceilometer::agent::notification': }
+class { '::ceilometer::keystone::authtoken':
+  password => 'a_big_secret',
+}
 class { '::ceilometer::api':
-  enabled               => true,
-  keystone_password     => 'a_big_secret',
-  keystone_identity_uri => 'http://127.0.0.1:35357/',
-  service_name          => 'httpd',
+  enabled      => true,
+  service_name => 'httpd',
 }
 include ::apache
 class { '::ceilometer::wsgi::apache':
index 817be03cb0cc3929802451456a6931922007ef00..680b26058e4c9f7f5c8ee8caf9eda2403f9b9095 100644 (file)
@@ -29,11 +29,12 @@ node default {
   #   require             => Class['mongodb'],
   # }
 
-  # Install the ceilometer-api service
-  # The keystone_password parameter is mandatory
-  class { '::ceilometer::api':
-    keystone_password => 'tralalayouyou'
+  # Configure keystonemiddleware for ceilometer
+  class { '::ceilometer::keystone::authtoken':
+    password => 'tralalayouyou'
   }
+  # Install the ceilometer-api service
+  class { '::ceilometer::api': }
 
   # Set common auth parameters used by all agents (compute/central)
   class { '::ceilometer::agent::auth':
index f833f6f58b721afd7777b203c668e7fc176559da..c0aaadd0566db30b256e1b2af86372d04d02e029 100644 (file)
 #   (Optional) Whether the service should be managed by Puppet.
 #   Defaults to true.
 #
-# [*keystone_user*]
-#   (optional) The name of the auth user
-#   Defaults to ceilometer.
-#
-# [*keystone_user*]
-#   (Optional) User to authenticate with.
-#   Defaults to 'ceilometer'.
-#
-# [*keystone_tenant*]
-#   (Optional) Tenant to authenticate with.
-#   Defaults to 'services'.
-#
-# [*keystone_password*]
-#   (Required) Password to authenticate with.
-#
-# [*memcached_servers*]
-#   (optinal) a list of memcached server(s) to use for caching. If left
-#   undefined, tokens will instead be cached in-process.
-#   Defaults to $::os_service_default.
-#
-# [*auth_uri*]
-#   (Optional) Public Identity API endpoint.
-#   Defaults to 'http://127.0.0.1:5000/'.
-#
-# [*identity_uri*]
-#   (Optional) Complete admin Identity API endpoint.
-#   Defaults to 'http://127.0.0.1:35357/'.
-#
 # [*host*]
 #   (Optional) The ceilometer api bind address.
 #   Defaults to '0.0.0.0'.
 #   (Optional) Number of workers for Ceilometer API server (integer value).
 #   Defaults to $::os_service_default.
 #
-# [*keystone_auth_uri*]
-#   (optional) DEPRECATED Public Identity API endpoint.
-#   Defaults to false.
-#   Use auth_uri instead.
+# [*auth_strategy*]
+#   (Optional) Type of authentication to be used.
+#   Defaults to 'keystone'
+#
+# = DEPRECATED PARAMETER
+#
+# [*identity_uri*]
+#   (Optional) DEPRECATED Use ceilometer::keystone::authtoken::auth_url instead.
+#   Defaults to undef
+#
+# [*auth_uri*]
+#   (Optional) DEPRECATED Use ceilometer::keystone::authtoken::auth_uri instead
+#   Defaults to undef
+#
+# [*keystone_user*]
+#   (Optional) DEPRECATED Use ceilometer::keystone::authtoken::username instead.
+#   Defaults to undef
+#
+# [*keystone_tenant*]
+#   (Optional) DEPRECATED Use ceilometer::keystone::authtoken::project_name instead.
+#   Defaults to undef
+#
+# [*keystone_password*]
+#   (Optional) DEPRECATED. Use ceilometer::keystone::authtoken::password instead.
+#   Defaults to undef
 #
-# [*keystone_identity_uri*]
-#   (optional) DEPRECATED Complete admin Identity API endpoint.
-#   Defaults to false.
-#   Use identity_uri instead.
+# [*memcached_servers*]
+#   (Optional) DEPRECATED. Use ceilometer::keystone::authtoken::memcached_servers instead.
+#   Defaults to undef
 #
 class ceilometer::api (
-  $manage_service             = true,
-  $enabled                    = true,
-  $package_ensure             = 'present',
-  $keystone_user              = 'ceilometer',
-  $keystone_tenant            = 'services',
-  $keystone_password          = false,
-  $memcached_servers          = $::os_service_default,
-  $auth_uri                   = 'http://127.0.0.1:5000/',
-  $identity_uri               = 'http://127.0.0.1:35357/',
-  $host                       = '0.0.0.0',
-  $port                       = '8777',
-  $service_name               = $::ceilometer::params::api_service_name,
-  $api_workers                = $::os_service_default,
+  $manage_service    = true,
+  $enabled           = true,
+  $package_ensure    = 'present',
+  $host              = '0.0.0.0',
+  $port              = '8777',
+  $service_name      = $::ceilometer::params::api_service_name,
+  $api_workers       = $::os_service_default,
+  $auth_strategy     = 'keystone',
   # DEPRECATED PARAMETERS
-  $keystone_auth_uri          = false,
-  $keystone_identity_uri      = false,
+  $identity_uri      = undef,
+  $auth_uri          = undef,
+  $keystone_user     = undef,
+  $keystone_tenant   = undef,
+  $keystone_password = undef,
+  $memcached_servers = undef,
 ) inherits ceilometer::params {
 
   include ::ceilometer::params
   include ::ceilometer::policy
 
-  validate_string($keystone_password)
+  if $auth_strategy == 'keystone' {
+    include ::ceilometer::keystone::authtoken
+  }
+
+  if $identity_uri {
+    warning('ceilometer::api::identity_uri is deprecated, use ceilometer::keystone::authtoken::auth_url instead')
+  }
+
+  if $auth_uri {
+    warning('ceilometer::api::auth_uri is deprecated, use ceilometer::keystone::authtoken::auth_uri instead')
+  }
+
+  if $keystone_user {
+    warning('ceilometer::api::keystone_user is deprecated, use ceilometer::keystone::authtoken::username instead')
+  }
+
+  if $keystone_tenant {
+    warning('ceilometer::api::keystone_tenant is deprecated, use ceilometer::keystone::authtoken::project_name instead')
+  }
+
+  if $keystone_password {
+    warning('ceilometer::api::keystone_password is deprecated, use ceilometer::keystone::authtoken::password instead')
+  }
+
+  if $memcached_servers {
+    warning('ceilometer::api::memcached_servers is deprecated, use ceilometer::keystone::authtoken::memcached_servers instead')
+  }
+
 
   Ceilometer_config<||> ~> Service[$service_name]
   Class['ceilometer::policy'] ~> Service[$service_name]
@@ -147,32 +165,9 @@ class ceilometer::api (
   }
 
   ceilometer_config {
-    'api/workers'                          : value => $api_workers;
-    'keystone_authtoken/admin_tenant_name' : value => $keystone_tenant;
-    'keystone_authtoken/admin_user'        : value => $keystone_user;
-    'keystone_authtoken/admin_password'    : value => $keystone_password, secret => true;
-    'keystone_authtoken/memcached_servers' : value => join(any2array($memcached_servers), ',');
-    'api/host'                             : value => $host;
-    'api/port'                             : value => $port;
-  }
-
-  if $keystone_auth_uri {
-    warning('The keystone_auth_uri parameter is deprecated. Please use auth_uri instead.')
-    $auth_uri_real = $keystone_auth_uri
-  } else {
-    $auth_uri_real = $auth_uri
-  }
-
-  if $keystone_identity_uri {
-    warning('The keystone_identity_uri parameter is deprecated. Please use identity_uri instead.')
-    $identity_uri_real = $keystone_identity_uri
-  } else {
-    $identity_uri_real = $identity_uri
-  }
-
-  ceilometer_config {
-    'keystone_authtoken/auth_uri'     : value => $auth_uri_real;
-    'keystone_authtoken/identity_uri' : value => $identity_uri_real;
+    'api/workers': value => $api_workers;
+    'api/host':    value => $host;
+    'api/port':    value => $port;
   }
 
 }
diff --git a/manifests/keystone/authtoken.pp b/manifests/keystone/authtoken.pp
new file mode 100644 (file)
index 0000000..e3a1b3d
--- /dev/null
@@ -0,0 +1,274 @@
+# class: ceilometer::keystone::authtoken
+#
+# Configure the keystone_authtoken section in the configuration file
+#
+# === Parameters
+#
+# [*username*]
+#   (Optional) The name of the service user
+#   Defaults to 'ceilometer'
+#
+# [*password*]
+#   (Optional) Password to create for the service user
+#   Defaults to $::os_service_default
+#
+# [*auth_url*]
+#   (Optional) The URL to use for authentication.
+#   Defaults to 'http://127.0.0.1:35357/'.
+#
+# [*project_name*]
+#   (Optional) Service project name
+#   Defaults to 'services'
+#
+# [*user_domain_name*]
+#   (Optional) Name of domain for $username
+#   Defaults to $::os_service_default
+#
+# [*project_domain_name*]
+#   (Optional) Name of domain for $project_name
+#   Defaults to $::os_service_default
+#
+# [*insecure*]
+#   (Optional) If true, explicitly allow TLS without checking server cert
+#   against any certificate authorities.  WARNING: not recommended.  Use with
+#   caution.
+#   Defaults to $:os_service_default
+#
+# [*auth_section*]
+#   (Optional) Config Section from which to load plugin specific options
+#   Defaults to $::os_service_default.
+#
+# [*auth_type*]
+#   (Optional) Authentication type to load
+#   Defaults to 'password'
+#
+# [*auth_uri*]
+#   (Optional) Complete public Identity API endpoint.
+#   Defaults to 'http://127.0.0.1:5000/'.
+#
+# [*auth_version*]
+#   (Optional) API version of the admin Identity API endpoint.
+#   Defaults to $::os_service_default.
+#
+# [*cache*]
+#   (Optional) Env key for the swift cache.
+#   Defaults to $::os_service_default.
+#
+# [*cafile*]
+#   (Optional) A PEM encoded Certificate Authority to use when verifying HTTPs
+#   connections.
+#   Defaults to $::os_service_default.
+#
+# [*certfile*]
+#   (Optional) Required if identity server requires client certificate
+#   Defaults to $::os_service_default.
+#
+# [*check_revocations_for_cached*]
+#   (Optional) If true, the revocation list will be checked for cached tokens.
+#   This requires that PKI tokens are configured on the identity server.
+#   boolean value.
+#   Defaults to $::os_service_default.
+#
+# [*delay_auth_decision*]
+#   (Optional) Do not handle authorization requests within the middleware, but
+#   delegate the authorization decision to downstream WSGI components. Boolean
+#   value
+#   Defaults to $::os_service_default.
+#
+# [*enforce_token_bind*]
+#   (Optional) Used to control the use and type of token binding. Can be set
+#   to: "disabled" to not check token binding. "permissive" (default) to
+#   validate binding information if the bind type is of a form known to the
+#   server and ignore it if not. "strict" like "permissive" but if the bind
+#   type is unknown the token will be rejected. "required" any form of token
+#   binding is needed to be allowed. Finally the name of a binding method that
+#   must be present in tokens. String value.
+#   Defaults to $::os_service_default.
+#
+# [*hash_algorithms*]
+#   (Optional) Hash algorithms to use for hashing PKI tokens. This may be a
+#   single algorithm or multiple. The algorithms are those supported by Python
+#   standard hashlib.new(). The hashes will be tried in the order given, so put
+#   the preferred one first for performance. The result of the first hash will
+#   be stored in the cache. This will typically be set to multiple values only
+#   while migrating from a less secure algorithm to a more secure one. Once all
+#   the old tokens are expired this option should be set to a single value for
+#   better performance. List value.
+#   Defaults to $::os_service_default.
+#
+# [*http_connect_timeout*]
+#   (Optional) Request timeout value for communicating with Identity API
+#   server.
+#   Defaults to $::os_service_default.
+#
+# [*http_request_max_retries*]
+#   (Optional) How many times are we trying to reconnect when communicating
+#   with Identity API Server. Integer value
+#   Defaults to $::os_service_default.
+#
+# [*include_service_catalog*]
+#   (Optional) Indicate whether to set the X-Service-Catalog header. If False,
+#   middleware will not ask for service catalog on token validation and will
+#   not set the X-Service-Catalog header. Boolean value.
+#   Defaults to $::os_service_default.
+#
+# [*keyfile*]
+#   (Optional) Required if identity server requires client certificate
+#   Defaults to $::os_service_default.
+#
+# [*memcache_pool_conn_get_timeout*]
+#   (Optional) Number of seconds that an operation will wait to get a memcached
+#   client connection from the pool. Integer value
+#   Defaults to $::os_service_default.
+#
+# [*memcache_pool_dead_retry*]
+#   (Optional) Number of seconds memcached server is considered dead before it
+#   is tried again. Integer value
+#   Defaults to $::os_service_default.
+#
+# [*memcache_pool_maxsize*]
+#   (Optional) Maximum total number of open connections to every memcached
+#   server. Integer value
+#   Defaults to $::os_service_default.
+#
+# [*memcache_pool_socket_timeout*]
+#   (Optional) Number of seconds a connection to memcached is held unused in
+#   the pool before it is closed. Integer value
+#   Defaults to $::os_service_default.
+#
+# [*memcache_pool_unused_timeout*]
+#   (Optional) Number of seconds a connection to memcached is held unused in
+#   the pool before it is closed. Integer value
+#   Defaults to $::os_service_default.
+#
+# [*memcache_secret_key*]
+#   (Optional, mandatory if memcache_security_strategy is defined) This string
+#   is used for key derivation.
+#   Defaults to $::os_service_default.
+#
+# [*memcache_security_strategy*]
+#   (Optional) If defined, indicate whether token data should be authenticated
+#   or authenticated and encrypted. If MAC, token data is authenticated (with
+#   HMAC) in the cache. If ENCRYPT, token data is encrypted and authenticated in the
+#   cache. If the value is not one of these options or empty, auth_token will
+#   raise an exception on initialization.
+#   Defaults to $::os_service_default.
+#
+# [*memcache_use_advanced_pool*]
+#   (Optional)  Use the advanced (eventlet safe) memcached client pool. The
+#   advanced pool will only work under python 2.x Boolean value
+#   Defaults to $::os_service_default.
+#
+# [*memcached_servers*]
+#   (Optional) Optionally specify a list of memcached server(s) to use for
+#   caching. If left undefined, tokens will instead be cached in-process.
+#   Defaults to $::os_service_default.
+#
+# [*region_name*]
+#   (Optional) The region in which the identity server can be found.
+#   Defaults to $::os_service_default.
+#
+# [*revocation_cache_time*]
+#   (Optional) Determines the frequency at which the list of revoked tokens is
+#   retrieved from the Identity service (in seconds). A high number of
+#   revocation events combined with a low cache duration may significantly
+#   reduce performance. Only valid for PKI tokens. Integer value
+#   Defaults to $::os_service_default.
+#
+# [*signing_dir*]
+#   (Optional) Directory used to cache files related to PKI tokens.
+#   Defaults to $::os_service_default.
+#
+# [*token_cache_time*]
+#   (Optional) In order to prevent excessive effort spent validating tokens,
+#   the middleware caches previously-seen tokens for a configurable duration
+#   (in seconds). Set to -1 to disable caching completely. Integer value
+#   Defaults to $::os_service_default.
+#
+class ceilometer::keystone::authtoken(
+  $username                       = 'ceilometer',
+  $password                       = $::os_service_default,
+  $auth_url                       = 'http://127.0.0.1:35357/',
+  $project_name                   = 'services',
+  $user_domain_name               = $::os_service_default,
+  $project_domain_name            = $::os_service_default,
+  $insecure                       = $::os_service_default,
+  $auth_section                   = $::os_service_default,
+  $auth_type                      = 'password',
+  $auth_uri                       = 'http://127.0.0.1:5000/',
+  $auth_version                   = $::os_service_default,
+  $cache                          = $::os_service_default,
+  $cafile                         = $::os_service_default,
+  $certfile                       = $::os_service_default,
+  $check_revocations_for_cached   = $::os_service_default,
+  $delay_auth_decision            = $::os_service_default,
+  $enforce_token_bind             = $::os_service_default,
+  $hash_algorithms                = $::os_service_default,
+  $http_connect_timeout           = $::os_service_default,
+  $http_request_max_retries       = $::os_service_default,
+  $include_service_catalog        = $::os_service_default,
+  $keyfile                        = $::os_service_default,
+  $memcache_pool_conn_get_timeout = $::os_service_default,
+  $memcache_pool_dead_retry       = $::os_service_default,
+  $memcache_pool_maxsize          = $::os_service_default,
+  $memcache_pool_socket_timeout   = $::os_service_default,
+  $memcache_pool_unused_timeout   = $::os_service_default,
+  $memcache_secret_key            = $::os_service_default,
+  $memcache_security_strategy     = $::os_service_default,
+  $memcache_use_advanced_pool     = $::os_service_default,
+  $memcached_servers              = $::os_service_default,
+  $region_name                    = $::os_service_default,
+  $revocation_cache_time          = $::os_service_default,
+  $signing_dir                    = $::os_service_default,
+  $token_cache_time               = $::os_service_default,
+) {
+
+  if is_service_default($password) and ! $::ceilometer::api::keystone_password {
+    fail('Please set password for ceilometer service user')
+  }
+
+  $username_real = pick($::ceilometer::api::keystone_user,$username)
+  $password_real = pick($::ceilometer::api::keystone_password,$password)
+  $project_name_real = pick($::ceilometer::api::keystone_tenant,$project_name)
+  $auth_uri_real = pick($::ceilometer::api::auth_uri, $auth_uri)
+  $auth_url_real = pick($::ceilometer::api::identity_uri, $auth_url)
+  $memcached_servers_real = pick($::ceilometer::api::memcached_servers, $memcached_servers)
+
+  keystone::resource::authtoken { 'ceilometer_config':
+    username                       => $username_real,
+    password                       => $password_real,
+    project_name                   => $project_name_real,
+    auth_url                       => $auth_url_real,
+    auth_uri                       => $auth_uri_real,
+    auth_version                   => $auth_version,
+    auth_type                      => $auth_type,
+    auth_section                   => $auth_section,
+    user_domain_name               => $user_domain_name,
+    project_domain_name            => $project_domain_name,
+    insecure                       => $insecure,
+    cache                          => $cache,
+    cafile                         => $cafile,
+    certfile                       => $certfile,
+    check_revocations_for_cached   => $check_revocations_for_cached,
+    delay_auth_decision            => $delay_auth_decision,
+    enforce_token_bind             => $enforce_token_bind,
+    hash_algorithms                => $hash_algorithms,
+    http_connect_timeout           => $http_connect_timeout,
+    http_request_max_retries       => $http_request_max_retries,
+    include_service_catalog        => $include_service_catalog,
+    keyfile                        => $keyfile,
+    memcache_pool_conn_get_timeout => $memcache_pool_conn_get_timeout,
+    memcache_pool_dead_retry       => $memcache_pool_dead_retry,
+    memcache_pool_maxsize          => $memcache_pool_maxsize,
+    memcache_pool_socket_timeout   => $memcache_pool_socket_timeout,
+    memcache_secret_key            => $memcache_secret_key,
+    memcache_security_strategy     => $memcache_security_strategy,
+    memcache_use_advanced_pool     => $memcache_use_advanced_pool,
+    memcache_pool_unused_timeout   => $memcache_pool_unused_timeout,
+    memcached_servers              => $memcached_servers_real,
+    region_name                    => $region_name,
+    revocation_cache_time          => $revocation_cache_time,
+    signing_dir                    => $signing_dir,
+    token_cache_time               => $token_cache_time,
+  }
+}
diff --git a/releasenotes/notes/authtoken_resource-be94146ce8104cea.yaml b/releasenotes/notes/authtoken_resource-be94146ce8104cea.yaml
new file mode 100644 (file)
index 0000000..b21247f
--- /dev/null
@@ -0,0 +1,20 @@
+---
+features:
+  - Configure keystonemiddleware in a consistent way with all options required
+    for Keystone v3.
+deprecations:
+  - ceilometer::api::identity_uri is deprecated in favor of
+    ceilometer::keystone::authtoken::auth_url
+  - ceilometer::api::auth_uri is deprecated in favor of
+    ceilometer::keystone::authtoken::auth_uri
+  - ceilometer::api::keystone_tenant is deprecated in favor of
+    ceilometer::keystone::authtoken::project_name.
+  - ceilometer::api::keystone_user is deprecated in favor of
+    ceilometer::keystone::authtoken::username.
+  - ceilometer::api::keystone_password is deprecated in favor of
+    ceilometer::keystone::authtoken::password.
+  - ceilometer::api::memcached_servers is deprecated in favor of
+    ceilometer::keystone::authtoken::memcached_servers.
+other:
+  - remove deprecated parameter ceilometer::api::keystone_auth_uri and
+    ceilometer::api::keystone_identity_uri
index aa771a5457465f18cab94db0d16fe2f2dbebb060..340ffdd0d44f6a638f9939dd3177c76f5430b5b1 100644 (file)
@@ -48,11 +48,12 @@ describe 'ceilometer with mysql' do
       class { '::ceilometer::expirer': }
       class { '::ceilometer::agent::central': }
       class { '::ceilometer::agent::notification': }
+      class { '::ceilometer::keystone::authtoken':
+        password => 'a_big_secret',
+      }
       class { '::ceilometer::api':
-        enabled               => true,
-        keystone_password     => 'a_big_secret',
-        keystone_identity_uri => 'http://127.0.0.1:35357/',
-        service_name          => 'httpd',
+        enabled      => true,
+        service_name => 'httpd',
       }
       include ::apache
       class { '::ceilometer::wsgi::apache':
index 34a56dfda944ae0f23751a812ff60605944a3073..fcf7ead147dcc14e38cf286f11919ec9ddb6d09a 100644 (file)
@@ -8,26 +8,20 @@ describe 'ceilometer::api' do
   end
 
   let :params do
-    { :enabled           => true,
-      :manage_service    => true,
-      :keystone_user     => 'ceilometer',
+    { :enabled        => true,
+      :manage_service => true,
       :keystone_password => 'ceilometer-passw0rd',
-      :keystone_tenant   => 'services',
-      :host              => '0.0.0.0',
-      :port              => '8777',
-      :package_ensure    => 'latest',
+      :host           => '0.0.0.0',
+      :port           => '8777',
+      :package_ensure => 'latest',
     }
   end
 
   shared_examples_for 'ceilometer-api' do
 
-    context 'without required parameter keystone_password' do
-      before { params.delete(:keystone_password) }
-      it { expect { is_expected.to raise_error(Puppet::Error) } }
-    end
-
     it { is_expected.to contain_class('ceilometer::params') }
     it { is_expected.to contain_class('ceilometer::policy') }
+    it { is_expected.to contain_class('ceilometer::keystone::authtoken') }
 
     it 'installs ceilometer-api package' do
       is_expected.to contain_package('ceilometer-api').with(
@@ -37,14 +31,7 @@ describe 'ceilometer::api' do
       )
     end
 
-    it 'configures keystone authentication middleware' do
-      is_expected.to contain_ceilometer_config('keystone_authtoken/admin_tenant_name').with_value( params[:keystone_tenant] )
-      is_expected.to contain_ceilometer_config('keystone_authtoken/admin_user').with_value( params[:keystone_user] )
-      is_expected.to contain_ceilometer_config('keystone_authtoken/admin_password').with_value( params[:keystone_password] )
-      is_expected.to contain_ceilometer_config('keystone_authtoken/admin_password').with_value( params[:keystone_password] ).with_secret(true)
-      is_expected.to contain_ceilometer_config('keystone_authtoken/auth_uri').with_value("http://127.0.0.1:5000/")
-      is_expected.to contain_ceilometer_config('keystone_authtoken/identity_uri').with_value("http://127.0.0.1:35357/")
-      is_expected.to contain_ceilometer_config('keystone_authtoken/memcached_servers').with_value('<SERVICE DEFAULT>')
+    it 'configures api' do
       is_expected.to contain_ceilometer_config('api/host').with_value( params[:host] )
       is_expected.to contain_ceilometer_config('api/port').with_value( params[:port] )
       is_expected.to contain_ceilometer_config('api/workers').with_value('<SERVICE DEFAULT>')
@@ -70,13 +57,31 @@ describe 'ceilometer::api' do
       end
     end
 
-    context 'with memcached servers' do
+    context 'with deprecated parameters' do
       before do
-        params.merge!({ :memcached_servers => '1.1.1.1:11211', })
+        params.merge!({
+          :auth_uri           => 'https://10.0.0.1:5000/deprecated',
+          :keystone_user      => 'myuser',
+          :keystone_password  => 'mypasswd',
+          :identity_uri       => 'http://10.0.0.1:35357/deprecated',
+          :keystone_tenant    => 'service_project',
+          :memcached_servers  => ['memcached01:11211','memcached02:11211'],
+        })
       end
 
-      it 'configures ceilometer-api service' do
-        is_expected.to contain_ceilometer_config('keystone_authtoken/memcached_servers').with_value('1.1.1.1:11211')
+      it 'configures keystone_authtoken middleware' do
+        is_expected.to contain_ceilometer_config(
+          'keystone_authtoken/auth_uri').with_value(params[:auth_uri])
+        is_expected.to contain_ceilometer_config(
+          'keystone_authtoken/username').with_value(params[:keystone_user])
+        is_expected.to contain_ceilometer_config(
+          'keystone_authtoken/password').with_value(params[:keystone_password]).with_secret(true)
+        is_expected.to contain_ceilometer_config(
+          'keystone_authtoken/auth_url').with_value(params[:identity_uri])
+        is_expected.to contain_ceilometer_config(
+          'keystone_authtoken/project_name').with_value(params[:keystone_tenant])
+        is_expected.to contain_ceilometer_config(
+          'keystone_authtoken/memcached_servers').with_value('memcached01:11211,memcached02:11211')
       end
     end
 
@@ -172,36 +177,4 @@ describe 'ceilometer::api' do
     it_configures 'ceilometer-api'
   end
 
-  describe "with deprecated custom keystone_identity_uri and keystone_auth_uri" do
-    let :facts do
-      @default_facts.merge({ :osfamily => 'RedHat' })
-    end
-    before do
-      params.merge!({
-        :keystone_identity_uri => 'https://foo.bar:35357/',
-        :keystone_auth_uri => 'https://foo.bar:5000/',
-      })
-    end
-    it 'configures identity_uri and auth_uri but deprecates old auth settings' do
-      is_expected.to contain_ceilometer_config('keystone_authtoken/identity_uri').with_value("https://foo.bar:35357/");
-      is_expected.to contain_ceilometer_config('keystone_authtoken/auth_uri').with_value("https://foo.bar:5000/");
-    end
-  end
-
-  describe "with custom keystone identity_uri and auth_uri" do
-    let :facts do
-      @default_facts.merge({ :osfamily => 'RedHat' })
-    end
-    before do
-      params.merge!({
-        :identity_uri => 'https://foo.bar:35357/',
-        :auth_uri => 'https://foo.bar:5000/',
-      })
-    end
-    it 'configures identity_uri and auth_uri but deprecates old auth settings' do
-      is_expected.to contain_ceilometer_config('keystone_authtoken/identity_uri').with_value("https://foo.bar:35357/");
-      is_expected.to contain_ceilometer_config('keystone_authtoken/auth_uri').with_value("https://foo.bar:5000/");
-    end
-  end
-
 end
diff --git a/spec/classes/ceilometer_keystone_authtoken_spec.rb b/spec/classes/ceilometer_keystone_authtoken_spec.rb
new file mode 100644 (file)
index 0000000..17c1f6d
--- /dev/null
@@ -0,0 +1,145 @@
+require 'spec_helper'
+
+describe 'ceilometer::keystone::authtoken' do
+
+  let :params do
+    { :password => 'ceilometer_password', }
+  end
+
+  shared_examples 'ceilometer authtoken' do
+
+    context 'with default parameters' do
+
+      it 'configure keystone_authtoken' do
+        is_expected.to contain_ceilometer_config('keystone_authtoken/username').with_value('ceilometer')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/password').with_value('ceilometer_password')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/auth_url').with_value('http://127.0.0.1:35357/')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/project_name').with_value('services')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/user_domain_name').with_value('<SERVICE DEFAULT>')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/project_domain_name').with_value('<SERVICE DEFAULT>')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/insecure').with_value('<SERVICE DEFAULT>')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/auth_section').with_value('<SERVICE DEFAULT>')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/auth_type').with_value('password')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/auth_uri').with_value('http://127.0.0.1:5000/')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/auth_version').with_value('<SERVICE DEFAULT>')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/cache').with_value('<SERVICE DEFAULT>')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/cafile').with_value('<SERVICE DEFAULT>')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/certfile').with_value('<SERVICE DEFAULT>')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/check_revocations_for_cached').with_value('<SERVICE DEFAULT>')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/delay_auth_decision').with_value('<SERVICE DEFAULT>')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/enforce_token_bind').with_value('<SERVICE DEFAULT>')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/hash_algorithms').with_value('<SERVICE DEFAULT>')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/http_connect_timeout').with_value('<SERVICE DEFAULT>')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/http_request_max_retries').with_value('<SERVICE DEFAULT>')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/include_service_catalog').with_value('<SERVICE DEFAULT>')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/keyfile').with_value('<SERVICE DEFAULT>')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/memcache_pool_conn_get_timeout').with_value('<SERVICE DEFAULT>')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/memcache_pool_dead_retry').with_value('<SERVICE DEFAULT>')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/memcache_pool_maxsize').with_value('<SERVICE DEFAULT>')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/memcache_pool_socket_timeout').with_value('<SERVICE DEFAULT>')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/memcache_pool_unused_timeout').with_value('<SERVICE DEFAULT>')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/memcache_secret_key').with_value('<SERVICE DEFAULT>')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/memcache_security_strategy').with_value('<SERVICE DEFAULT>')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/memcache_use_advanced_pool').with_value('<SERVICE DEFAULT>')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/memcached_servers').with_value('<SERVICE DEFAULT>')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/region_name').with_value('<SERVICE DEFAULT>')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/revocation_cache_time').with_value('<SERVICE DEFAULT>')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/signing_dir').with_value('<SERVICE DEFAULT>')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/token_cache_time').with_value('<SERVICE DEFAULT>')
+      end
+    end
+
+    context 'when overriding parameters' do
+      before do
+        params.merge!({
+          :auth_uri                             => 'https://10.0.0.1:9999/',
+          :username                             => 'myuser',
+          :password                             => 'mypasswd',
+          :auth_url                             => 'https://127.0.0.1:35357',
+          :project_name                         => 'service_project',
+          :user_domain_name                     => 'domainX',
+          :project_domain_name                  => 'domainX',
+          :insecure                             => false,
+          :auth_section                         => 'new_section',
+          :auth_type                            => 'password',
+          :auth_version                         => 'v3',
+          :cache                                => 'somevalue',
+          :cafile                               => '/opt/stack/data/cafile.pem',
+          :certfile                             => 'certfile.crt',
+          :check_revocations_for_cached         => false,
+          :delay_auth_decision                  => false,
+          :enforce_token_bind                   => 'permissive',
+          :hash_algorithms                      => 'md5',
+          :http_connect_timeout                 => '300',
+          :http_request_max_retries             => '3',
+          :include_service_catalog              => true,
+          :keyfile                              => 'keyfile',
+          :memcache_pool_conn_get_timeout       => '9',
+          :memcache_pool_dead_retry             => '302',
+          :memcache_pool_maxsize                => '11',
+          :memcache_pool_socket_timeout         => '2',
+          :memcache_pool_unused_timeout         => '61',
+          :memcache_secret_key                  => 'secret_key',
+          :memcache_security_strategy           => 'ENCRYPT',
+          :memcache_use_advanced_pool           => true,
+          :memcached_servers                    => ['memcached01:11211','memcached02:11211'],
+          :region_name                          => 'region2',
+          :revocation_cache_time                => '11',
+          :signing_dir                          => '/var/cache',
+          :token_cache_time                     => '301',
+        })
+      end
+
+      it 'configure keystone_authtoken' do
+        is_expected.to contain_ceilometer_config('keystone_authtoken/auth_uri').with_value('https://10.0.0.1:9999/')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/username').with_value(params[:username])
+        is_expected.to contain_ceilometer_config('keystone_authtoken/password').with_value(params[:password]).with_secret(true)
+        is_expected.to contain_ceilometer_config('keystone_authtoken/auth_url').with_value(params[:auth_url])
+        is_expected.to contain_ceilometer_config('keystone_authtoken/project_name').with_value(params[:project_name])
+        is_expected.to contain_ceilometer_config('keystone_authtoken/user_domain_name').with_value(params[:user_domain_name])
+        is_expected.to contain_ceilometer_config('keystone_authtoken/project_domain_name').with_value(params[:project_domain_name])
+        is_expected.to contain_ceilometer_config('keystone_authtoken/insecure').with_value(params[:insecure])
+        is_expected.to contain_ceilometer_config('keystone_authtoken/auth_section').with_value(params[:auth_section])
+        is_expected.to contain_ceilometer_config('keystone_authtoken/auth_type').with_value(params[:auth_type])
+        is_expected.to contain_ceilometer_config('keystone_authtoken/auth_version').with_value(params[:auth_version])
+        is_expected.to contain_ceilometer_config('keystone_authtoken/cache').with_value(params[:cache])
+        is_expected.to contain_ceilometer_config('keystone_authtoken/cafile').with_value(params[:cafile])
+        is_expected.to contain_ceilometer_config('keystone_authtoken/certfile').with_value(params[:certfile])
+        is_expected.to contain_ceilometer_config('keystone_authtoken/check_revocations_for_cached').with_value(params[:check_revocations_for_cached])
+        is_expected.to contain_ceilometer_config('keystone_authtoken/delay_auth_decision').with_value(params[:delay_auth_decision])
+        is_expected.to contain_ceilometer_config('keystone_authtoken/enforce_token_bind').with_value(params[:enforce_token_bind])
+        is_expected.to contain_ceilometer_config('keystone_authtoken/hash_algorithms').with_value(params[:hash_algorithms])
+        is_expected.to contain_ceilometer_config('keystone_authtoken/http_connect_timeout').with_value(params[:http_connect_timeout])
+        is_expected.to contain_ceilometer_config('keystone_authtoken/http_request_max_retries').with_value(params[:http_request_max_retries])
+        is_expected.to contain_ceilometer_config('keystone_authtoken/include_service_catalog').with_value(params[:include_service_catalog])
+        is_expected.to contain_ceilometer_config('keystone_authtoken/keyfile').with_value(params[:keyfile])
+        is_expected.to contain_ceilometer_config('keystone_authtoken/memcache_pool_conn_get_timeout').with_value(params[:memcache_pool_conn_get_timeout])
+        is_expected.to contain_ceilometer_config('keystone_authtoken/memcache_pool_dead_retry').with_value(params[:memcache_pool_dead_retry])
+        is_expected.to contain_ceilometer_config('keystone_authtoken/memcache_pool_maxsize').with_value(params[:memcache_pool_maxsize])
+        is_expected.to contain_ceilometer_config('keystone_authtoken/memcache_pool_socket_timeout').with_value(params[:memcache_pool_socket_timeout])
+        is_expected.to contain_ceilometer_config('keystone_authtoken/memcache_pool_unused_timeout').with_value(params[:memcache_pool_unused_timeout])
+        is_expected.to contain_ceilometer_config('keystone_authtoken/memcache_secret_key').with_value(params[:memcache_secret_key])
+        is_expected.to contain_ceilometer_config('keystone_authtoken/memcache_security_strategy').with_value(params[:memcache_security_strategy])
+        is_expected.to contain_ceilometer_config('keystone_authtoken/memcache_use_advanced_pool').with_value(params[:memcache_use_advanced_pool])
+        is_expected.to contain_ceilometer_config('keystone_authtoken/memcached_servers').with_value('memcached01:11211,memcached02:11211')
+        is_expected.to contain_ceilometer_config('keystone_authtoken/region_name').with_value(params[:region_name])
+        is_expected.to contain_ceilometer_config('keystone_authtoken/revocation_cache_time').with_value(params[:revocation_cache_time])
+        is_expected.to contain_ceilometer_config('keystone_authtoken/signing_dir').with_value(params[:signing_dir])
+        is_expected.to contain_ceilometer_config('keystone_authtoken/token_cache_time').with_value(params[:token_cache_time])
+      end
+    end
+  end
+
+  on_supported_os({
+    :supported_os => OSDefaults.get_supported_os
+  }).each do |os,facts|
+    context "on #{os}" do
+      let (:facts) do
+        facts.merge!(OSDefaults.get_facts())
+      end
+
+      it_configures 'ceilometer authtoken'
+    end
+  end
+
+end