From 4b74e109c825ccd63df10b0d655d8035155897bc Mon Sep 17 00:00:00 2001 From: kapil06264 Date: Fri, 4 Jul 2025 15:46:09 +0200 Subject: [PATCH 1/2] Add support for AppStream package installation --- REFERENCE.md | 9 +++++++++ manifests/init.pp | 4 ++++ manifests/package/redhat.pp | 11 +++++++++++ spec/classes/nginx_spec.rb | 24 ++++++++++++++++++++++++ 4 files changed, 48 insertions(+) diff --git a/REFERENCE.md b/REFERENCE.md index 2d079ae4d..10205f66f 100644 --- a/REFERENCE.md +++ b/REFERENCE.md @@ -85,6 +85,7 @@ The following parameters are available in the `nginx` class: * [`reset_timedout_connection`](#-nginx--reset_timedout_connection) * [`nginx_snippets`](#-nginx--nginx_snippets) * [`nginx_snippets_defaults`](#-nginx--nginx_snippets_defaults) +* [`dnfmodule`](#-nginx--dnfmodule) * [`client_body_temp_path`](#-nginx--client_body_temp_path) * [`confd_only`](#-nginx--confd_only) * [`confd_purge`](#-nginx--confd_purge) @@ -344,6 +345,14 @@ Can be used to define default values for the parameter `nginx_snippets`. Default value: `{}` +##### `dnfmodule` + +Data type: `Optional[String[1]]` + +Specifies which dnf AppStream stream to enable for nginx package. + +Default value: `undef` + ##### `client_body_temp_path` Data type: `Optional[Variant[Stdlib::Absolutepath, Tuple[Stdlib::Absolutepath, Integer, 1, 4]]]` diff --git a/manifests/init.pp b/manifests/init.pp index 0902fd552..c9947f5cb 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -49,6 +49,9 @@ # @param nginx_snippets_defaults # Can be used to define default values for the parameter `nginx_snippets`. # +# @param dnfmodule +# Specifies which dnf AppStream stream to enable for nginx package. +# # @param client_body_temp_path # @param confd_only # @param confd_purge @@ -383,6 +386,7 @@ # This is optional, to allow it to be set to undef for systems that install it with nginx always Optional[String[1]] $mail_package_name = $nginx::params::mail_package_name, Optional[Stdlib::HTTPUrl] $repo_source = undef, + Optional[String[1]] $dnfmodule = undef, ### END Package Configuration ### ### START Service Configuation ### diff --git a/manifests/package/redhat.pp b/manifests/package/redhat.pp index 6ae1d7c0c..440b57d04 100644 --- a/manifests/package/redhat.pp +++ b/manifests/package/redhat.pp @@ -9,6 +9,7 @@ $passenger_package_name = $nginx::passenger_package_name $manage_repo = $nginx::manage_repo $purge_passenger_repo = $nginx::purge_passenger_repo + $dnfmodule = $nginx::dnfmodule #Install the CentOS-specific packages on that OS, otherwise assume it's a RHEL #clone and provide the Red Hat-specific package. This comes into play when not @@ -89,6 +90,16 @@ } } + if $dnfmodule and fact('os.family') == 'RedHat' and versioncmp(fact('os.release.full'), '8.0') >= 0 { + package { "nginx:${dnfmodule}": + ensure => $dnfmodule, + name => 'nginx', + provider => 'dnfmodule', + before => Package['nginx'], + enable_only => true, + } + } + package { 'nginx': ensure => $package_ensure, name => $package_name, diff --git a/spec/classes/nginx_spec.rb b/spec/classes/nginx_spec.rb index 769774cbf..02afc5786 100644 --- a/spec/classes/nginx_spec.rb +++ b/spec/classes/nginx_spec.rb @@ -152,6 +152,30 @@ end end + context 'dnfmodule => 1.18' do + let(:params) { { dnfmodule: '1.18' } } + + it do + is_expected.to contain_package('nginx') + end + + if %w[8].include?(facts.dig(:os, 'release', 'major')) + it do + is_expected.to contain_package('nginx:1.18').with( + 'ensure' => '1.18', + 'name' => 'nginx', + 'before' => 'Package[nginx]', + 'provider' => 'dnfmodule', + 'enable_only' => true + ) + end + else + it do + is_expected.not_to contain_package('nginx:1.18') + end + end + end + when 'Debian' context 'using defaults' do it { is_expected.to contain_package('nginx') } From 48e68609f78760b3a56efcf8d190e2d2f657c942 Mon Sep 17 00:00:00 2001 From: kapil06264 Date: Fri, 4 Jul 2025 15:48:57 +0200 Subject: [PATCH 2/2] Use os.release.major instead of os.release.full --- manifests/package/redhat.pp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifests/package/redhat.pp b/manifests/package/redhat.pp index 440b57d04..935f4a575 100644 --- a/manifests/package/redhat.pp +++ b/manifests/package/redhat.pp @@ -90,7 +90,7 @@ } } - if $dnfmodule and fact('os.family') == 'RedHat' and versioncmp(fact('os.release.full'), '8.0') >= 0 { + if $dnfmodule and fact('os.family') == 'RedHat' and versioncmp(fact('os.release.major'), '8') >= 0 { package { "nginx:${dnfmodule}": ensure => $dnfmodule, name => 'nginx',