katello 4.17.0.rc2 → 4.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of katello might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2afedac5306ba09124189f94d28c8d814149fb18cd44924ea1c04e6d07c3026a
4
- data.tar.gz: 0fd120dcf0ac4cee8c6b004cfe5c3e6dca48f1be36dd9125b4e85d75096b3952
3
+ metadata.gz: 522d23e5be01ddc111e940e111a09d858a2dfa686c9cbb17ac0c883b14f224bc
4
+ data.tar.gz: 6f6dc2887f0eafdd0500edeb62792318da9bd25612565fcef2027423b364d2c5
5
5
  SHA512:
6
- metadata.gz: d5e07a1200cbd4053f0b18470b26179f27f47cf9aa15578a2b9481a3b16783a8d5a8385926fa5ee0c9c16b66d72f2c669fe8e8dd4c9f733b5979ca7393936537
7
- data.tar.gz: df56f994d4e8830c4f8aee4fd22e3f9614e098402ac0891db2cbfa615d9117d315a2ffc45d452422252b1b4563481ee2b8717e99f8252ccc2fc28c1819b81b03
6
+ metadata.gz: 597e47e1205993f0223f0151f24accea76c030eb0a98536f9b9e05cb1d1f49341c69543bf79a4781b700fa948f6df53769dbaa44d6c54399f504362bd1729b68
7
+ data.tar.gz: 263fe1e31f8469f6a7ea74c932c1fa8bab9769200d72aca0f3a94c47d5772a4a5c8c10661ea1abe0bebdcc53b416584fa17a98c1c12e1a94e8519eab4fbf93b9
@@ -560,6 +560,8 @@ module Katello
560
560
 
561
561
  def check_blob
562
562
  pulp_response = Resources::Registry::Proxy.get(@_request.fullpath, 'Accept' => request.headers['Accept'])
563
+ response.headers['Content-Type'] = pulp_response.headers[:content_type] if pulp_response.headers[:content_type]
564
+ response.headers['Content-Length'] = pulp_response.headers[:content_length] if pulp_response.headers[:content_length]
563
565
  head pulp_response.code
564
566
  end
565
567
 
@@ -25,6 +25,11 @@ module Katello
25
25
  SQL
26
26
 
27
27
  query = Katello::Repository.readable.in_default_view.in_organization(@organization)
28
+ if @content_view.rolling
29
+ # Exclude container push repositories
30
+ query = query.joins(:root).where(katello_root_repositories: { is_container_push: false })
31
+ end
32
+
28
33
  query = query.with_type(params[:content_type]) if params[:content_type]
29
34
  # Use custom sort to perform the join and order since we need to order by specific content_view
30
35
  # and the ORDER BY query needs access to the katello_content_view_repositories table
@@ -719,6 +719,7 @@ Alternatively, use the 'force' parameter to regenerate metadata locally. On the
719
719
  if is_available_for
720
720
  params[:library] = true
721
721
  sub_query = ContentViewRepository.where(:content_view_id => content_view_id).pluck(:repository_id)
722
+ sub_query += Repository.where(root: RootRepository.where(is_container_push: true)).pluck(:id) if ContentView.find(content_view_id).rolling
722
723
  query = query.where("#{Repository.table_name}.id not in (#{sub_query.join(',')})") unless sub_query.empty?
723
724
  elsif environment_id
724
725
  version = ContentViewVersion.in_environment(environment_id).where(:content_view_id => content_view_id)
@@ -6,6 +6,11 @@ module Actions
6
6
  content_view.save!
7
7
  if content_view.rolling?
8
8
  plan_action(AddToEnvironment, content_view.create_new_version, content_view.organization.library)
9
+ repository_ids = content_view.repository_ids
10
+ if repository_ids.any?
11
+ content_view.reload
12
+ plan_action(AddRollingRepoClone, content_view, repository_ids)
13
+ end
9
14
  end
10
15
  end
11
16
 
@@ -88,6 +88,9 @@ module Actions
88
88
  def handle_custom_content(repository, remove_from_content_view_versions)
89
89
  #if this is the last instance of a custom repo or a deb repo using structured APT, destroy the content
90
90
  if remove_from_content_view_versions || repository.root.repositories.where.not(id: repository.id).empty? || repository.deb_using_structured_apt?
