From bf329c9115ea08c3f1cfc254fba058777fedd3c4 Mon Sep 17 00:00:00 2001 From: Javier Pena Date: Thu, 10 Sep 2015 15:51:52 +0200 Subject: [PATCH] Add support for swift-object-expirer service The swift-object-expirer service was not supported by puppet-swift. Adding support by creating a new class (swift::objectexpirer), and its associated custom type/provider. Change-Id: I498ffe525a7316c0091e4c9d8b7d9658234231f6 --- .../ini_setting.rb | 10 ++ .../type/swift_object_expirer_config.rb | 57 +++++++++ swift/manifests/objectexpirer.pp | 120 ++++++++++++++++++ swift/manifests/params.pp | 4 + swift/spec/acceptance/basic_swift_spec.rb | 3 + 5 files changed, 194 insertions(+) create mode 100644 swift/lib/puppet/provider/swift_object_expirer_config/ini_setting.rb create mode 100644 swift/lib/puppet/type/swift_object_expirer_config.rb create mode 100644 swift/manifests/objectexpirer.pp diff --git a/swift/lib/puppet/provider/swift_object_expirer_config/ini_setting.rb b/swift/lib/puppet/provider/swift_object_expirer_config/ini_setting.rb new file mode 100644 index 000000000..cfc5e1fb5 --- /dev/null +++ b/swift/lib/puppet/provider/swift_object_expirer_config/ini_setting.rb @@ -0,0 +1,10 @@ +Puppet::Type.type(:swift_object_expirer_config).provide( + :ini_setting, + :parent => Puppet::Type.type(:openstack_config).provider(:ini_setting) +) do + + def self.file_path + '/etc/swift/object-expirer.conf' + end + +end diff --git a/swift/lib/puppet/type/swift_object_expirer_config.rb b/swift/lib/puppet/type/swift_object_expirer_config.rb new file mode 100644 index 000000000..413373fb1 --- /dev/null +++ b/swift/lib/puppet/type/swift_object_expirer_config.rb @@ -0,0 +1,57 @@ +Puppet::Type.newtype(:swift_object_expirer_config) do + + ensurable + + newparam(:name, :namevar => true) do + desc 'Section/setting name to manage from /etc/swift/object-expirer.conf' + newvalues(/\S+\/\S+/) + end + + newproperty(:value) do + desc 'The value of the setting to be defined.' + munge do |value| + value = value.to_s.strip + value.capitalize! if value =~ /^(true|false)$/i + value + end + + def is_to_s( currentvalue ) + if resource.secret? + return '[old secret redacted]' + else + return currentvalue + end + end + + def should_to_s( newvalue ) + if resource.secret? + return '[new secret redacted]' + else + return newvalue + end + end + end + + newparam(:secret, :boolean => true) do + desc 'Whether to hide the value from Puppet logs. Defaults to `false`.' + newvalues(:true, :false) + defaultto false + end + + newparam(:ensure_absent_val) do + desc 'A value that is specified as the value property will behave as if ensure => absent was specified' + defaultto('') + end + + # Require the package providing object-expirer to be present + if Facter['osfamily'].value == 'Debian' + autorequire(:package) do + 'swift-object-expirer' + end + elsif Facter['osfamily'].value == 'RedHat' + autorequire(:package) do + 'openstack-swift-proxy' + end + end + +end diff --git a/swift/manifests/objectexpirer.pp b/swift/manifests/objectexpirer.pp new file mode 100644 index 000000000..0e2bde7fb --- /dev/null +++ b/swift/manifests/objectexpirer.pp @@ -0,0 +1,120 @@ +# Class swift::objectexpirer +# +# == Parameters +# [*enabled*] +# (optional) Should the service be enabled. +# Defaults to true +# +# [*manage_service*] +# (optional) Whether the service should be managed by Puppet. +# Defaults to true. +# +# [*package_ensure*] +# (optional) Value of package resource parameter 'ensure'. +# Defaults to 'present'. +# +# [*pipeline*] +# (optional) The list of elements of the object expirer pipeline. +# Defaults to ['catch_errors', 'cache', 'proxy-server'] +# +# [*auto_create_account_prefix*] +# (optional) Prefix to use when automatically creating accounts. +# Defaults to '.'. +# +# [*concurrency*] +# (optional) Number of replication workers to spawn. +# Defaults to 1. +# +# [*expiring_objects_account_name*] +# (optional) Account name used for expiring objects. +# Defaults to 'expiring_objects'. +# +# [*interval*] +# (optional) Minimum time for a pass to take. +# Defaults to 300. +# +# [*process*] +# (optional) Which part of the work defined by $processes +# will this instance take. +# Defaults to 0. +# +# [*processes*] +# (optional) How many parts to divide the work into, one part per +# process. 0 means a single process will do all work. +# Defaults to 0. +# +# [*reclaim_age*] +# (optional) Time elapsed in seconds before an object can be +# reclaimed. +# Defaults to 604800 (1 week). +# +# [*recon_cache_path*] +# (optional) Directory where stats for a few items will be stored. +# Defaults to '/var/cache/swift'. +# +# [*report_interval*] +# (optional) Report interval +# Defaults to 300. +# + +class swift::objectexpirer( + $manage_service = true, + $enabled = true, + $package_ensure = 'present', + $pipeline = ['catch_errors', 'cache', 'proxy-server'], + $auto_create_account_prefix = '.', + $concurrency = 1, + $expiring_objects_account_name = 'expiring_objects', + $interval = 300, + $process = 0, + $processes = 0, + $reclaim_age = 604800, + $recon_cache_path = '/var/cache/swift', + $report_interval = 300, +) { + + include ::swift::params + + Swift_config<| |> ~> Service['swift-object-expirer'] + Swift_object_expirer_config<||> ~> Service['swift-object-expirer'] + + # On Red Hat platforms, it may be defined already, + # because it is part of openstack-swift-proxy + if $::swift::params::object_expirer_package_name != $::swift::params::proxy_package_name { + package { 'swift-object-expirer': + ensure => $package_ensure, + name => $::swift::params::object_expirer_package_name, + tag => ['openstack', 'swift-package'], + } + } + + swift_object_expirer_config { + 'pipeline:main/pipeline': value => join($pipeline, ' '); + 'object-expirer/auto_create_account_prefix': value => $auto_create_account_prefix; + 'object-expirer/concurrency': value => $concurrency; + 'object-expirer/expiring_objects_account_name': value => $expiring_objects_account_name; + 'object-expirer/interval': value => $interval; + 'object-expirer/process': value => $process; + 'object-expirer/processes': value => $processes; + 'object-expirer/reclaim_age': value => $reclaim_age; + 'object-expirer/recon_cache_path': value => $recon_cache_path; + 'object-expirer/report_interval': value => $report_interval; + } + + if $manage_service { + if $enabled { + $service_ensure = 'running' + } else { + $service_ensure = 'stopped' + } + } + + service { 'swift-object-expirer': + ensure => $service_ensure, + name => $::swift::params::object_expirer_service_name, + enable => $enabled, + provider => $::swift::params::service_provider, + tag => 'swift-service', + } +} + diff --git a/swift/manifests/params.pp b/swift/manifests/params.pp index feaa197da..a4aa65d89 100644 --- a/swift/manifests/params.pp +++ b/swift/manifests/params.pp @@ -12,6 +12,8 @@ $object_auditor_service_name = 'swift-object-auditor' $object_replicator_service_name = 'swift-object-replicator' $object_updater_service_name = 'swift-object-updater' + $object_expirer_package_name = 'swift-object-expirer' + $object_expirer_service_name = 'swift-object-expirer' $container_package_name = 'swift-container' $container_service_name = 'swift-container' $container_auditor_service_name = 'swift-container-auditor' @@ -39,6 +41,8 @@ $object_auditor_service_name = 'openstack-swift-object-auditor' $object_replicator_service_name = 'openstack-swift-object-replicator' $object_updater_service_name = 'openstack-swift-object-updater' + $object_expirer_package_name = 'openstack-swift-proxy' + $object_expirer_service_name = 'openstack-swift-object-expirer' $container_package_name = 'openstack-swift-container' $container_service_name = 'openstack-swift-container' $container_auditor_service_name = 'openstack-swift-container-auditor' diff --git a/swift/spec/acceptance/basic_swift_spec.rb b/swift/spec/acceptance/basic_swift_spec.rb index 52abfe419..150ad7fde 100644 --- a/swift/spec/acceptance/basic_swift_spec.rb +++ b/swift/spec/acceptance/basic_swift_spec.rb @@ -116,6 +116,9 @@ class { '::swift::proxy': class { '::swift::proxy::authtoken': admin_password => 'a_big_secret', } + class {'::swift::objectexpirer': + interval => 600, + } class { [ '::swift::proxy::healthcheck', '::swift::proxy::cache', '::swift::proxy::tempauth', '::swift::proxy::dlo' ]: