
write_affinity and read_affinity accepts values which represent array (for write) or hash (for read). Allow using native array or hash so that users can manage the values passed more easily. Change-Id: Id628cf07ec78e6239d91be3a8ab22dd4c609e348
165 lines
6.6 KiB
Puppet
165 lines
6.6 KiB
Puppet
# == Class: swift::internal_client
|
|
#
|
|
# Configures internal client
|
|
#
|
|
# === Parameters
|
|
#
|
|
# [*user*]
|
|
# (optional) User to run as
|
|
# Defaults to $::swift::params::user.
|
|
#
|
|
# [*pipeline*]
|
|
# (optional) The list of elements of the internal client pipeline.
|
|
# Defaults to ['catch_errors', 'proxy-logging', 'cache', 'proxy-server']
|
|
#
|
|
# [*object_chunk_size*]
|
|
# (optional) Chunk size to read from object servers.
|
|
# Defaults to $facts['os_service_default'].
|
|
#
|
|
# [*client_chunk_size*]
|
|
# (optional) Chunk size to read from clients.
|
|
# Defaults to $facts['os_service_default'].
|
|
#
|
|
# [*sorting_method*]
|
|
# (optional) Method to chose storage nodes during GET and HEAD requests.
|
|
# Defaults to undef.
|
|
#
|
|
# [*timing_expiry*]
|
|
# (optional) If the "timing" sorting_method is used, the timings will only
|
|
# be valid for the number of seconds configured by timing_expiry.
|
|
# Defaults to $facts['os_service_default'].
|
|
#
|
|
# [*request_node_count*]
|
|
# (optional) Number of nodes to contact for a normal request.
|
|
# Defaults to $facts['os_service_default'].
|
|
#
|
|
# [*read_affinity*]
|
|
# (optional) Configures the read affinity of internal client.
|
|
# Defaults to undef.
|
|
#
|
|
# [*write_affinity*]
|
|
# (optional) Configures the write affinity of internal client.
|
|
# Defaults to undef.
|
|
#
|
|
# [*write_affinity_node_count*]
|
|
# (optional) Configures write_affinity_node_count for internal client.
|
|
# Optional but requires write_affinity to be set.
|
|
# Defaults to $facts['os_service_default'].
|
|
#
|
|
# [*write_affinity_handoff_delete_count*]
|
|
# (optional) Configures write_affinity_handoff_delete_count for proxy-server.
|
|
# Optional but requires write_affinity to be set.
|
|
# Defaults to $facts['os_service_default'].
|
|
#
|
|
# [*client_timeout*]
|
|
# (optional) Configures client_timeout for internal client.
|
|
# Defaults to $facts['os_service_default'].
|
|
#
|
|
# [*node_timeout*]
|
|
# (optional) Configures node_timeout for internal client.
|
|
# Defaults to $facts['os_service_default'].
|
|
#
|
|
# [*recoverable_node_timeout*]
|
|
# (optional) Configures recoverable_node_timeout for internal client.
|
|
# Defaults to $facts['os_service_default'].
|
|
#
|
|
# [*purge_config*]
|
|
# (optional) Whether to set only the specified config options in
|
|
# the internal client config.
|
|
# Defaults to false.
|
|
#
|
|
class swift::internal_client (
|
|
$user = $::swift::params::user,
|
|
Swift::Pipeline $pipeline = ['catch_errors', 'proxy-logging', 'cache', 'proxy-server'],
|
|
$object_chunk_size = $facts['os_service_default'],
|
|
$client_chunk_size = $facts['os_service_default'],
|
|
Optional[Swift::SortingMethod] $sorting_method = undef,
|
|
$timing_expiry = $facts['os_service_default'],
|
|
$request_node_count = $facts['os_service_default'],
|
|
$read_affinity = undef,
|
|
$write_affinity = undef,
|
|
$write_affinity_node_count = $facts['os_service_default'],
|
|
$write_affinity_handoff_delete_count = $facts['os_service_default'],
|
|
$client_timeout = $facts['os_service_default'],
|
|
$node_timeout = $facts['os_service_default'],
|
|
$recoverable_node_timeout = $facts['os_service_default'],
|
|
Boolean $purge_config = false,
|
|
) inherits swift::params {
|
|
|
|
include swift::deps
|
|
include swift::params
|
|
|
|
if $pipeline[-1] != 'proxy-server' {
|
|
fail('proxy-server must be the last element in pipeline')
|
|
}
|
|
|
|
resources { 'swift_internal_client_config':
|
|
purge => $purge_config,
|
|
}
|
|
|
|
file { '/etc/swift/internal-client.conf':
|
|
ensure => 'file',
|
|
owner => 'root',
|
|
group => $::swift::params::group,
|
|
mode => '0640',
|
|
require => Anchor['swift::config::begin'],
|
|
before => Anchor['swift::config::end']
|
|
}
|
|
File['/etc/swift/internal-client.conf'] -> Swift_internal_client_config<||>
|
|
|
|
swift_internal_client_config {
|
|
'DEFAULT/user': value => $user;
|
|
'pipeline:main/pipeline': value => join($pipeline, ' ');
|
|
'app:proxy-server/use': value => 'egg:swift#proxy';
|
|
'app:proxy-server/account_autocreate': value => true;
|
|
'app:proxy-server/timing_expiry': value => $timing_expiry;
|
|
'app:proxy-server/request_node_count': value => $request_node_count;
|
|
'app:proxy-server/object_chunk_size': value => $object_chunk_size;
|
|
'app:proxy-server/client_chunk_size': value => $client_chunk_size;
|
|
'app:proxy-server/client_timeout': value => $client_timeout;
|
|
'app:proxy-server/node_timeout': value => $node_timeout;
|
|
'app:proxy-server/recoverable_node_timeout': value => $recoverable_node_timeout;
|
|
}
|
|
|
|
if $write_affinity {
|
|
$write_affinity_real = join(any2array($write_affinity), ',')
|
|
swift_internal_client_config {
|
|
'app:proxy-server/write_affinity': value => $write_affinity_real;
|
|
'app:proxy-server/write_affinity_node_count': value => $write_affinity_node_count;
|
|
'app:proxy-server/write_affinity_handoff_delete_count': value => $write_affinity_handoff_delete_count;
|
|
}
|
|
} else {
|
|
if !is_service_default($write_affinity_node_count) {
|
|
fail('Usage of write_affinity_node_count requires write_affinity to be set')
|
|
}
|
|
if !is_service_default($write_affinity_handoff_delete_count) {
|
|
fail('Usage of write_affinity_handoff_delete_count requires write_affinity to be set')
|
|
}
|
|
swift_internal_client_config {
|
|
'app:proxy-server/write_affinity': value => $facts['os_service_default'];
|
|
'app:proxy-server/write_affinity_node_count': value => $facts['os_service_default'];
|
|
'app:proxy-server/write_affinity_handoff_delete_count': value => $facts['os_service_default'];
|
|
}
|
|
}
|
|
|
|
if $read_affinity {
|
|
if $sorting_method and $sorting_method != 'affinity' {
|
|
fail('sorting_method should be \'affinity\' to use read affinity')
|
|
}
|
|
$read_affinity_real = $read_affinity ? {
|
|
Hash => join(join_keys_to_values($read_affinity, '='), ','),
|
|
default => join(any2array($read_affinity), ',')
|
|
}
|
|
|
|
swift_internal_client_config {
|
|
'app:proxy-server/sorting_method': value => 'affinity';
|
|
'app:proxy-server/read_affinity': value => $read_affinity_real;
|
|
}
|
|
} else {
|
|
swift_internal_client_config {
|
|
'app:proxy-server/sorting_method': value => pick($sorting_method, $facts['os_service_default']);
|
|
'app:proxy-server/read_affinity': value => $facts['os_service_default'];
|
|
}
|
|
}
|
|
}
|