91
+ # Never destroy content for structured apt rolling repo clones, because it belongs to the library instance
92
+ return if repository.deb_using_structured_apt? && repository.content_view.rolling?
93
+
91
94
  plan_action(::Actions::Katello::Product::ContentDestroy, repository)
92
95
  end
93
96
  end
@@ -18,6 +18,7 @@ module Katello
18
18
  validates_lengths_from_database
19
19
  validates :repository_id, :uniqueness => {:scope => :content_view_id, :message => N_("already belongs to the content view") }
20
20
  validate :content_view_composite
21
+ validate :content_view_rolling
21
22
  validate :ensure_repository_type
22
23
  validate :check_repo_membership
23
24
 
@@ -29,6 +30,12 @@ module Katello
29
30
  end
30
31
  end
31
32
 
33
+ def content_view_rolling
34
+ if content_view.rolling? && repository.root.is_container_push?
35
+ errors.add(:base, _("Cannot add container push repositories to a rolling content view"))
36
+ end
37
+ end
38
+
32
39
  def ensure_repository_type
33
40
  unless allowed_repository_types.include?(repository.content_type)
34
41
  errors.add(:base, _("Cannot add %s repositories to a content view.") % repository.content_type)
@@ -19,23 +19,15 @@ template_inputs:
19
19
  - hosts: all
20
20
  tasks:
21
21
  <%= indent(4) { snippet('check_bootc_status') } %>
22
- - name: Enable bootc overlay
23
- shell:
24
- cmd: 'bootc usr-overlay'
25
- register: out
26
- ignore_errors: true
27
- when: is_bootc_host
28
- - debug: var=out
29
- - name: Install packages via dnf for image mode machines
30
- package:
31
- use: 'dnf'
32
22
  <% if package_names.empty? -%>
33
- name: []
23
+ - name: Install all packages transiently for image mode machines
24
+ shell: "dnf --transient install -y '*'"
25
+ when: is_bootc_host
34
26
  <% else -%>
35
- name: <%= indent(10) { to_yaml(package_names).gsub(/---/, "") } -%>
36
- state: present
37
- <% end -%>
27
+ - name: Install packages transiently for image mode machines
28
+ shell: "dnf --transient install -y <%= package_names.join(' ') %>"
38
29
  when: is_bootc_host
30
+ <% end -%>
39
31
  - name: Install packages normally
40
32
  package:
41
33
  <% if package_names.empty? -%>
@@ -19,21 +19,8 @@ template_inputs:
19
19
  - hosts: all
20
20
  tasks:
21
21
  <%= indent(4) { snippet('check_bootc_status') } %>
22
- - name: Enable bootc overlay
23
- shell:
24
- cmd: 'bootc usr-overlay'
25
- register: out
26
- ignore_errors: true
27
- when: is_bootc_host
28
- - debug: var=out
29
- - name: Remove packages via dnf for image mode machines
30
- package:
31
- name:
32
- <% package_names.each do |package_name| -%>
33
- - <%= package_name %>
34
- <% end -%>
35
- state: absent
36
- use: 'dnf'
22
+ - name: Remove packages transiently for image mode machines
23
+ shell: "dnf --transient remove -y <%= package_names.join(' ') %>"
37
24
  when: is_bootc_host
38
25
  - name: Remove packages normally
39
26
  package:
@@ -28,20 +28,12 @@ template_inputs:
28
28
  - hosts: all
29
29
  tasks:
30
30
  <%= indent(4) { snippet('check_bootc_status') } %>
31
- - name: Enable bootc overlay
32
- shell:
33
- cmd: 'bootc usr-overlay'
34
- register: out
35
- ignore_errors: true
31
+ - name: Update packages transiently for image mode machines
32
+ shell: |
33
+ dnf --transient install -y <%= package_names.join(' ') %>
34
+ dnf --transient upgrade -y --best <%= package_names.join(' ') %>
36
35
  when: is_bootc_host
37
- - debug: var=out
38
- - name: Install packages via dnf for image mode machines
39
- package:
40
- name: <%= indent(10) { to_yaml(package_names).gsub(/---/, "") } -%>
41
- state: latest
42
- use: 'dnf'
43
- when: is_bootc_host
44
- - name: Install packages normally
36
+ - name: Update packages normally
45
37
  package:
46
38
  name: <%= indent(10) { to_yaml(package_names).gsub(/---/, "") } -%>
