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 10563b72..fe63583d 100644 --- a/spec/classes/swift_storage_all_spec.rb +++ b/spec/classes/swift_storage_all_spec.rb @@ -121,55 +121,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 %>