From 453b1a97311dfa9b3fc186e13af037e2ce27b117 Mon Sep 17 00:00:00 2001 From: Takashi Kajinami Date: Fri, 8 Jul 2022 10:40:03 +0900 Subject: [PATCH] Use ini provider to manage storage config files With this change now config files for storage services(account, container and object) are managed by ini provider instead of concat resources. This allows us to use the default file provided by packages instead of replacing the whole file content by our templates, and use the $::os_service_default value instead of hard-coding own defaults. Related-Bug: #1921319 Change-Id: I375634214e88acc5075f64090287f934ce8451d1 --- manifests/config.pp | 21 + manifests/deps.pp | 5 - manifests/storage/account.pp | 3 - manifests/storage/container.pp | 11 +- manifests/storage/filter/healthcheck.pp | 10 +- manifests/storage/filter/recon.pp | 18 +- manifests/storage/generic.pp | 16 +- manifests/storage/object.pp | 4 - manifests/storage/server.pp | 284 +++++++++--- .../storage-config-43804c0fae439026.yaml | 8 + spec/classes/swift_config_spec.rb | 33 ++ spec/classes/swift_storage_all_spec.rb | 49 -- .../swift_storage_filter_healthcheck_spec.rb | 10 +- .../swift_storage_filter_recon_spec.rb | 22 +- spec/defines/swift_storage_server_spec.rb | 435 +++++++++++------- templates/account-server.conf.erb | 45 -- templates/container-server.conf.erb | 53 --- templates/healthcheck.conf.erb | 3 - templates/object-server.conf.erb | 57 --- templates/recon.conf.erb | 4 - 20 files changed, 580 insertions(+), 511 deletions(-) create mode 100644 releasenotes/notes/storage-config-43804c0fae439026.yaml delete mode 100644 templates/account-server.conf.erb delete mode 100644 templates/container-server.conf.erb delete mode 100644 templates/healthcheck.conf.erb delete mode 100644 templates/object-server.conf.erb delete mode 100644 templates/recon.conf.erb diff --git a/manifests/config.pp b/manifests/config.pp index 64768218..9741c99c 100644 --- a/manifests/config.pp +++ b/manifests/config.pp @@ -28,6 +28,18 @@ # (optional) Allow configuration of arbitrary Swift Proxy configurations. # The value is an hash of swift_proxy_config resources. # +# [*swift_account_config*] +# (optional) Allow configuration of arbitrary Swift Account configurations. +# The value is an hash of swift_account_config resources. +# +# [*swift_container_config*] +# (optional) Allow configuration of arbitrary Swift Container configurations. +# The value is an hash of swift_container_config resources. +# +# [*swift_object_config*] +# (optional) Allow configuration of arbitrary Swift Object configurations. +# The value is an hash of swift_object_config resources. +# # [*swift_internal_client_config*] # (optional) Allow configuration of arbitrary Swift internal client # configurations. @@ -37,6 +49,9 @@ class swift::config ( $swift_config = {}, $swift_container_sync_realms_config = {}, $swift_proxy_config = {}, + $swift_account_config = {}, + $swift_container_config = {}, + $swift_object_config = {}, $swift_internal_client_config = {}, ) { @@ -45,10 +60,16 @@ class swift::config ( validate_legacy(Hash, 'validate_hash', $swift_config) validate_legacy(Hash, 'validate_hash', $swift_container_sync_realms_config) validate_legacy(Hash, 'validate_hash', $swift_proxy_config) + validate_legacy(Hash, 'validate_hash', $swift_account_config) + validate_legacy(Hash, 'validate_hash', $swift_container_config) + validate_legacy(Hash, 'validate_hash', $swift_object_config) validate_legacy(Hash, 'validate_hash', $swift_internal_client_config) create_resources('swift_config', $swift_config) create_resources('swift_container_sync_realms_config', $swift_container_sync_realms_config) create_resources('swift_proxy_config', $swift_proxy_config) + create_resources('swift_account_config', $swift_proxy_config) + create_resources('swift_container_config', $swift_container_config) + create_resources('swift_object_config', $swift_object_config) create_resources('swift_internal_client_config', $swift_internal_client_config) } diff --git a/manifests/deps.pp b/manifests/deps.pp index 5ee7eb7c..62a79ede 100644 --- a/manifests/deps.pp +++ b/manifests/deps.pp @@ -45,11 +45,6 @@ class swift::deps { -> Swift_internal_client_config<||> ~> Anchor['swift::config::end'] - Anchor['swift::config::begin'] - -> File<| tag == 'swift-file' |> - -> Concat<| tag == 'swift-concat' |> - ~> Anchor['swift::config::end'] - # On any uwsgi config change, we must restart Swift. Anchor['swift::config::begin'] -> Swift_proxy_uwsgi_config<||> diff --git a/manifests/storage/account.pp b/manifests/storage/account.pp index e2f71ac2..b699abb0 100644 --- a/manifests/storage/account.pp +++ b/manifests/storage/account.pp @@ -35,7 +35,6 @@ class swift::storage::account( ) inherits swift::params { include swift::deps - Swift_config<| |> ~> Service['swift-account-reaper'] swift::storage::generic { 'account': manage_service => $manage_service, @@ -59,7 +58,5 @@ class swift::storage::account( enabled => $enabled, config_file_name => $config_file_name, service_provider => $service_provider, - service_require => Package['swift-account'], - service_subscribe => Concat["/etc/swift/${config_file_name}"], } } diff --git a/manifests/storage/container.pp b/manifests/storage/container.pp index 2ddcad25..4d328a78 100644 --- a/manifests/storage/container.pp +++ b/manifests/storage/container.pp @@ -37,14 +37,11 @@ class swift::storage::container( $package_ensure = 'present', $allowed_sync_hosts = ['127.0.0.1'], $config_file_name = 'container-server.conf', - $service_provider = $::swift::params::service_provider + $service_provider = $::swift::params::service_provider ) inherits swift::params { include swift::deps - Swift_config<| |> ~> Service['swift-container-updater'] - Swift_config<| |> ~> Service['swift-container-sync'] - swift::storage::generic { 'container': manage_service => $manage_service, enabled => $enabled, @@ -67,8 +64,6 @@ class swift::storage::container( enabled => $enabled, config_file_name => $config_file_name, service_provider => $service_provider, - service_require => Package['swift-container'], - service_subscribe => Concat["/etc/swift/${config_file_name}"], } swift::service { 'swift-container-sync': @@ -77,8 +72,6 @@ class swift::storage::container( enabled => $enabled, config_file_name => $config_file_name, service_provider => $service_provider, - service_require => Package['swift-container'], - service_subscribe => Concat["/etc/swift/${config_file_name}"], } swift::service { 'swift-container-sharder': @@ -87,7 +80,5 @@ class swift::storage::container( enabled => $enabled, config_file_name => $config_file_name, service_provider => $service_provider, - service_require => Package['swift-container'], - service_subscribe => Concat["/etc/swift/${config_file_name}"], } } diff --git a/manifests/storage/filter/healthcheck.pp b/manifests/storage/filter/healthcheck.pp index 745a4696..161f533f 100644 --- a/manifests/storage/filter/healthcheck.pp +++ b/manifests/storage/filter/healthcheck.pp @@ -8,9 +8,9 @@ define swift::storage::filter::healthcheck( include swift::deps - concat::fragment { "swift_healthcheck_${name}": - target => "/etc/swift/${name}-server.conf", - content => template('swift/healthcheck.conf.erb'), - order => '25', - } + $config_type = "swift_${name}_config" + + create_resources($config_type, { + 'filter:healthcheck/use' => {'value' => 'egg:swift#healthcheck'}, + }) } diff --git a/manifests/storage/filter/recon.pp b/manifests/storage/filter/recon.pp index 17dba94f..8a92d5e4 100644 --- a/manifests/storage/filter/recon.pp +++ b/manifests/storage/filter/recon.pp @@ -2,8 +2,9 @@ # Configure swift recon. # # == Parameters -# [*cache_path*] The path for recon cache -# Optional. Defaults to '/var/cache/swift/' +# [*cache_path*] +# (Optional) The path for recon cache +# Defaults to $::os_service_default # # == Dependencies # @@ -19,15 +20,16 @@ # Copyright 2011 Puppetlabs Inc, unless otherwise noted. # define swift::storage::filter::recon( - $cache_path = '/var/cache/swift' + $cache_path = $::os_service_default, ) { include swift::deps - concat::fragment { "swift_recon_${name}": - target => "/etc/swift/${name}-server.conf", - content => template('swift/recon.conf.erb'), - order => '35', - } + $config_type = "swift_${name}_config" + + create_resources($config_type, { + 'filter:recon/use' => {'value' => 'egg:swift#recon'}, + 'filter:recon/recon_cache_path' => {'value' => $cache_path}, + }) } diff --git a/manifests/storage/generic.pp b/manifests/storage/generic.pp index 99d33120..73f547af 100644 --- a/manifests/storage/generic.pp +++ b/manifests/storage/generic.pp @@ -42,9 +42,6 @@ define swift::storage::generic( include swift::params Class['swift::storage'] -> Swift::Storage::Generic[$name] - Swift_config<| |> ~> Service["swift-${name}-server"] - Swift_config<| |> ~> Service["swift-${name}-auditor"] - Swift_config<| |> ~> Service["swift-${name}-replicator"] validate_legacy(Enum['object', 'container', 'account'], 'validate_re', $name, ['^object|container|account$']) @@ -53,14 +50,14 @@ define swift::storage::generic( ensure => $package_ensure, name => getvar("::swift::params::${name}_package_name"), tag => ['openstack', 'swift-package'], - before => Service["swift-${name}-server", "swift-${name}-replicator"], } file { "/etc/swift/${name}-server/": - ensure => directory, - owner => $::swift::params::user, - group => $::swift::params::group, - tag => 'swift-file', + ensure => directory, + owner => $::swift::params::user, + group => $::swift::params::group, + require => Anchor['swift::config::begin'], + before => Anchor['swift::config::end'], } if $manage_service { @@ -77,7 +74,6 @@ define swift::storage::generic( enabled => $enabled, config_file_name => $config_file_name, service_provider => $service_provider, - service_subscribe => Package["swift-${name}"], } swift::service { "swift-${name}-replicator": @@ -86,7 +82,6 @@ define swift::storage::generic( enabled => $enabled, config_file_name => $config_file_name, service_provider => $service_provider, - service_subscribe => Package["swift-${name}"], } swift::service { "swift-${name}-auditor": @@ -95,6 +90,5 @@ define swift::storage::generic( enabled => $enabled, config_file_name => $config_file_name, service_provider => $service_provider, - service_subscribe => Package["swift-${name}"], } } diff --git a/manifests/storage/object.pp b/manifests/storage/object.pp index daca0d81..6e40246d 100644 --- a/manifests/storage/object.pp +++ b/manifests/storage/object.pp @@ -58,8 +58,6 @@ class swift::storage::object( enabled => $enabled, config_file_name => $config_file_name, service_provider => $service_provider, - require => Anchor['swift::install::end'], - service_subscribe => Concat["/etc/swift/${config_file_name}"], } swift::service { 'swift-object-reconstructor': @@ -68,8 +66,6 @@ class swift::storage::object( enabled => $enabled, config_file_name => $config_file_name, service_provider => $service_provider, - require => Anchor['swift::install::end'], - service_subscribe => Concat["/etc/swift/${config_file_name}"], } } diff --git a/manifests/storage/server.pp b/manifests/storage/server.pp index 5cc863fb..3a39eba5 100644 --- a/manifests/storage/server.pp +++ b/manifests/storage/server.pp @@ -53,7 +53,7 @@ # "local" ring devices across all storage policies. This can help provide # the isolation of threads_per_disk without the severe overhead. The default # value of 0 disables this feature. -# Defaults to 0. +# Default to $::os_service_default. # # [*user*] # (optional) User to run as @@ -74,7 +74,7 @@ # # [*replicator_interval*] # (optional) Minimum time for a pass to take, in seconds. -# Defaults to 30. +# Default to $::os_service_default. # # [*updater_concurrency*] # (optional) Number of updater workers to spawn. @@ -112,14 +112,14 @@ # good for seeing errors if true # Defaults to true. # -# [*config_file_path*] -# (optional) The configuration file name. -# Starting at the path "/etc/swift/" -# Defaults to "${type}-server.conf" +# [*config_file_path*] +# (optional) The configuration file name. +# Starting at the path "/etc/swift/" +# Defaults to "${type}-server.conf" # # [*statsd_enabled*] -# (optional) Should statsd configuration items be writen out to config files -# Defaults to false. +# (optional) Should statsd configuration items be writen out to config files +# Defaults to false. # # [*log_statsd_host*] # (optional) statsd host to send data to. @@ -127,69 +127,69 @@ # # [*log_statsd_port*] # (optional) statsd port to send data to. -# Defaults to 8125 +# Defaults to $::os_service_default. # # [*log_statsd_default_sample_rate*] # (optional) Default sample rate for data. This should be a number between 0 # and 1. According to the documentation this should be set to 1 and the # sample rate factor should be adjusted. -# Defaults to '1.0' +# Defaults to $::os_service_default. # # [*log_statsd_sample_rate_factor*] # (optional) sample rate factor for data. -# Defaults to '1.0' +# Defaults to $::os_service_default. # # [*log_statsd_metric_prefix*] # (optional) Prefix for data being sent to statsd. -# Defaults to '' +# Defaults to $::os_service_default # # [*network_chunk_size*] # (optional) Size of chunks to read/write over the network. -# Defaults to 65536. +# Default to $::os_service_default. # # [*disk_chunk_size*] # (optional) Size of chunks to read/write to disk. -# Defaults to 65536. +# Default to $::os_service_default. # # [*auditor_disk_chunk_size*] # (optional) Object-auditor size of chunks to read/write to disk. -# Defaults to undef. +# Default to $::os_service_default. # # [*client_timeout*] # (optional) Object-server timeout in seconds to read one chunk from a client # external services. -# Defaults to 60. +# Default to $::os_service_default. # # [*rsync_timeout*] # (optional) Max duration of a partition rsync. -# Default to 900. +# Default to $::os_service_default. # # [*rsync_bwlimit*] # (optional) Bandwidth limit for rsync in kB/s. 0 means unlimited. -# Default to 0. +# Default to $::os_service_default. # # [*splice*] # (optional) Use splice for zero-copy object GETs. This requires Linux Kernel # version 3.0 or greater. -# Defaults to false. +# Default to $::os_service_default. # # [*object_server_mb_per_sync*] # (optional) Number of MB allocated for the cache. -# Defaults to 512, which is the swift default value. +# Default to $::os_service_default. # # [*container_sharder_auto_shard*] # (optional) If the auto_shard option is true then the sharder will # automatically select containers to shard, scan for shard ranges, # and select shards to shrink. -# Default to false. +# Default to $::os_service_default. # # [*container_sharder_concurrency*] # (optional) Number of replication workers to spawn. -# Default to 8. +# Default to $::os_service_default. # # [*container_sharder_interval*] # (optional) Time in seconds to wait between sharder cycles. -# Default to 30. +# Default to $::os_service_default. # define swift::storage::server( $type, @@ -202,11 +202,11 @@ define swift::storage::server( $max_connections = 25, $pipeline = ["${type}-server"], $mount_check = true, - $servers_per_port = 0, + $servers_per_port = $::os_service_default, $user = undef, $workers = $::os_workers, $replicator_concurrency = 1, - $replicator_interval = 30, + $replicator_interval = $::os_service_default, $updater_concurrency = 1, $reaper_concurrency = 1, $log_facility = 'LOG_LOCAL2', @@ -220,23 +220,23 @@ define swift::storage::server( $config_file_path = "${type}-server.conf", $statsd_enabled = false, $log_statsd_host = 'localhost', - $log_statsd_port = 8125, - $log_statsd_default_sample_rate = '1.0', - $log_statsd_sample_rate_factor = '1.0', - $log_statsd_metric_prefix = '', - $network_chunk_size = 65536, - $disk_chunk_size = 65536, - $client_timeout = 60, - $auditor_disk_chunk_size = undef, - $rsync_timeout = 900, - $rsync_bwlimit = 0, - $splice = false, - $object_server_mb_per_sync = 512, + $log_statsd_port = $::os_service_default, + $log_statsd_default_sample_rate = $::os_service_default, + $log_statsd_sample_rate_factor = $::os_service_default, + $log_statsd_metric_prefix = $::os_service_default, + $network_chunk_size = $::os_service_default, + $disk_chunk_size = $::os_service_default, + $client_timeout = $::os_service_default, + $auditor_disk_chunk_size = $::os_service_default, + $rsync_timeout = $::os_service_default, + $rsync_bwlimit = $::os_service_default, + $splice = $::os_service_default, + $object_server_mb_per_sync = $::os_service_default, # These parameters only apply to container-server.conf, # and define options for the container-sharder service. - $container_sharder_auto_shard = false, - $container_sharder_concurrency = 8, - $container_sharder_interval = 30, + $container_sharder_auto_shard = $::os_service_default, + $container_sharder_concurrency = $::os_service_default, + $container_sharder_interval = $::os_service_default, ){ include swift::deps @@ -260,11 +260,15 @@ define swift::storage::server( validate_legacy(Enum['object', 'container', 'account'], 'validate_re', $type, ['^object|container|account$']) validate_legacy(Array, 'validate_array', $pipeline) - validate_legacy(Boolean, 'validate_bool', $splice) - # TODO - validate that name is an integer + + if ! is_service_default($splice) { + validate_legacy(Boolean, 'validate_bool', $splice) + } $bind_port = $name + # rsync::server should be included before rsync::server::module + include swift::storage rsync::server::module { $type: path => $devices, lock_file => "/var/lock/${type}.lock", @@ -276,13 +280,8 @@ define swift::storage::server( read_only => false, } - concat { "/etc/swift/${config_file_path}": - owner => pick($owner, $::swift::params::user), - group => pick($group, $::swift::params::group), - notify => Anchor['swift::config::end'], - require => Anchor['swift::install::end'], - tag => 'swift-concat', - } + $config_file_full_path = "/etc/swift/${config_file_path}" + $required_middlewares = split( inline_template( @@ -292,24 +291,183 @@ define swift::storage::server( end.join(',') %>"), ',') - # you can now add your custom fragments at the user level - concat::fragment { "swift-${type}-${name}": - target => "/etc/swift/${config_file_path}", - content => template("swift/${type}-server.conf.erb"), - order => '00', - # require classes for each of the elements of the pipeline - # this is to ensure the user gets reasonable elements if he - # does not specify the backends for every specified element of - # the pipeline + file { $config_file_full_path: + ensure => present, + owner => pick($owner, $::swift::params::user), + group => pick($group, $::swift::params::group), + replace => false, + tag => 'swift-config-file', before => $required_middlewares, - require => Anchor['swift::install::end'], + } + + # common settings + $common_opts = { + 'DEFAULT/devices' => {'value' => $devices}, + 'DEFAULT/bind_ip' => {'value' => $storage_local_net_ip}, + 'DEFAULT/bind_port' => {'value' => $bind_port}, + 'DEFAULT/mount_check' => {'value' => $mount_check}, + 'DEFAULT/user' => {'value' => $user_real}, + 'DEFAULT/workers' => {'value' => $workers}, + 'DEFAULT/log_name' => {'value' => $log_name}, + 'DEFAULT/log_facility' => {'value' => $log_facility}, + 'DEFAULT/log_level' => {'value' => $log_level}, + 'DEFAULT/log_address' => {'value' => $log_address}, + # pipeline + 'pipeline:main/pipeline' => {'value' => join($pipeline, ' ')}, + # server + "app:${type}-server/use" => {'value' => "egg:swift#${type}"}, + "app:${type}-server/set log_name" => {'value' => $log_name}, + "app:${type}-server/set log_facility" => {'value' => $log_facility}, + "app:${type}-server/set log_level" => {'value' => $log_level}, + "app:${type}-server/set log_requests" => {'value' => $log_requests}, + "app:${type}-server/set log_address" => {'value' => $log_address}, + # auditor + # replicator + } + + file_line { "${type}-auditor": + path => $config_file_full_path, + line => "[${type}-auditor]", + tag => 'swift-config-file', + } + + file_line { "${type}-replicator": + path => $config_file_full_path, + line => "[${type}-replicator]", + tag => 'swift-config-file', + } + + Anchor['swift::config::begin'] + -> File[$config_file_full_path] + -> File_line<| path == $config_file_full_path |> + ~> Anchor['swift::config::end'] + + # udp log transfer + if $log_udp_host { + $log_udp_opts = { + 'DEFAULT/log_udp_host' => {'value' => $log_udp_host}, + 'DEFAULT/log_udp_port' => {'value' => pick($log_udp_port, $::os_service_default)}, + } + } else { + $log_udp_opts = { + 'DEFAULT/log_udp_host' => {'value' => $::os_service_default}, + 'DEFAULT/log_udp_port' => {'value' => $::os_service_default}, + } + } + + # statsd + if $statsd_enabled { + $log_statsd_opts = { + 'DEFAULT/log_statsd_host' => {'value' => $log_statsd_host}, + 'DEFAULT/log_statsd_port' => {'value' => $log_statsd_port}, + 'DEFAULT/log_statsd_default_sample_rate' => {'value' => $log_statsd_default_sample_rate}, + 'DEFAULT/log_statsd_sample_rate_factor' => {'value' => $log_statsd_sample_rate_factor}, + 'DEFAULT/log_statsd_metric_prefix' => {'value' => $log_statsd_metric_prefix}, + } + } else { + $log_statsd_opts = { + 'DEFAULT/log_statsd_host' => {'value' => $::os_service_default}, + 'DEFAULT/log_statsd_port' => {'value' => $::os_service_default}, + 'DEFAULT/log_statsd_default_sample_rate' => {'value' => $::os_service_default}, + 'DEFAULT/log_statsd_sample_rate_factor' => {'value' => $::os_service_default}, + 'DEFAULT/log_statsd_metric_prefix' => {'value' => $::os_service_default}, + } } case $type { - 'object': { Concat["/etc/swift/${config_file_path}"] -> Swift_object_config <||> } - 'container': { Concat["/etc/swift/${config_file_path}"] -> Swift_container_config <||> } - 'account': { Concat["/etc/swift/${config_file_path}"] -> Swift_account_config <||> } - default : { warning("swift storage server ${type} must specify ${type}-server") } + 'account': { + $type_opts = { + # account-server + # account-auditor + # account-replicator + 'account-replicator/concurrency' => {'value' => $replicator_concurrency}, + 'account-replicator/interval' => {'value' => $replicator_interval}, + # account-reaper + 'account-reaper/concurrency' => {'value' => $reaper_concurrency}, + } + file_line { 'account-reaper': + path => $config_file_full_path, + line => '[account-reaper]', + tag => 'swift-config-file', + } + } + 'container': { + $type_opts = { + 'DEFAULT/allowed_sync_hosts' => {'value' => join($::swift::storage::container::allowed_sync_hosts, ',')}, + # container-server + # container-auditor + # container-replicator + 'container-replicator/concurrency' => {'value' => $replicator_concurrency}, + 'container-replicator/interval' => {'value' => $replicator_interval}, + # container-updater + 'container-updater/concurrency' => {'value' => $updater_concurrency}, + # container-sync + # container-sharder + 'container-sharder/auto_shard' => {'value' => $container_sharder_auto_shard}, + 'container-sharder/concurrency' => {'value' => $container_sharder_concurrency}, + 'container-sharder/interval' => {'value' => $container_sharder_interval}, + } + + file_line { 'container-updater': + path => $config_file_full_path, + line => '[container-updater]', + tag => 'swift-config-file', + } + file_line { 'container-sync': + path => $config_file_full_path, + line => '[container-sync]', + tag => 'swift-config-file', + } + file_line { 'container-sharder': + path => $config_file_full_path, + line => '[container-sharder]', + tag => 'swift-config-file', + } + } + 'object': { + $type_opts = { + 'DEFAULT/servers_per_port' => {'value' => $servers_per_port}, + 'DEFAULT/network_chunk_size' => {'value' => $network_chunk_size}, + 'DEFAULT/disk_chunk_size' => {'value' => $disk_chunk_size}, + 'DEFAULT/client_timeout' => {'value' => $client_timeout}, + # object-server + 'app:object-server/splice' => {'value' => $splice}, + 'app:object-server/mb_per_sync' => {'value' => $object_server_mb_per_sync}, + # object-auditor + 'object-auditor/disk_chunk_size' => {'value' => pick($auditor_disk_chunk_size, $::os_service_default)}, + # object-replicator + 'object-replicator/concurrency' => {'value' => $replicator_concurrency}, + 'object-replicator/rsync_timeout' => {'value' => $rsync_timeout}, + 'object-replicator/rsync_bwlimit' => {'value' => $rsync_bwlimit}, + # object-updater + 'object-updater/concurrency' => {'value' => $updater_concurrency}, + # object-reconstructor + } + + file_line { 'object-updater': + path => $config_file_full_path, + line => '[object-updater]', + tag => 'swift-config-file', + } + file_line { 'object-reconstructor': + path => $config_file_full_path, + line => '[object-reconstructor]', + tag => 'swift-config-file', + } + } + default: { + # nothing to do + } } + + create_resources("swift_${type}_config", merge( + $common_opts, + $log_udp_opts, + $log_statsd_opts, + $type_opts, + ), { + #'path' => $config_file_full_path, + 'require' => File[$config_file_full_path] + }) } diff --git a/releasenotes/notes/storage-config-43804c0fae439026.yaml b/releasenotes/notes/storage-config-43804c0fae439026.yaml new file mode 100644 index 00000000..be654efe --- /dev/null +++ b/releasenotes/notes/storage-config-43804c0fae439026.yaml @@ -0,0 +1,8 @@ +--- +features: + - | + The ``swift::config`` class now supports the following three parameters. + + - ``swift_account_config`` + - ``swift_container_config`` + - ``swift_object_config`` diff --git a/spec/classes/swift_config_spec.rb b/spec/classes/swift_config_spec.rb index 41c17e4c..1236da8f 100644 --- a/spec/classes/swift_config_spec.rb +++ b/spec/classes/swift_config_spec.rb @@ -12,6 +12,21 @@ describe 'swift::config' do 'DEFAULT/bar' => { 'value' => 'barValue' }, 'DEFAULT/baz' => { 'ensure' => 'absent' } }, + :swift_account_config => { + 'DEFAULT/foo' => { 'value' => 'fooValue' }, + 'DEFAULT/bar' => { 'value' => 'barValue' }, + 'DEFAULT/baz' => { 'ensure' => 'absent' } + }, + :swift_container_config => { + 'DEFAULT/foo' => { 'value' => 'fooValue' }, + 'DEFAULT/bar' => { 'value' => 'barValue' }, + 'DEFAULT/baz' => { 'ensure' => 'absent' } + }, + :swift_object_config => { + 'DEFAULT/foo' => { 'value' => 'fooValue' }, + 'DEFAULT/bar' => { 'value' => 'barValue' }, + 'DEFAULT/baz' => { 'ensure' => 'absent' } + }, :swift_internal_client_config => { 'DEFAULT/foo' => { 'value' => 'fooValue' }, 'DEFAULT/bar' => { 'value' => 'barValue' }, @@ -33,6 +48,24 @@ describe 'swift::config' do is_expected.to contain_swift_proxy_config('DEFAULT/baz').with_ensure('absent') end + it 'configures arbitrary swift account configurations' do + is_expected.to contain_swift_account_config('DEFAULT/foo').with_value('fooValue') + is_expected.to contain_swift_account_config('DEFAULT/bar').with_value('barValue') + is_expected.to contain_swift_account_config('DEFAULT/baz').with_ensure('absent') + end + + it 'configures arbitrary swift container configurations' do + is_expected.to contain_swift_container_config('DEFAULT/foo').with_value('fooValue') + is_expected.to contain_swift_container_config('DEFAULT/bar').with_value('barValue') + is_expected.to contain_swift_container_config('DEFAULT/baz').with_ensure('absent') + end + + it 'configures arbitrary swift object configurations' do + is_expected.to contain_swift_object_config('DEFAULT/foo').with_value('fooValue') + is_expected.to contain_swift_object_config('DEFAULT/bar').with_value('barValue') + is_expected.to contain_swift_object_config('DEFAULT/baz').with_ensure('absent') + end + it 'configures arbitrary swift internal client configurations' do is_expected.to contain_swift_internal_client_config('DEFAULT/foo').with_value('fooValue') is_expected.to contain_swift_internal_client_config('DEFAULT/bar').with_value('barValue') diff --git a/spec/classes/swift_storage_all_spec.rb b/spec/classes/swift_storage_all_spec.rb index 9f4bb1ac..90264740 100644 --- a/spec/classes/swift_storage_all_spec.rb +++ b/spec/classes/swift_storage_all_spec.rb @@ -125,55 +125,6 @@ describe 'swift::storage::all' do )} end end - - describe "when specifying statsd enabled" do - let :params do - { - :storage_local_net_ip => '127.0.0.1', - :statsd_enabled => true, - :log_statsd_host => 'statsd.example.com', - :log_statsd_port => '9999', - :log_statsd_default_sample_rate => '2.0', - :log_statsd_sample_rate_factor => '1.5', - :log_statsd_metric_prefix => 'foo', - } - end - - {'object' => '6000', 'container' => '6001', 'account' => '6002'}.each do |type,name| - it "should configure statsd in the #{type} config file" do - is_expected.to contain_concat_fragment("swift-#{type}-#{name}").with_content( - /log_statsd_host = statsd.example.com/ - ).with_content( - /log_statsd_port = 9999/ - ).with_content( - /log_statsd_default_sample_rate = 2.0/ - ).with_content( - /log_statsd_sample_rate_factor = 1.5/ - ).with_content( - /log_statsd_metric_prefix = foo/ - ) - end - end - end - - describe "when specifying number of workers" do - let :params do - { - :storage_local_net_ip => '127.0.0.1', - :account_server_workers => '42', - :container_server_workers => '42', - :object_server_workers => '42', - } - end - - {'object' => '6000', 'container' => '6001', 'account' => '6002'}.each do |type,name| - it "should define worker count in the #{type} config file" do - is_expected.to contain_concat_fragment("swift-#{type}-#{name}").with_content( - /workers = 42/ - ) - end - end - end end shared_examples 'swift::storage::all debian' do diff --git a/spec/defines/swift_storage_filter_healthcheck_spec.rb b/spec/defines/swift_storage_filter_healthcheck_spec.rb index b2743b2d..793f3182 100644 --- a/spec/defines/swift_storage_filter_healthcheck_spec.rb +++ b/spec/defines/swift_storage_filter_healthcheck_spec.rb @@ -2,15 +2,13 @@ require 'spec_helper' describe 'swift::storage::filter::healthcheck' do let :title do - 'dummy' + 'account' end shared_examples 'swift::storage::filter::healthcheck' do - it 'should build the fragment with correct content' do - is_expected.to contain_concat_fragment('swift_healthcheck_dummy').with_content(' -[filter:healthcheck] -use = egg:swift#healthcheck -') + it 'should configure the healthcheck middleware' do + is_expected.to contain_swift_account_config('filter:healthcheck/use').\ + with_value('egg:swift#healthcheck') end end diff --git a/spec/defines/swift_storage_filter_recon_spec.rb b/spec/defines/swift_storage_filter_recon_spec.rb index 1aa3335f..fa9f1533 100644 --- a/spec/defines/swift_storage_filter_recon_spec.rb +++ b/spec/defines/swift_storage_filter_recon_spec.rb @@ -2,29 +2,31 @@ require 'spec_helper' describe 'swift::storage::filter::recon' do let :title do - 'dummy' + 'account' end shared_examples 'swift::storage::filter::recon' do describe 'when passing default parameters' do - it 'should build the fragment with correct content' do - is_expected.to contain_concat_fragment('swift_recon_dummy').with_content(' -[filter:recon] -use = egg:swift#recon -recon_cache_path = /var/cache/swift -') + it 'should configure the recon middleware' do + is_expected.to contain_swift_account_config('filter:recon/use').\ + with_value('egg:swift#recon') + is_expected.to contain_swift_account_config('filter:recon/recon_cache_path').\ + with_value('') end end describe 'when overriding default parameters' do let :params do { - :cache_path => '/some/other/path' + :cache_path => '/var/cache/swift' } end - it 'should build the fragment with correct content' do - is_expected.to contain_concat_fragment('swift_recon_dummy').with_content(/recon_cache_path = \/some\/other\/path/) + it 'should configure the recon middleware' do + is_expected.to contain_swift_account_config('filter:recon/use').\ + with_value('egg:swift#recon') + is_expected.to contain_swift_account_config('filter:recon/recon_cache_path').\ + with_value('/var/cache/swift') end end end diff --git a/spec/defines/swift_storage_server_spec.rb b/spec/defines/swift_storage_server_spec.rb index 56bd6929..27ad398c 100644 --- a/spec/defines/swift_storage_server_spec.rb +++ b/spec/defines/swift_storage_server_spec.rb @@ -4,12 +4,6 @@ describe 'swift::storage::server' do let :pre_condition do "class { 'swift': swift_hash_path_suffix => 'foo' } class { 'swift::storage': storage_local_net_ip => '10.0.0.1' } - swift::storage::filter::healthcheck { 'container': } - swift::storage::filter::recon { 'container': } - swift::storage::filter::healthcheck { 'object': } - swift::storage::filter::recon { 'object': } - swift::storage::filter::healthcheck { 'account': } - swift::storage::filter::recon { 'account': } " end @@ -28,8 +22,10 @@ describe 'swift::storage::server' do shared_examples 'swift::storage::server' do describe 'with an invalid title' do let :params do - {:storage_local_net_ip => '127.0.0.1', - :type => 'object'} + { + :storage_local_net_ip => '127.0.0.1', + :type => 'object' + } end let :title do @@ -39,183 +35,270 @@ describe 'swift::storage::server' do it { should raise_error(Puppet::Error) } end - ['account', 'object', 'container'].each do |t| - describe "for type #{t}" do - let :title do - '8000' + describe 'for type account' do + let :title do + '6002' + end + + let :req_params do + { + :storage_local_net_ip => '10.0.0.1', + :type => 'account' + } + end + + let :params do + req_params + end + + it { is_expected.to contain_package('swift-account').with_ensure('present') } + it { is_expected.to contain_service('swift-account-server').with( + :ensure => 'running', + :enable => true, + :hasstatus => true, + )} + + it { is_expected.to contain_rsync__server__module('account').with( + :path => '/srv/node', + :lock_file => '/var/lock/account.lock', + :uid => 'swift', + :gid => 'swift', + :incoming_chmod => 'Du=rwx,g=rx,o=rx,Fu=rw,g=r,o=r', + :outgoing_chmod => 'Du=rwx,g=rx,o=rx,Fu=rw,g=r,o=r', + :max_connections => 25, + :read_only => false, + )} + + it { + is_expected.to contain_swift_account_config('DEFAULT/devices').with_value('/srv/node') + is_expected.to contain_swift_account_config('DEFAULT/bind_ip').with_value('10.0.0.1') + is_expected.to contain_swift_account_config('DEFAULT/bind_port').with_value('6002') + is_expected.to contain_swift_account_config('DEFAULT/mount_check').with_value(true) + is_expected.to contain_swift_account_config('DEFAULT/user').with_value('swift') + is_expected.to contain_swift_account_config('DEFAULT/workers').with_value(4) + is_expected.to contain_swift_account_config('DEFAULT/log_name').with_value('account-server') + is_expected.to contain_swift_account_config('DEFAULT/log_facility').with_value('LOG_LOCAL2') + is_expected.to contain_swift_account_config('DEFAULT/log_level').with_value('INFO') + is_expected.to contain_swift_account_config('DEFAULT/log_address').with_value('/dev/log') + is_expected.to contain_swift_account_config('pipeline:main/pipeline').with_value('account-server') + is_expected.to contain_swift_account_config('app:account-server/use').with_value('egg:swift#account') + is_expected.to contain_swift_account_config('app:account-server/set log_name').with_value('account-server') + is_expected.to contain_swift_account_config('app:account-server/set log_facility').with_value('LOG_LOCAL2') + is_expected.to contain_swift_account_config('app:account-server/set log_level').with_value('INFO') + is_expected.to contain_swift_account_config('app:account-server/set log_requests').with_value(true) + is_expected.to contain_swift_account_config('app:account-server/set log_address').with_value('/dev/log') + + is_expected.to contain_swift_account_config('DEFAULT/log_statsd_host').with_value('') + is_expected.to contain_swift_account_config('DEFAULT/log_statsd_port').with_value('') + is_expected.to contain_swift_account_config('DEFAULT/log_statsd_default_sample_rate').with_value('') + is_expected.to contain_swift_account_config('DEFAULT/log_statsd_sample_rate_factor').with_value('') + is_expected.to contain_swift_account_config('DEFAULT/log_statsd_metric_prefix').with_value('') + + is_expected.to contain_swift_account_config('account-replicator/concurrency').with_value(1) + is_expected.to contain_swift_account_config('account-replicator/interval').with_value('') + is_expected.to contain_swift_account_config('account-reaper/concurrency').with_value(1) + } + + context 'with customized pipeline' do + let :pre_condition do + "class { 'swift': swift_hash_path_suffix => 'foo' } + class { 'swift::storage': storage_local_net_ip => '10.0.0.1' } + swift::storage::filter::healthcheck { 'account': } + swift::storage::filter::recon { 'account': } + " end - let :req_params do - {:storage_local_net_ip => '10.0.0.1', :type => t} + before do + params.merge!({ + :pipeline => ['healthcheck', 'recon', 'account-server'] + }) end - let :params do - req_params + it { + is_expected.to contain_swift_account_config('pipeline:main/pipeline').with_value('healthcheck recon account-server') + } + end + end + + describe 'for type container' do + let :title do + '6001' + end + + let :req_params do + { + :storage_local_net_ip => '10.0.0.1', + :type => 'container' + } + end + + let :params do + req_params + end + + it { is_expected.to contain_package('swift-container').with_ensure('present') } + it { is_expected.to contain_service('swift-container-server').with( + :ensure => 'running', + :enable => true, + :hasstatus => true, + )} + + it { is_expected.to contain_rsync__server__module('container').with( + :path => '/srv/node', + :lock_file => '/var/lock/container.lock', + :uid => 'swift', + :gid => 'swift', + :incoming_chmod => 'Du=rwx,g=rx,o=rx,Fu=rw,g=r,o=r', + :outgoing_chmod => 'Du=rwx,g=rx,o=rx,Fu=rw,g=r,o=r', + :max_connections => 25, + :read_only => false, + )} + + it { + is_expected.to contain_swift_container_config('DEFAULT/devices').with_value('/srv/node') + is_expected.to contain_swift_container_config('DEFAULT/bind_ip').with_value('10.0.0.1') + is_expected.to contain_swift_container_config('DEFAULT/bind_port').with_value('6001') + is_expected.to contain_swift_container_config('DEFAULT/mount_check').with_value(true) + is_expected.to contain_swift_container_config('DEFAULT/user').with_value('swift') + is_expected.to contain_swift_container_config('DEFAULT/workers').with_value(4) + is_expected.to contain_swift_container_config('DEFAULT/log_name').with_value('container-server') + is_expected.to contain_swift_container_config('DEFAULT/log_facility').with_value('LOG_LOCAL2') + is_expected.to contain_swift_container_config('DEFAULT/log_level').with_value('INFO') + is_expected.to contain_swift_container_config('DEFAULT/log_address').with_value('/dev/log') + is_expected.to contain_swift_container_config('pipeline:main/pipeline').with_value('container-server') + is_expected.to contain_swift_container_config('app:container-server/use').with_value('egg:swift#container') + is_expected.to contain_swift_container_config('app:container-server/set log_name').with_value('container-server') + is_expected.to contain_swift_container_config('app:container-server/set log_facility').with_value('LOG_LOCAL2') + is_expected.to contain_swift_container_config('app:container-server/set log_level').with_value('INFO') + is_expected.to contain_swift_container_config('app:container-server/set log_requests').with_value(true) + is_expected.to contain_swift_container_config('app:container-server/set log_address').with_value('/dev/log') + + is_expected.to contain_swift_container_config('DEFAULT/log_statsd_host').with_value('') + is_expected.to contain_swift_container_config('DEFAULT/log_statsd_port').with_value('') + is_expected.to contain_swift_container_config('DEFAULT/log_statsd_default_sample_rate').with_value('') + is_expected.to contain_swift_container_config('DEFAULT/log_statsd_sample_rate_factor').with_value('') + is_expected.to contain_swift_container_config('DEFAULT/log_statsd_metric_prefix').with_value('') + + is_expected.to contain_swift_container_config('DEFAULT/allowed_sync_hosts').with_value('127.0.0.1') + is_expected.to contain_swift_container_config('container-replicator/concurrency').with_value(1) + is_expected.to contain_swift_container_config('container-replicator/interval').with_value('') + is_expected.to contain_swift_container_config('container-updater/concurrency').with_value(1) + is_expected.to contain_swift_container_config('container-sharder/auto_shard').with_value('') + is_expected.to contain_swift_container_config('container-sharder/concurrency').with_value('') + is_expected.to contain_swift_container_config('container-sharder/interval').with_value('') + } + + context 'with customized pipeline' do + let :pre_condition do + "class { 'swift': swift_hash_path_suffix => 'foo' } + class { 'swift::storage': storage_local_net_ip => '10.0.0.1' } + swift::storage::filter::healthcheck { 'container': } + swift::storage::filter::recon { 'container': } + " end - it { is_expected.to contain_package("swift-#{t}").with_ensure('present') } - it { is_expected.to contain_service("swift-#{t}-server").with( - :ensure => 'running', - :enable => true, - :hasstatus => true, - )} - - describe 'when parameters are overridden' do - { - :devices => '/tmp/foo', - :user => 'dan', - :mount_check => true, - :workers => 7, - :pipeline => ['healthcheck'], - }.each do |k,v| - describe "when #{k} is set" do - let :params do req_params.merge({k => v}) end - it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^#{k.to_s}\s*=\s*#{v.is_a?(Array) ? v.join(' ') : v}\s*$/) } - end - end - - describe "when pipeline is passed an array" do - let :params do req_params.merge({:pipeline => ['healthcheck','recon']}) end - it { is_expected.to contain_concat__fragment("swift-#{t}-#{title}").with( - :content => /^pipeline\s*=\s*healthcheck recon\s*$/, - :before => ["Swift::Storage::Filter::Healthcheck[#{t}]", "Swift::Storage::Filter::Recon[#{t}]",] - )} - end - - describe "when pipeline is not passed an array" do - let :params do req_params.merge({:pipeline => 'not an array'}) end - it { should raise_error(Puppet::Error) } - end - - describe "when replicator_concurrency is set" do - let :params do req_params.merge({:replicator_concurrency => 42}) end - it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/\[#{t}-replicator\]\nconcurrency\s*=\s*42\s*$/m) } - end - - if t != 'object' - describe "when replicator_concurrency and replicator_interval are set" do - let :params do req_params.merge( - { :replicator_concurrency => 42, - :replicator_interval => 42}) - end - it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/\[#{t}-replicator\]\nconcurrency\s*=\s*42\ninterval\s*=\s*42\s*$/m) } - end - end - - if t != 'account' - describe "when updater_concurrency is set" do - let :params do req_params.merge({:updater_concurrency => 73}) end - it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/\[#{t}-updater\]\nconcurrency\s*=\s*73\s*$/m) } - end - else - describe "when reaper_concurrency is set" do - let :params do req_params.merge({:reaper_concurrency => 4682}) end - it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/\[#{t}-reaper\]\nconcurrency\s*=\s*4682\s*$/m) } - end - end - - if t == 'container' - # Nothing to test now - end - - if t == 'object' - describe "when splice is not set" do - it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^splice\s*=\s*false\s*$/) } - end - describe "when splice is set" do - let :params do req_params.merge({ :splice => true, }) end - it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^splice\s*=\s*true\s*$/) } - end - - describe "when client_timeout is not set" do - it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^client_timeout\s*=\s*60\s*$/) } - end - describe "when client_timeout is set" do - let :params do req_params.merge({ :client_timeout => 30, }) end - it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^client_timeout\s*=\s*30\s*$/) } - end - - describe "when rsync_timeout is not set" do - it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^rsync_timeout\s*=\s*900\s*$/) } - end - describe "when rsync_timeout is set" do - let :params do req_params.merge({ :rsync_timeout => 600, }) end - it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^rsync_timeout\s*=\s*600\s*$/) } - end - - describe "when rsync_bwlimit is not set" do - it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^rsync_bwlimit\s*=\s*0\s*$/) } - end - describe "when rsync_bwlimit is set" do - let :params do req_params.merge({ :rsync_bwlimit => 2048, }) end - it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^rsync_bwlimit\s*=\s*2048\s*$/) } - end - end - - describe "when log_udp_port is set" do - context 'and log_udp_host is not set' do - let :params do req_params.merge({ :log_udp_port => 514}) end - it_raises 'a Puppet::Error', /log_udp_port requires log_udp_host to be set/ - end - context 'and log_udp_host is set' do - let :params do req_params.merge( - { :log_udp_host => '127.0.0.1', - :log_udp_port => '514'}) - end - it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^log_udp_host\s*=\s*127\.0\.0\.1\s*$/) } - it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^log_udp_port\s*=\s*514\s*$/) } - end - end - - describe "when using swift_#{t}_config resource" do - let :pre_condition do - " - class { 'swift': swift_hash_path_suffix => 'foo' } - class { 'swift::storage': storage_local_net_ip => '10.0.0.1' } - swift_#{t}_config { 'foo/bar': value => 'foo' } - " - end - it { is_expected.to contain_concat("/etc/swift/#{t}-server.conf").that_comes_before("Swift_#{t}_config[foo/bar]") } - end - - describe "when log_requests is turned off" do - let :params do req_params.merge({:log_requests => false}) end - it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^set log_requests\s*=\s*false\s*$/) } - end + before do + params.merge!({ + :pipeline => ['healthcheck', 'recon', 'container-server'] + }) end - describe 'with all allowed defaults' do - let :params do - req_params - end + it { + is_expected.to contain_swift_container_config('pipeline:main/pipeline').with_value('healthcheck recon container-server') + } + end + end - it { is_expected.to contain_rsync__server__module("#{t}").with( - :path => '/srv/node', - :lock_file => "/var/lock/#{t}.lock", - :uid => 'swift', - :gid => 'swift', - :incoming_chmod => 'Du=rwx,g=rx,o=rx,Fu=rw,g=r,o=r', - :outgoing_chmod => 'Du=rwx,g=rx,o=rx,Fu=rw,g=r,o=r', - :max_connections => 25, - :read_only => false - )} + describe 'for type object' do + let :title do + '6000' + end - # verify template lines - it { is_expected.to contain_concat("/etc/swift/#{t}-server.conf") } - it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^devices\s*=\s*\/srv\/node\s*$/) } - it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^bind_ip\s*=\s*10\.0\.0\.1\s*$/) } - it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^bind_port\s*=\s*#{title}\s*$/) } - it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^mount_check\s*=\s*true\s*$/) } - it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^user\s*=\s*swift\s*$/) } - it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^set log_name\s*=\s*#{t}-server\s*$/) } - it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^set log_facility\s*=\s*LOG_LOCAL2\s*$/) } - it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^set log_level\s*=\s*INFO\s*$/) } - it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^set log_address\s*=\s*\/dev\/log\s*$/) } - it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^set log_requests\s*=\s*true\s*$/) } - it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^workers\s*=\s*2\s*$/) } - it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^concurrency\s*=\s*1\s*$/) } - it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^pipeline\s*=\s*#{t}-server\s*$/) } + let :req_params do + { + :storage_local_net_ip => '10.0.0.1', + :type => 'object' + } + end + + let :params do + req_params + end + + it { is_expected.to contain_package('swift-object').with_ensure('present') } + it { is_expected.to contain_service('swift-object-server').with( + :ensure => 'running', + :enable => true, + :hasstatus => true, + )} + + it { is_expected.to contain_rsync__server__module('object').with( + :path => '/srv/node', + :lock_file => '/var/lock/object.lock', + :uid => 'swift', + :gid => 'swift', + :incoming_chmod => 'Du=rwx,g=rx,o=rx,Fu=rw,g=r,o=r', + :outgoing_chmod => 'Du=rwx,g=rx,o=rx,Fu=rw,g=r,o=r', + :max_connections => 25, + :read_only => false, + )} + + it { + is_expected.to contain_swift_object_config('DEFAULT/devices').with_value('/srv/node') + is_expected.to contain_swift_object_config('DEFAULT/bind_ip').with_value('10.0.0.1') + is_expected.to contain_swift_object_config('DEFAULT/bind_port').with_value('6000') + is_expected.to contain_swift_object_config('DEFAULT/mount_check').with_value(true) + is_expected.to contain_swift_object_config('DEFAULT/user').with_value('swift') + is_expected.to contain_swift_object_config('DEFAULT/workers').with_value(4) + is_expected.to contain_swift_object_config('DEFAULT/log_name').with_value('object-server') + is_expected.to contain_swift_object_config('DEFAULT/log_facility').with_value('LOG_LOCAL2') + is_expected.to contain_swift_object_config('DEFAULT/log_level').with_value('INFO') + is_expected.to contain_swift_object_config('DEFAULT/log_address').with_value('/dev/log') + is_expected.to contain_swift_object_config('pipeline:main/pipeline').with_value('object-server') + is_expected.to contain_swift_object_config('app:object-server/use').with_value('egg:swift#object') + is_expected.to contain_swift_object_config('app:object-server/set log_name').with_value('object-server') + is_expected.to contain_swift_object_config('app:object-server/set log_facility').with_value('LOG_LOCAL2') + is_expected.to contain_swift_object_config('app:object-server/set log_level').with_value('INFO') + is_expected.to contain_swift_object_config('app:object-server/set log_requests').with_value(true) + is_expected.to contain_swift_object_config('app:object-server/set log_address').with_value('/dev/log') + + is_expected.to contain_swift_object_config('DEFAULT/log_statsd_host').with_value('') + is_expected.to contain_swift_object_config('DEFAULT/log_statsd_port').with_value('') + is_expected.to contain_swift_object_config('DEFAULT/log_statsd_default_sample_rate').with_value('') + is_expected.to contain_swift_object_config('DEFAULT/log_statsd_sample_rate_factor').with_value('') + is_expected.to contain_swift_object_config('DEFAULT/log_statsd_metric_prefix').with_value('') + + is_expected.to contain_swift_object_config('DEFAULT/servers_per_port').with_value('') + is_expected.to contain_swift_object_config('DEFAULT/network_chunk_size').with_value('') + is_expected.to contain_swift_object_config('DEFAULT/disk_chunk_size').with_value('') + is_expected.to contain_swift_object_config('DEFAULT/client_timeout').with_value('') + is_expected.to contain_swift_object_config('app:object-server/splice').with_value('') + is_expected.to contain_swift_object_config('app:object-server/mb_per_sync').with_value('') + is_expected.to contain_swift_object_config('object-auditor/disk_chunk_size').with_value('') + is_expected.to contain_swift_object_config('object-replicator/concurrency').with_value(1) + is_expected.to contain_swift_object_config('object-replicator/rsync_timeout').with_value('') + is_expected.to contain_swift_object_config('object-replicator/rsync_bwlimit').with_value('') + is_expected.to contain_swift_object_config('object-updater/concurrency').with_value(1) + } + + context 'with customized pipeline' do + let :pre_condition do + "class { 'swift': swift_hash_path_suffix => 'foo' } + class { 'swift::storage': storage_local_net_ip => '10.0.0.1' } + swift::storage::filter::healthcheck { 'object': } + swift::storage::filter::recon { 'object': } + " end + + before do + params.merge!({ + :pipeline => ['healthcheck', 'recon', 'object-server'] + }) + end + + it { + is_expected.to contain_swift_object_config('pipeline:main/pipeline').with_value('healthcheck recon object-server') + } end end end @@ -225,7 +308,9 @@ describe 'swift::storage::server' do }).each do |os,facts| context "on #{os}" do let (:facts) do - facts.merge(OSDefaults.get_facts()) + facts.merge(OSDefaults.get_facts({ + :os_workers => 4 + })) end it_configures 'swift::storage::server' diff --git a/templates/account-server.conf.erb b/templates/account-server.conf.erb deleted file mode 100644 index bdf49647..00000000 --- a/templates/account-server.conf.erb +++ /dev/null @@ -1,45 +0,0 @@ -[DEFAULT] -devices = <%= @devices %> -bind_ip = <%= @storage_local_net_ip %> -bind_port = <%= @bind_port %> -mount_check = <%= @mount_check %> -user = <%= @user_real %> -workers = <%= @workers %> -log_name = <%= @log_name %> -log_facility = <%= @log_facility %> -log_level = <%= @log_level %> -log_address = <%= @log_address %> -<% if @log_udp_host -%> -# If set, log_udp_host will override log_address -log_udp_host = <%= @log_udp_host -%> -<% end %> -<% if @log_udp_host and @log_udp_port -%> -log_udp_port = <%= @log_udp_port -%> -<% end %> -<%- if @statsd_enabled -%> -log_statsd_host = <%=@log_statsd_host%> -log_statsd_port = <%=@log_statsd_port%> -log_statsd_default_sample_rate = <%=@log_statsd_default_sample_rate%> -log_statsd_sample_rate_factor = <%=@log_statsd_sample_rate_factor%> -log_statsd_metric_prefix = <%=@log_statsd_metric_prefix%> -<%- end -%> - -[pipeline:main] -pipeline = <%= @pipeline.to_a.join(' ') %> - -[app:account-server] -use = egg:swift#account -set log_name = <%= @log_name %> -set log_facility = <%= @log_facility %> -set log_level = <%= @log_level %> -set log_requests = <%= @log_requests %> -set log_address = <%= @log_address %> - -[account-replicator] -concurrency = <%= @replicator_concurrency %> -interval = <%= @replicator_interval %> - -[account-auditor] - -[account-reaper] -concurrency = <%= @reaper_concurrency %> diff --git a/templates/container-server.conf.erb b/templates/container-server.conf.erb deleted file mode 100644 index a7283f9f..00000000 --- a/templates/container-server.conf.erb +++ /dev/null @@ -1,53 +0,0 @@ -[DEFAULT] -devices = <%= @devices %> -bind_ip = <%= @storage_local_net_ip %> -bind_port = <%= @bind_port %> -mount_check = <%= @mount_check %> -user = <%= @user_real %> -log_name = <%= @log_name %> -log_facility = <%= @log_facility %> -log_level = <%= @log_level %> -log_address = <%= @log_address %> -<% if @log_udp_host -%> -# If set, log_udp_host will override log_address -log_udp_host = <%= @log_udp_host -%> -<% end %> -<% if @log_udp_host and @log_udp_port -%> -log_udp_port = <%= @log_udp_port -%> -<% end %> -workers = <%= @workers %> -allowed_sync_hosts = <%= scope.lookupvar("swift::storage::container::allowed_sync_hosts").to_a.join(',') %> -<%- if @statsd_enabled -%> -log_statsd_host = <%=@log_statsd_host%> -log_statsd_port = <%=@log_statsd_port%> -log_statsd_default_sample_rate = <%=@log_statsd_default_sample_rate%> -log_statsd_sample_rate_factor = <%=@log_statsd_sample_rate_factor%> -log_statsd_metric_prefix = <%=@log_statsd_metric_prefix%> -<%- end -%> - -[pipeline:main] -pipeline = <%= @pipeline.to_a.join(' ') %> - -[app:container-server] -use = egg:swift#container -set log_name = <%= @log_name %> -set log_facility = <%= @log_facility %> -set log_level = <%= @log_level %> -set log_requests = <%= @log_requests %> -set log_address = <%= @log_address %> - -[container-replicator] -concurrency = <%= @replicator_concurrency %> -interval = <%= @replicator_interval %> - -[container-updater] -concurrency = <%= @updater_concurrency %> - -[container-auditor] - -[container-sync] - -[container-sharder] -auto_shard = <%= @container_sharder_auto_shard %> -concurrency = <%= @container_sharder_concurrency %> -interval = <%= @container_sharder_interval %> diff --git a/templates/healthcheck.conf.erb b/templates/healthcheck.conf.erb deleted file mode 100644 index 567e65aa..00000000 --- a/templates/healthcheck.conf.erb +++ /dev/null @@ -1,3 +0,0 @@ - -[filter:healthcheck] -use = egg:swift#healthcheck diff --git a/templates/object-server.conf.erb b/templates/object-server.conf.erb deleted file mode 100644 index efb95b8a..00000000 --- a/templates/object-server.conf.erb +++ /dev/null @@ -1,57 +0,0 @@ -[DEFAULT] -devices = <%= @devices %> -bind_ip = <%= @storage_local_net_ip %> -bind_port = <%= @bind_port %> -mount_check = <%= @mount_check %> -servers_per_port = <%= @servers_per_port %> -user = <%= @user_real %> -log_name = <%= @log_name %> -log_facility = <%= @log_facility %> -log_level = <%= @log_level %> -log_address = <%= @log_address %> -<% if @log_udp_host -%> -# If set, log_udp_host will override log_address -log_udp_host = <%= @log_udp_host -%> -<% end %> -<% if @log_udp_host and @log_udp_port -%> -log_udp_port = <%= @log_udp_port -%> -<% end %> -workers = <%= @workers %> -<% if @statsd_enabled -%> -log_statsd_host = <%=@log_statsd_host%> -log_statsd_port = <%=@log_statsd_port%> -log_statsd_default_sample_rate = <%=@log_statsd_default_sample_rate%> -log_statsd_sample_rate_factor = <%=@log_statsd_sample_rate_factor%> -log_statsd_metric_prefix = <%=@log_statsd_metric_prefix%> -<% end -%> -network_chunk_size = <%= @network_chunk_size%> -disk_chunk_size = <%= @disk_chunk_size%> -client_timeout = <%= @client_timeout %> - -[pipeline:main] -pipeline = <%= @pipeline.to_a.join(' ') %> - -[app:object-server] -use = egg:swift#object -set log_name = <%= @log_name %> -set log_facility = <%= @log_facility %> -set log_level = <%= @log_level %> -set log_requests = <%= @log_requests %> -set log_address = <%= @log_address %> -splice = <%= @splice %> -mb_per_sync = <%= @object_server_mb_per_sync %> - -[object-replicator] -concurrency = <%= @replicator_concurrency %> -rsync_timeout = <%= @rsync_timeout%> -rsync_bwlimit = <%= @rsync_bwlimit%> - -[object-updater] -concurrency = <%= @updater_concurrency %> - -[object-auditor] -<% if @auditor_disk_chunk_size -%> -disk_chunk_size = <%= @auditor_disk_chunk_size %> -<% end -%> - -[object-reconstructor] diff --git a/templates/recon.conf.erb b/templates/recon.conf.erb deleted file mode 100644 index e7efb266..00000000 --- a/templates/recon.conf.erb +++ /dev/null @@ -1,4 +0,0 @@ - -[filter:recon] -use = egg:swift#recon -recon_cache_path = <%= @cache_path %>