From ca4aca3e503df9f693943505b5fe750122adc9e4 Mon Sep 17 00:00:00 2001 From: William Bradford Clark Date: Tue, 23 Jan 2024 10:38:02 -0500 Subject: [PATCH] Fixes #37081 - Add a setting to configure PAGE_SIZE This provides an option for users to configure the PAGE_SIZE setting in Django REST Framework as used by Pulpcore. Pulp has a default value for PAGE_SIZE but it could be overridden in the user's settings.py file. Pulp paginates views when listing repository contents, package metadata, container tags, etc. It doesn't affect delivery of content blobs, and most deployments in normal circumstances probably don't need to tune it. This setting was helpful as a workaround for an external issue that occurred when provisioning TripleO (OpenStack on OpenStack) with container content provided by Katello. In that case, the TripleO installation scripts didn't yet support pagination. --- manifests/init.pp | 4 ++++ spec/acceptance/settings_spec.rb | 19 +++++++++++++++++++ spec/classes/pulpcore_spec.rb | 1 + templates/settings.py.erb | 3 +++ 4 files changed, 27 insertions(+) diff --git a/manifests/init.pp b/manifests/init.pp index 92a128ba..9cedbc8c 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -73,6 +73,9 @@ # STATIC_URL setting. In reality this can also be just the path and doesn't # have to be a full URL. # +# @param page_size +# Configure the PAGE_SIZE setting for Pagination. +# # @param postgresql_db_name # Name of Pulp PostgreSQL database # @@ -220,6 +223,7 @@ String[1] $apache_vhost_priority = '10', Stdlib::Absolutepath $api_socket_path = '/run/pulpcore-api.sock', Stdlib::Absolutepath $content_socket_path = '/run/pulpcore-content.sock', + Optional[Integer[1]] $page_size = undef, String $postgresql_db_name = 'pulpcore', String $postgresql_db_user = 'pulp', String $postgresql_db_password = extlib::cache_data('pulpcore_cache_data', 'db_password', extlib::random_password(32)), diff --git a/spec/acceptance/settings_spec.rb b/spec/acceptance/settings_spec.rb index 9e2d4eee..b1433319 100644 --- a/spec/acceptance/settings_spec.rb +++ b/spec/acceptance/settings_spec.rb @@ -51,6 +51,25 @@ class { 'pulpcore': end end +describe 'PAGE_SIZE setting' do + context 'Custom PAGE_SIZE' do + it_behaves_like 'an idempotent resource' do + let(:manifest) do + <<-PUPPET + class { 'pulpcore': + page_size => 200, + } + PUPPET + end + end + + describe file('/etc/pulp/settings.py') do + it { is_expected.to be_file } + its(:content) { is_expected.to match(/^REST_FRAMEWORK__PAGE_SIZE = 200$/) } + end + end +end + describe 'HIDE_GUARDED_DISTRIBUTIONS setting' do context 'default HIDE_GUARDED_DISTRIBUTIONS' do it_behaves_like 'an idempotent resource' do diff --git a/spec/classes/pulpcore_spec.rb b/spec/classes/pulpcore_spec.rb index 9f1f76e0..0fa09e47 100644 --- a/spec/classes/pulpcore_spec.rb +++ b/spec/classes/pulpcore_spec.rb @@ -27,6 +27,7 @@ .with_content(%r{CACHE_ENABLED = False}) .without_content(%r{sslmode}) .without_content(%r{WORKER_TTL}) + .without_content(%r{REST_FRAMEWORK__PAGE_SIZE}) is_expected.to contain_concat__fragment('logging').with_content(<<~LOGGING) LOGGING = { "dynaconf_merge": True, diff --git a/templates/settings.py.erb b/templates/settings.py.erb index b3b92f68..e050de61 100644 --- a/templates/settings.py.erb +++ b/templates/settings.py.erb @@ -52,6 +52,9 @@ WORKING_DIRECTORY = "<%= scope['pulpcore::cache_dir'] %>" REMOTE_USER_ENVIRON_NAME = '<%= scope['pulpcore::remote_user_environ_name'] %>' AUTHENTICATION_BACKENDS = ['pulpcore.app.authentication.PulpNoCreateRemoteUserBackend'] +<% unless scope['pulpcore::page_size'].nil? -%> +REST_FRAMEWORK__PAGE_SIZE = <%= scope['pulpcore::page_size'] %> +<% end -%> REST_FRAMEWORK__DEFAULT_AUTHENTICATION_CLASSES = ( 'rest_framework.authentication.SessionAuthentication', 'pulpcore.app.authentication.PulpRemoteUserAuthentication'