From 05897fc05ec27d41a6bd5dca1a30c1d39249d0e5 Mon Sep 17 00:00:00 2001 From: "Eric D. Helms" Date: Fri, 13 Dec 2024 10:40:43 -0500 Subject: [PATCH] Add enablement parameter for bootstrap RPMs Signed-off-by: Eric D. Helms --- .../provider/bootstrap_rpm/bootstrap_rpm.rb | 36 ++++++++++++++----- manifests/bootstrap_rpm.pp | 5 +-- manifests/init.pp | 8 ++++- manifests/pub_dir.pp | 6 +++- spec/acceptance/bootstrap_rpm_spec.rb | 32 +++++++++++++++++ spec/classes/foreman_proxy_content_spec.rb | 18 ++++++++++ 6 files changed, 93 insertions(+), 12 deletions(-) diff --git a/lib/puppet/provider/bootstrap_rpm/bootstrap_rpm.rb b/lib/puppet/provider/bootstrap_rpm/bootstrap_rpm.rb index 30eecb0f..40f731a2 100644 --- a/lib/puppet/provider/bootstrap_rpm/bootstrap_rpm.rb +++ b/lib/puppet/provider/bootstrap_rpm/bootstrap_rpm.rb @@ -22,12 +22,28 @@ def create @base_dir = nil end + def destroy + FileUtils.rm(symlink) unless symlink.nil? + + all_rpms.each do |rpm| + FileUtils.rm(rpm) + end + + all_rpms(source: true).each do |rpm| + FileUtils.rm(rpm) + end + end + def exists? - copy_sources - write_specfile - build_rpm + if resource[:ensure] == :absent + File.exist?(resource[:symlink]) || !all_rpms.empty? || !all_rpms(source: true).empty? + else + copy_sources + write_specfile + build_rpm - !rpm_changed? + !rpm_changed? + end end def symlink @@ -39,10 +55,7 @@ def symlink=(value) end def latest_rpm(source: false) - extension = source ? 'src.rpm' : 'noarch.rpm' - - rpms = Dir.glob("#{resource[:dest]}/#{resource[:name]}*.#{extension}") - rpms = rpms.reject { |rpm| rpm.end_with?("latest.noarch.rpm") } + rpms = all_rpms(source: source) return false if rpms.empty? @@ -51,6 +64,13 @@ def latest_rpm(source: false) private + def all_rpms(source: false) + extension = source ? 'src.rpm' : 'noarch.rpm' + + rpms = Dir.glob("#{resource[:dest]}/#{resource[:name]}*.#{extension}") + rpms.reject { |rpm| rpm.end_with?("latest.noarch.rpm") } + end + def base_dir @base_dir ||= Dir.mktmpdir end diff --git a/manifests/bootstrap_rpm.pp b/manifests/bootstrap_rpm.pp index ad229e2d..ea2a196e 100644 --- a/manifests/bootstrap_rpm.pp +++ b/manifests/bootstrap_rpm.pp @@ -2,6 +2,7 @@ # This file is placed in $rpm_serve_dir. # @api private class foreman_proxy_content::bootstrap_rpm ( + Enum['present', 'absent'] $ensure = 'present', Stdlib::Fqdn $rhsm_hostname = $facts['networking']['fqdn'], Stdlib::Port $rhsm_port = 443, Pattern[/\A(\/[a-zA-Z0-9]+)+(\/)?\z/] $rhsm_path = '/rhsm', @@ -48,7 +49,7 @@ require => File[$katello_server_ca_cert], } -> rhsm_reconfigure_script { "${rpm_serve_dir}/${katello_rhsm_setup_script}": - ensure => present, + ensure => $ensure, default_ca_cert => $ca_cert, server_ca_cert => $katello_server_ca_cert, default_ca_name => $default_ca_name, @@ -62,7 +63,7 @@ } bootstrap_rpm { $bootstrap_rpm_name: - ensure => present, + ensure => $ensure, script => "${rpm_serve_dir}/${katello_rhsm_setup_script}", dest => $rpm_serve_dir, symlink => "${rpm_serve_dir}/${candlepin_cert_rpm_alias_filename}", diff --git a/manifests/init.pp b/manifests/init.pp index 0f6f8ce0..4b9b64ed 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -74,6 +74,8 @@ # # $pulpcore_import_workers_percent:: What percentage of available-workers will pulpcore use for import tasks at a time # +# $ensure_bootstrap_rpm:: Enable the deployment of the bootstrap RPM +# class foreman_proxy_content ( Boolean $pulpcore_mirror = false, @@ -110,6 +112,7 @@ Boolean $pulpcore_analytics = false, Boolean $pulpcore_hide_guarded_distributions = true, Optional[Integer[1,100]] $pulpcore_import_workers_percent = undef, + Enum['present', 'absent'] $ensure_bootstrap_rpm = 'present', ) inherits foreman_proxy_content::params { include certs include foreman_proxy @@ -130,7 +133,9 @@ include certs::foreman_proxy Class['certs::foreman_proxy'] ~> Service['foreman-proxy'] - include foreman_proxy_content::pub_dir + class { 'foreman_proxy_content::pub_dir': + ensure_bootstrap => $ensure_bootstrap_rpm, + } if $pulpcore_mirror { $base_allowed_import_paths = ['/var/lib/pulp/sync_imports'] @@ -307,6 +312,7 @@ } class { 'foreman_proxy_content::bootstrap_rpm': + ensure => $ensure_bootstrap_rpm, rhsm_hostname => $client_facing_servername, rhsm_port => $rhsm_port, rhsm_path => $rhsm_path, diff --git a/manifests/pub_dir.pp b/manifests/pub_dir.pp index 082bb6d9..eebebbbd 100644 --- a/manifests/pub_dir.pp +++ b/manifests/pub_dir.pp @@ -5,10 +5,14 @@ # # @param pub_dir_options # The Directory options as Apache applies them +# +# @param ensure_bootstrap +# Enable installing the katello-client-bootstrap RPM class foreman_proxy_content::pub_dir ( String $pub_dir_options = '+FollowSymLinks +Indexes', + Enum['present', 'absent'] $ensure_bootstrap = 'present', ) { - stdlib::ensure_packages('katello-client-bootstrap') + stdlib::ensure_packages('katello-client-bootstrap', { 'ensure' => $ensure_bootstrap }) include apache::mod::alias diff --git a/spec/acceptance/bootstrap_rpm_spec.rb b/spec/acceptance/bootstrap_rpm_spec.rb index c33b9a7d..a30a2ea5 100644 --- a/spec/acceptance/bootstrap_rpm_spec.rb +++ b/spec/acceptance/bootstrap_rpm_spec.rb @@ -272,4 +272,36 @@ class { 'foreman_proxy_content::bootstrap_rpm': it { should be_linked_to "/var/www/html/pub/katello-ca-consumer-#{host_inventory['fqdn']}-1.0-2.noarch.rpm" } end end + + context 'removes RPM when ensure is false' do + it_behaves_like 'an idempotent resource' do + let(:manifest) do + <<-PUPPET + class { 'foreman_proxy_content::bootstrap_rpm': + ensure => 'absent', + } + PUPPET + end + end + + describe file("/var/www/html/pub/katello-ca-consumer-#{host_inventory['fqdn']}-1.0-1.src.rpm") do + it { should_not exist } + end + + describe file("/var/www/html/pub/katello-ca-consumer-#{host_inventory['fqdn']}-1.0-4.src.rpm") do + it { should_not exist } + end + + describe file("/var/www/html/pub/katello-ca-consumer-#{host_inventory['fqdn']}-1.0-10.src.rpm") do + it { should_not exist } + end + + describe file('/var/www/html/pub/katello-ca-consumer-latest.noarch.rpm') do + it { should_not exist } + end + + describe file('/var/www/html/pub/katello-rhsm-consumer') do + it { should_not exist } + end + end end diff --git a/spec/classes/foreman_proxy_content_spec.rb b/spec/classes/foreman_proxy_content_spec.rb index 2ff1d7ad..ddcf6654 100644 --- a/spec/classes/foreman_proxy_content_spec.rb +++ b/spec/classes/foreman_proxy_content_spec.rb @@ -261,6 +261,24 @@ class { 'certs': it { is_expected.not_to compile.with_all_deps } end end + + context 'with boostrap_rpm false' do + let(:params) do + { + ensure_bootstrap_rpm: 'absent' + } + end + + it { is_expected.to compile.with_all_deps } + it do + is_expected.to contain_package('katello-client-bootstrap') + .with_ensure('absent') + end + it do + is_expected.to contain_class('foreman_proxy_content::bootstrap_rpm') + .with_ensure('absent') + end + end end end end