47
39
  state: latest
@@ -1,5 +1,23 @@
1
1
  class KatelloRecreateEvrConstructs < ActiveRecord::Migration[6.1]
2
+ def fix_installed_package_dupes
3
+ # Remove duplicate installed packages and host installed packages.
4
+ duplicated_nvreas = ::Katello::InstalledPackage.group(:nvrea).having('count(*) > 1').pluck(:nvrea)
5
+ duplicated_nvreas.each do |nvrea|
6
+ packages_relation = ::Katello::InstalledPackage.where(nvrea: nvrea).order(:id)
7
+ original_package = packages_relation.first
8
+ duplicate_package_ids = packages_relation.offset(1).pluck(:id)
9
+ hosts_with_original_package = ::Katello::HostInstalledPackage.where(installed_package_id: original_package.id).pluck(:host_id)
10
+ if hosts_with_original_package.any?
11
+ ::Katello::HostInstalledPackage.where(host_id: hosts_with_original_package, installed_package_id: duplicate_package_ids).delete_all
12
+ end
13
+ ::Katello::HostInstalledPackage.where(installed_package_id: duplicate_package_ids).update_all(installed_package_id: original_package.id)
14
+ ::Katello::InstalledPackage.where(id: duplicate_package_ids).delete_all
15
+ end
16
+ end
17
+
2
18
  def up
19
+ fix_installed_package_dupes
20
+
3
21
  if !extension_enabled?('evr')
4
22
  return
5
23
  else
@@ -147,6 +165,8 @@ class KatelloRecreateEvrConstructs < ActiveRecord::Migration[6.1]
147
165
  rpmver_array(coalesce(release,'empty'))::evr_array_item[])::evr_t);
148
166
  SQL
149
167
 
168
+ add_index :katello_rpms, [:name, :arch, :evr]
169
+
150
170
  create_trigger :evr_insert_trigger_katello_rpms, on: :katello_rpms
151
171
  create_trigger :evr_update_trigger_katello_rpms, on: :katello_rpms
152
172
  create_trigger :evr_insert_trigger_katello_installed_packages, on: :katello_installed_packages
@@ -0,0 +1,14 @@
1
+ class AddMissingRpmsEvrIndex < ActiveRecord::Migration[7.0]
2
+ def up
3
+ # Re-add the katello_rpms EVR index dropped erroneously by 20240924161240.
4
+ unless index_exists?(:katello_rpms, [:name, :arch, :evr])
5
+ add_index :katello_rpms, [:name, :arch, :evr]
6
+ end
7
+ end
8
+
9
+ def down
10
+ if index_exists?(:katello_rpms, [:name, :arch, :evr])
11
+ remove_index :katello_rpms, [:name, :arch, :evr]
12
+ end
13
+ end
14
+ end
@@ -1,3 +1,3 @@
1
1
  module Katello
2
- VERSION = "4.17.0.rc2".freeze
2
+ VERSION = "4.17.1".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: katello
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.17.0.rc2
4
+ version: 4.17.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - N/A
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-06-02 00:00:00.000000000 Z
11
+ date: 2025-07-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -2160,6 +2160,7 @@ files:
2160
2160
  - db/migrate/20250215143303_drop_katello_yum_metadata_file.rb
2161
2161
  - db/migrate/20250409120843_fix_file_download_policy.rb
2162
2162
  - db/migrate/20250410155300_change_ansible_templates_category.rb
2163
+ - db/migrate/20250714190050_add_missing_rpms_evr_index.rb
2163
2164
  - db/seeds.d/101-locations.rb
2164
2165
  - db/seeds.d/102-organizations.rb
2165
2166
  - db/seeds.d/104-proxy.rb
@@ -5544,11 +5545,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
5544
5545
  version: '4'
5545
5546
  required_rubygems_version: !ruby/object:Gem::Requirement
5546
5547
  requirements:
5547
- - - ">"
5548
+ - - ">="
5548
5549
  - !ruby/object:Gem::Version
5549
- version: 1.3.1
5550
+ version: '0'
5550
5551
  requirements: []
5551
- rubygems_version: 3.2.33
5552
+ rubygems_version: 3.5.22
5552
5553
  signing_key:
5553
5554
  specification_version: 4
5554
5555
  summary: Content and Subscription Management plugin for Foreman