From 9686d3e41b660c2301ffc490e43237c72de226ff Mon Sep 17 00:00:00 2001 From: Takashi Kajinami Date: Mon, 5 Sep 2022 00:16:37 +0900 Subject: [PATCH] ratelimit: Support options for container access ratelimit This change introduces support for the following two options which controls rate limit for container access. - container_ratelimit_ = - container_listing_ratelimit_ = Change-Id: Ibed7f31e9ad472ac490ac6a2933ffa2c8329f376 --- manifests/proxy/ratelimit.pp | 35 ++++++++++++++++--- .../container-ratelimit-9d38553d9512934e.yaml | 8 +++++ spec/classes/swift_proxy_ratelimit_spec.rb | 32 +++++++++++++++++ 3 files changed, 70 insertions(+), 5 deletions(-) create mode 100644 releasenotes/notes/container-ratelimit-9d38553d9512934e.yaml diff --git a/manifests/proxy/ratelimit.pp b/manifests/proxy/ratelimit.pp index 91574fc5..1beb30e9 100644 --- a/manifests/proxy/ratelimit.pp +++ b/manifests/proxy/ratelimit.pp @@ -27,6 +27,14 @@ # (optional) if >0, limits PUT and DELETE requests to containers # Defaults to $::os_service_default. # +# [*container_ratelimit*] +# (optional) Hash of size(keys) and requests per seconds(values). +# Defaults to {}. +# +# [*container_listing_ratelimit*] +# (optional) Hash of size(keys) and requests per seconds(values). +# Defaults to {}. +# # == Dependencies # # == Examples @@ -40,15 +48,20 @@ # Copyright 2012 eNovance licensing@enovance.com # class swift::proxy::ratelimit( - $clock_accuracy = $::os_service_default, - $max_sleep_time_seconds = $::os_service_default, - $log_sleep_time_seconds = $::os_service_default, - $rate_buffer_seconds = $::os_service_default, - $account_ratelimit = $::os_service_default + $clock_accuracy = $::os_service_default, + $max_sleep_time_seconds = $::os_service_default, + $log_sleep_time_seconds = $::os_service_default, + $rate_buffer_seconds = $::os_service_default, + $account_ratelimit = $::os_service_default, + $container_ratelimit = {}, + $container_listing_ratelimit = {}, ) { include swift::deps + validate_legacy(Hash, 'validate_hash', $container_ratelimit) + validate_legacy(Hash, 'validate_hash', $container_listing_ratelimit) + swift_proxy_config { 'filter:ratelimit/use': value => 'egg:swift#ratelimit'; 'filter:ratelimit/clock_accuracy': value => $clock_accuracy; @@ -57,4 +70,16 @@ class swift::proxy::ratelimit( 'filter:ratelimit/rate_buffer_seconds': value => $rate_buffer_seconds; 'filter:ratelimit/account_ratelimit': value => $account_ratelimit; } + + $container_ratelimit.each | $size, $limit | { + swift_proxy_config { + "filter:ratelimit/container_ratelimit_${size}": value => $limit; + } + } + + $container_listing_ratelimit.each | $size, $limit | { + swift_proxy_config { + "filter:ratelimit/container_listing_ratelimit_${size}": value => $limit; + } + } } diff --git a/releasenotes/notes/container-ratelimit-9d38553d9512934e.yaml b/releasenotes/notes/container-ratelimit-9d38553d9512934e.yaml new file mode 100644 index 00000000..22c9e7a7 --- /dev/null +++ b/releasenotes/notes/container-ratelimit-9d38553d9512934e.yaml @@ -0,0 +1,8 @@ +--- +features: + - | + The ``swift::proxy::ratelimit`` class now supports the following two new + parameters. These parameters accept hash of container size and limit. + + - ``container_ratelimit`` + - ``container_listing_ratelimit`` diff --git a/spec/classes/swift_proxy_ratelimit_spec.rb b/spec/classes/swift_proxy_ratelimit_spec.rb index 26c6d0ae..b4d9f6c7 100644 --- a/spec/classes/swift_proxy_ratelimit_spec.rb +++ b/spec/classes/swift_proxy_ratelimit_spec.rb @@ -28,6 +28,38 @@ describe 'swift::proxy::ratelimit' do it { is_expected.to contain_swift_proxy_config('filter:ratelimit/rate_buffer_seconds').with_value('5') } it { is_expected.to contain_swift_proxy_config('filter:ratelimit/account_ratelimit').with_value('0') } end + + describe "with container ratelimit" do + let :params do + { + :container_ratelimit => { + 0 => 100, + 10 => 50, + 50 => 20 + } + } + end + + it { is_expected.to contain_swift_proxy_config('filter:ratelimit/container_ratelimit_0').with_value(100) } + it { is_expected.to contain_swift_proxy_config('filter:ratelimit/container_ratelimit_10').with_value(50) } + it { is_expected.to contain_swift_proxy_config('filter:ratelimit/container_ratelimit_50').with_value(20) } + end + + describe "with container listing ratelimit" do + let :params do + { + :container_listing_ratelimit => { + 0 => 100, + 10 => 50, + 50 => 20 + } + } + end + + it { is_expected.to contain_swift_proxy_config('filter:ratelimit/container_listing_ratelimit_0').with_value(100) } + it { is_expected.to contain_swift_proxy_config('filter:ratelimit/container_listing_ratelimit_10').with_value(50) } + it { is_expected.to contain_swift_proxy_config('filter:ratelimit/container_listing_ratelimit_50').with_value(20) } + end end on_supported_os({