katello 4.11.0.rc2 → 4.11.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of katello might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/app/controllers/katello/api/rhsm/candlepin_proxies_controller.rb +15 -2
- data/app/lib/katello/util/cvecf_migrator.rb +34 -0
- data/app/models/katello/concerns/host_managed_extensions.rb +9 -4
- data/app/models/katello/concerns/smart_proxy_extensions.rb +21 -0
- data/app/models/katello/content.rb +1 -1
- data/app/services/katello/product_content_importer.rb +5 -45
- data/db/migrate/20220929204746_add_content_view_environment_content_facet.rb +37 -4
- data/lib/katello/version.rb +1 -1
- data/lib/katello.rb +1 -0
- data/package.json +1 -1
- data/webpack/components/Content/Details/ContentDetails.js +3 -3
- data/webpack/components/Content/Details/__tests__/__snapshots__/ContentDetails.test.js.snap +0 -4
- data/webpack/components/SelectOrg/SetOrganization.js +0 -1
- data/webpack/components/TooltipButton/TooltipButton.js +2 -2
- data/webpack/components/TooltipButton/__snapshots__/TooltipButton.test.js.snap +0 -3
- data/webpack/components/pf3Table/components/Table.js +0 -1
- data/webpack/scenes/ContentViews/Details/Repositories/RepoIcon.js +1 -1
- data/webpack/scenes/RedHatRepositories/__tests__/__snapshots__/RedHatRepositoriesPage.test.js.snap +0 -1
- data/webpack/scenes/RedHatRepositories/components/RecommendedRepositorySetsToggler.js +0 -1
- data/webpack/scenes/RedHatRepositories/components/RepositorySetRepositories.js +1 -1
- data/webpack/scenes/RedHatRepositories/components/__tests__/__snapshots__/RecommendedRepositorySetsToggler.test.js.snap +0 -1
- data/webpack/scenes/RedHatRepositories/components/__tests__/__snapshots__/RepositorySetRepositories.test.js.snap +0 -1
- data/webpack/scenes/RedHatRepositories/helpers.js +0 -2
- data/webpack/scenes/SmartProxy/AdditionalCapsuleContent.js +17 -9
- data/webpack/scenes/SmartProxy/ExpandedSmartProxyRepositories.js +3 -3
- data/webpack/scenes/SmartProxy/__tests__/SmartProxyContentTest.fixtures.json +7 -7
- data/webpack/scenes/Subscriptions/Details/SubscriptionDetails.js +4 -4
- data/webpack/scenes/Subscriptions/Details/__tests__/__snapshots__/SubscriptionDetails.test.js.snap +0 -4
- data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.js +4 -8
- data/webpack/scenes/Subscriptions/SubscriptionsPage.js +1 -1
- data/webpack/scenes/Subscriptions/UpstreamSubscriptions/UpstreamSubscriptionsPage.js +1 -2
- data/webpack/scenes/Subscriptions/UpstreamSubscriptions/__tests__/__snapshots__/UpstreamSubscriptionsPage.test.js.snap +0 -2
- data/webpack/scenes/Subscriptions/__tests__/__snapshots__/SubscriptionsPage.test.js.snap +0 -1
- data/webpack/scenes/Subscriptions/components/SubscriptionsToolbar/SubscriptionsToolbar.js +2 -5
- data/webpack/scenes/Subscriptions/components/SubscriptionsToolbar/__snapshots__/SubscriptionsToolbar.test.js.snap +0 -10
- metadata +5 -5
- data/app/views/katello/api/v2/content_export_incrementals/repository.json.rabl +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 338456e8404dcc70c487c85c1d1ce10a52faf40c5ba3d19b6969250ec977cd93
|
4
|
+
data.tar.gz: eb9e87fddfde9dbe5c5cf8c094b2fad23d2128e96b360d2b2de0ee7a6e00e8c4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 73da7aa80f8aca8c4ffb4461d43d555418b13a1cbb4deddc13a3dda620a5572ae31049d890e03d9743b3854d0dc3027de8ac0933956c02250a80c679eb07a980
|
7
|
+
data.tar.gz: bbd2fa44e5938e913d958f89190d6091ae6d00a1a156f553ce1c5ddbd243f20872f48c340fb0eb9eca0c6d5e0f0b23820d9bc750dd0de6b3571b0578b716b1d7
|
@@ -276,7 +276,7 @@ module Katello
|
|
276
276
|
end
|
277
277
|
|
278
278
|
def get_content_source_id(hostname)
|
279
|
-
proxies = SmartProxy.authorized.filter do |sp|
|
279
|
+
proxies = SmartProxy.unscoped.authorized.filter do |sp|
|
280
280
|
hostname == URI.parse(sp.url).hostname
|
281
281
|
end
|
282
282
|
return nil if proxies.length != 1
|
@@ -474,7 +474,20 @@ module Katello
|
|
474
474
|
def update_host_registered_through(host, headers)
|
475
475
|
parent_host = get_parent_host(headers)
|
476
476
|
host.subscription_facet.update_attribute(:registered_through, parent_host)
|
477
|
-
|
477
|
+
set_host_content_source(host, parent_host)
|
478
|
+
end
|
479
|
+
|
480
|
+
def registering_thru_load_balancer?(hostname)
|
481
|
+
::SmartProxy.behind_load_balancer(hostname).present?
|
482
|
+
end
|
483
|
+
|
484
|
+
def set_host_content_source(host, content_source_hostname)
|
485
|
+
content_source_id = get_content_source_id(content_source_hostname)
|
486
|
+
if registering_thru_load_balancer?(content_source_hostname)
|
487
|
+
Rails.logger.info "Host %s registered through load balancer %s" % [host.name, content_source_hostname]
|
488
|
+
content_source_id = ::SmartProxy.behind_load_balancer(content_source_hostname)&.first&.id
|
489
|
+
end
|
490
|
+
Rails.logger.warn "Host %s registered through unknown proxy %s" % [host.name, content_source_hostname] if content_source_id.nil?
|
478
491
|
host.content_facet.update_attribute(:content_source_id, content_source_id)
|
479
492
|
end
|
480
493
|
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Katello
|
2
|
+
module Util
|
3
|
+
class CVECFMigrator # used in db/migrate/20220929204746_add_content_view_environment_content_facet.rb
|
4
|
+
def execute!
|
5
|
+
hosts_with_no_cve = []
|
6
|
+
hosts_with_missing_cve = []
|
7
|
+
|
8
|
+
::Host::Managed.all.each do |host|
|
9
|
+
next if host.content_facet.blank?
|
10
|
+
if ::Katello::ContentView.exists?(id: host.content_facet.content_view_id) && ::Katello::KTEnvironment.exists?(host.content_facet.lifecycle_environment_id)
|
11
|
+
cve = ::Katello::ContentViewEnvironment.find_by(content_view_id: host.content_facet.content_view_id, environment_id: host.content_facet.lifecycle_environment_id)
|
12
|
+
if cve.blank?
|
13
|
+
hosts_with_no_cve << host
|
14
|
+
end
|
15
|
+
else
|
16
|
+
hosts_with_missing_cve << host
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
if hosts_with_missing_cve.present? || hosts_with_no_cve.present?
|
21
|
+
Rails.logger.warn "Found #{hosts_with_no_cve.count} hosts whose lifecycle environment does not have a corresponding ContentViewEnvironment"
|
22
|
+
Rails.logger.warn "Found #{hosts_with_missing_cve.count} hosts whose content facet is missing either content_view_id or lifecycle_environment_id"
|
23
|
+
Rails.logger.info "You may want to change the content view / lifecycle environment for these hosts manually."
|
24
|
+
end
|
25
|
+
(hosts_with_no_cve + hosts_with_missing_cve).each do |host|
|
26
|
+
default_content_view = host.organization.default_content_view
|
27
|
+
library = host.organization.library
|
28
|
+
Rails.logger.info "Updating host #{host.name} with default content_view_id and lifecycle_environment_id"
|
29
|
+
host.content_facet&.update_columns(content_view_id: default_content_view&.id, lifecycle_environment_id: library&.id)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -91,12 +91,17 @@ module Katello
|
|
91
91
|
|
92
92
|
def remote_execution_proxies(provider, *_rest)
|
93
93
|
proxies = super
|
94
|
-
|
95
|
-
|
94
|
+
name = subscription_facet&.registered_through
|
95
|
+
result = []
|
96
|
+
if name.present?
|
97
|
+
result = SmartProxy.with_features(provider)
|
96
98
|
.authorized
|
97
99
|
.where(name: name)
|
100
|
+
if result.blank?
|
101
|
+
result = SmartProxy.authorized.behind_load_balancer(name)
|
102
|
+
end
|
98
103
|
end
|
99
|
-
proxies[:registered_through] =
|
104
|
+
proxies[:registered_through] = result
|
100
105
|
proxies
|
101
106
|
end
|
102
107
|
end
|
@@ -193,7 +198,7 @@ module Katello
|
|
193
198
|
property :content_views, 'ContentView', desc: 'Returns content views associated with the host'
|
194
199
|
property :installed_packages, array_of: 'InstalledPackage', desc: 'Returns a list of packages installed on the host'
|
195
200
|
end
|
196
|
-
end
|
201
|
+
end # of included block
|
197
202
|
|
198
203
|
def check_host_registration
|
199
204
|
if subscription_facet
|
@@ -68,6 +68,18 @@ module Katello
|
|
68
68
|
}
|
69
69
|
scope :with_content, -> { with_features(PULP_FEATURE, PULP_NODE_FEATURE, PULP3_FEATURE) }
|
70
70
|
|
71
|
+
def self.load_balanced
|
72
|
+
proxies = unscoped.with_content # load balancing is only supported for pulp proxies
|
73
|
+
ids = proxies.select { |proxy| proxy.load_balanced? }.map(&:id)
|
74
|
+
proxies.where(id: ids)
|
75
|
+
end
|
76
|
+
|
77
|
+
def self.behind_load_balancer(load_balancer_hostname)
|
78
|
+
proxies = unscoped.with_content
|
79
|
+
ids = proxies.select { |proxy| proxy.load_balanced? && proxy.registration_host == load_balancer_hostname }.map(&:id)
|
80
|
+
proxies.where(id: ids)
|
81
|
+
end
|
82
|
+
|
71
83
|
def self.with_repo(repo)
|
72
84
|
joins(:capsule_lifecycle_environments).
|
73
85
|
where("#{Katello::CapsuleLifecycleEnvironment.table_name}.lifecycle_environment_id" => repo.environment_id)
|
@@ -121,6 +133,15 @@ module Katello
|
|
121
133
|
SmartProxy.joins(:smart_proxy_alternate_content_sources).where('katello_smart_proxy_alternate_content_sources.smart_proxy_id' => self.id)
|
122
134
|
end
|
123
135
|
|
136
|
+
def registration_host
|
137
|
+
url = self.setting('Registration', 'registration_url').presence || self.url
|
138
|
+
URI.parse(url).host
|
139
|
+
end
|
140
|
+
|
141
|
+
def load_balanced?
|
142
|
+
URI.parse(self.url).host != self.registration_host
|
143
|
+
end
|
144
|
+
|
124
145
|
def update_content_counts!
|
125
146
|
# {:content_view_versions=>{87=>{:repositories=>{1=>{:metadata=>{},:counts=>{:rpms=>98, :module_streams=>9898}}}}}
|
126
147
|
new_content_counts = { content_view_versions: {} }
|
@@ -50,7 +50,7 @@ module Katello
|
|
50
50
|
cp_products = ::Katello::Resources::Candlepin::Product.all(org.label, [:id, :productContent])
|
51
51
|
product_hash = cp_products.group_by { |prod| prod['id'] }
|
52
52
|
|
53
|
-
prod_content_importer = Katello::ProductContentImporter.new(
|
53
|
+
prod_content_importer = Katello::ProductContentImporter.new(cp_products)
|
54
54
|
org.products.each do |product|
|
55
55
|
product_json = product_hash[product.cp_id]&.first
|
56
56
|
|
@@ -21,46 +21,6 @@ module Katello
|
|
21
21
|
# "enabled":false
|
22
22
|
# }
|
23
23
|
#
|
24
|
-
#Example cp_products json structure (key:values where values are arrays and productContent is an array of contents inside value array)
|
25
|
-
# {
|
26
|
-
# "230"=>
|
27
|
-
# [{"id"=>"230",
|
28
|
-
# "productContent"=>
|
29
|
-
# [{"content"=>
|
30
|
-
# {"created"=>"2023-11-01T18:02:54+0000",
|
31
|
-
# "updated"=>"2023-11-01T18:02:54+0000",
|
32
|
-
# "uuid"=>"ff8080818b715841018b8c0d76d90190",
|
33
|
-
# "id"=>"3996",
|
34
|
-
# "type"=>"yum",
|
35
|
-
# "label"=>"rhel-7-server-rt-htb-rpms",
|
36
|
-
# "name"=>"Red Hat Enterprise Linux for Real Time HTB (RHEL 7 Server) (RPMs)",
|
37
|
-
# "vendor"=>"Red Hat",
|
38
|
-
# "contentUrl"=>"/content/htb/rhel/server/7/$basearch/rt/os",
|
39
|
-
# "requiredTags"=>"rhel-7-server",
|
40
|
-
# "releaseVer"=>nil,
|
41
|
-
# "gpgUrl"=>"file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-beta,file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release",
|
42
|
-
# "modifiedProductIds"=>[],
|
43
|
-
# "arches"=>nil,
|
44
|
-
# "metadataExpire"=>1},
|
45
|
-
# "enabled"=>false},
|
46
|
-
# {"content"=>
|
47
|
-
# {"created"=>"2023-11-01T18:02:54+0000",
|
48
|
-
# "updated"=>"2023-11-01T18:02:54+0000",
|
49
|
-
# "uuid"=>"ff8080818b715841018b8c0d76d90181",
|
50
|
-
# "id"=>"2165",
|
51
|
-
# "type"=>"yum",
|
52
|
-
# "label"=>"rhel-7-server-optional-htb-debug-rpms",
|
53
|
-
# "name"=>"Red Hat Enterprise Linux 7 Server - Optional HTB (Debug RPMs)",
|
54
|
-
# "vendor"=>"Red Hat",
|
55
|
-
# "contentUrl"=>"/content/htb/rhel/server/7/$basearch/optional/debug",
|
56
|
-
# "requiredTags"=>"rhel-7-server",
|
57
|
-
# "releaseVer"=>nil,
|
58
|
-
# "gpgUrl"=>"file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-beta,file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release",
|
59
|
-
# "modifiedProductIds"=>[],
|
60
|
-
# "arches"=>nil,
|
61
|
-
# "metadataExpire"=>1},
|
62
|
-
# "enabled"=>false}]}]
|
63
|
-
# }
|
64
24
|
attr_reader :content_url_updated
|
65
25
|
|
66
26
|
def initialize(cp_products = [])
|
@@ -76,13 +36,13 @@ module Katello
|
|
76
36
|
end
|
77
37
|
|
78
38
|
def find_product_for_content(content_id)
|
79
|
-
|
80
|
-
|
81
|
-
prod_json
|
82
|
-
product_content_json
|
39
|
+
prod = @cp_products.find do |prod_json|
|
40
|
+
next if prod_json&.[]('productContent').blank?
|
41
|
+
prod_json['productContent'].any? do |product_content_json|
|
42
|
+
product_content_json&.dig("content", "id") == content_id
|
83
43
|
end
|
84
44
|
end
|
85
|
-
::Katello::Product.find_by(cp_id:
|
45
|
+
::Katello::Product.find_by(cp_id: prod["id"]) if prod
|
86
46
|
end
|
87
47
|
|
88
48
|
def fetch_product_contents_to_move(product, prod_contents_json)
|
@@ -8,12 +8,13 @@ class AddContentViewEnvironmentContentFacet < ActiveRecord::Migration[6.1]
|
|
8
8
|
t.references :content_view_environment, :null => false, :index => false, :foreign_key => { :to_table => 'katello_content_view_environments' }
|
9
9
|
t.references :content_facet, :null => false, :index => false, :foreign_key => { :to_table => 'katello_content_facets' }
|
10
10
|
end
|
11
|
+
::Katello::Util::CVECFMigrator.new.execute!
|
11
12
|
FakeContentFacet.all.each do |content_facet|
|
12
13
|
cve_id = ::Katello::KTEnvironment.find(content_facet.lifecycle_environment_id)
|
13
14
|
.content_view_environments
|
14
15
|
.find_by(content_view_id: content_facet.content_view_id)
|
15
|
-
|
16
|
-
unless ::Katello::ContentViewEnvironmentContentFacet.create(
|
16
|
+
&.id
|
17
|
+
unless cve_id.present? && ::Katello::ContentViewEnvironmentContentFacet.create(
|
17
18
|
content_facet_id: content_facet.id,
|
18
19
|
content_view_environment_id: cve_id
|
19
20
|
)
|
@@ -39,14 +40,46 @@ class AddContentViewEnvironmentContentFacet < ActiveRecord::Migration[6.1]
|
|
39
40
|
|
40
41
|
::Katello::ContentViewEnvironmentContentFacet.all.each do |cvecf|
|
41
42
|
content_facet = cvecf.content_facet
|
42
|
-
|
43
|
-
|
43
|
+
cve = cvecf.content_view_environment
|
44
|
+
default_org = cve.environment&.organization
|
45
|
+
default_cv_id = default_org&.default_content_view&.id
|
46
|
+
default_lce_id = default_org&.library&.id
|
47
|
+
cv_id = cvecf.content_view_environment.content_view_id || default_cv_id
|
48
|
+
lce_id = cvecf.content_view_environment.environment_id || default_lce_id
|
49
|
+
say "Updating content_facet #{content_facet.id} with cv_id #{cv_id} and lce_id #{lce_id}"
|
50
|
+
content_facet.content_view_id = cv_id
|
51
|
+
content_facet.lifecycle_environment_id = lce_id
|
44
52
|
content_facet.save(validate: false)
|
45
53
|
end
|
46
54
|
|
55
|
+
ensure_no_null_cv_lce
|
47
56
|
change_column :katello_content_facets, :content_view_id, :integer, :null => false
|
48
57
|
change_column :katello_content_facets, :lifecycle_environment_id, :integer, :null => false
|
49
58
|
|
50
59
|
drop_table :katello_content_view_environment_content_facets
|
51
60
|
end
|
61
|
+
|
62
|
+
def ensure_no_null_cv_lce
|
63
|
+
# The following is to try to prevent PG::NotNullViolation: ERROR: column "content_view_id" contains null values
|
64
|
+
# since we add null constraints to the columns in the next step
|
65
|
+
content_facets_without_cv = ::Katello::Host::ContentFacet.where(content_view_id: nil)
|
66
|
+
if content_facets_without_cv.any?
|
67
|
+
say "Found #{content_facets_without_cv.count} content_facets with nil content_view_id"
|
68
|
+
content_facets_without_cv.each do |content_facet|
|
69
|
+
say "reassigning bad content_facet #{content_facet.id} to default content view"
|
70
|
+
content_facet.content_view_id = content_facet.host&.organization&.default_content_view&.id
|
71
|
+
content_facet.save(validate: false)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
content_facets_without_lce = ::Katello::Host::ContentFacet.where(lifecycle_environment_id: nil)
|
76
|
+
if content_facets_without_lce.any?
|
77
|
+
say "Found #{content_facets_without_lce.count} content_facets with nil lifecycle_environment_id"
|
78
|
+
content_facets_without_lce.each do |content_facet|
|
79
|
+
say "reassigning bad content_facet #{content_facet.id} to default lifecycle environment"
|
80
|
+
content_facet.lifecycle_environment_id = content_facet.host&.organization&.library&.id
|
81
|
+
content_facet.save(validate: false)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
52
85
|
end
|
data/lib/katello/version.rb
CHANGED
data/lib/katello.rb
CHANGED
data/package.json
CHANGED
@@ -31,7 +31,7 @@
|
|
31
31
|
"@testing-library/user-event": "^13.5.0",
|
32
32
|
"@theforeman/builder": ">= 6.0.0",
|
33
33
|
"@theforeman/find-foreman": "^4.8.0",
|
34
|
-
"@theforeman/eslint-plugin-rules": "^12.0
|
34
|
+
"@theforeman/eslint-plugin-rules": "^12.2.0",
|
35
35
|
"axios-mock-adapter": "^1.10.0",
|
36
36
|
"eslint": "^6.2.2",
|
37
37
|
"eslint-config-airbnb": "^16.0.0",
|
@@ -10,7 +10,7 @@ const ContentDetails = (props) => {
|
|
10
10
|
|
11
11
|
const tabHeaders = () => {
|
12
12
|
const tabs = schema.map(node => (
|
13
|
-
<NavItem key={node.key} eventKey={node.key}
|
13
|
+
<NavItem key={node.key} eventKey={node.key}>
|
14
14
|
<div>{node.tabHeader}</div>
|
15
15
|
</NavItem>
|
16
16
|
));
|
@@ -40,12 +40,12 @@ const ContentDetails = (props) => {
|
|
40
40
|
<Grid>
|
41
41
|
<Row>
|
42
42
|
<Col sm={12}>
|
43
|
-
<Nav id="content-nav-container" bsClass="nav nav-tabs"
|
43
|
+
<Nav id="content-nav-container" bsClass="nav nav-tabs">
|
44
44
|
{schema && tabHeaders()}
|
45
45
|
</Nav>
|
46
46
|
</Col>
|
47
47
|
</Row>
|
48
|
-
<TabContent animation={false}
|
48
|
+
<TabContent animation={false}>
|
49
49
|
{schema && tabPanes()}
|
50
50
|
</TabContent>
|
51
51
|
</Grid>
|
@@ -35,7 +35,6 @@ exports[`Content Details Info should render and contain appropriate components 1
|
|
35
35
|
bsClass="nav nav-tabs"
|
36
36
|
id="content-nav-container"
|
37
37
|
justified={false}
|
38
|
-
ouiaId="content-details-nav"
|
39
38
|
pullLeft={false}
|
40
39
|
pullRight={false}
|
41
40
|
stacked={false}
|
@@ -45,7 +44,6 @@ exports[`Content Details Info should render and contain appropriate components 1
|
|
45
44
|
disabled={false}
|
46
45
|
eventKey={1}
|
47
46
|
key="1"
|
48
|
-
ouiaId="1-nav-item"
|
49
47
|
>
|
50
48
|
<div>
|
51
49
|
Details
|
@@ -56,7 +54,6 @@ exports[`Content Details Info should render and contain appropriate components 1
|
|
56
54
|
disabled={false}
|
57
55
|
eventKey={2}
|
58
56
|
key="2"
|
59
|
-
ouiaId="2-nav-item"
|
60
57
|
>
|
61
58
|
<div>
|
62
59
|
Repositories
|
@@ -70,7 +67,6 @@ exports[`Content Details Info should render and contain appropriate components 1
|
|
70
67
|
bsClass="tab"
|
71
68
|
componentClass="div"
|
72
69
|
mountOnEnter={false}
|
73
|
-
ouiaId="content-details-tab-content"
|
74
70
|
unmountOnExit={false}
|
75
71
|
>
|
76
72
|
<TabPane
|
@@ -6,7 +6,7 @@ import './TooltipButton.scss';
|
|
6
6
|
const TooltipButton = ({
|
7
7
|
disabled, title, tooltipText, tooltipId, tooltipPlacement, renderedButton, ...props
|
8
8
|
}) => {
|
9
|
-
if (!disabled) return renderedButton || (<Button {...props}
|
9
|
+
if (!disabled) return renderedButton || (<Button {...props}>{title}</Button>);
|
10
10
|
return (
|
11
11
|
<OverlayTrigger
|
12
12
|
placement={tooltipPlacement}
|
@@ -14,7 +14,7 @@ const TooltipButton = ({
|
|
14
14
|
overlay={<Tooltip id={tooltipId}>{tooltipText}</Tooltip>}
|
15
15
|
>
|
16
16
|
<div className="tooltip-button-helper">
|
17
|
-
{renderedButton || (<Button {...props} disabled
|
17
|
+
{renderedButton || (<Button {...props} disabled>{title}</Button>)}
|
18
18
|
</div>
|
19
19
|
</OverlayTrigger>
|
20
20
|
);
|
@@ -30,7 +30,6 @@ exports[`TooltipButton renders disabled TooltipButton 1`] = `
|
|
30
30
|
bsClass="btn"
|
31
31
|
bsStyle="default"
|
32
32
|
disabled={true}
|
33
|
-
ouiaId="tooltip-disabled-button"
|
34
33
|
>
|
35
34
|
some-title
|
36
35
|
</Button>
|
@@ -74,7 +73,6 @@ exports[`TooltipButton renders enabled TooltipButton 1`] = `
|
|
74
73
|
bsClass="btn"
|
75
74
|
bsStyle="default"
|
76
75
|
disabled={false}
|
77
|
-
ouiaId="tooltip-button"
|
78
76
|
>
|
79
77
|
some-title
|
80
78
|
</Button>
|
@@ -89,6 +87,5 @@ exports[`TooltipButton renders minimal TooltipButton 1`] = `
|
|
89
87
|
bsClass="btn"
|
90
88
|
bsStyle="default"
|
91
89
|
disabled={false}
|
92
|
-
ouiaId="tooltip-button"
|
93
90
|
/>
|
94
91
|
`;
|
@@ -14,7 +14,7 @@ const RepoIcon = ({ type }) => {
|
|
14
14
|
};
|
15
15
|
const Icon = iconMap[type] || BoxIcon;
|
16
16
|
|
17
|
-
return <Tooltip content={<div>{type}</div>}><Icon /></Tooltip>;
|
17
|
+
return <Tooltip content={<div>{type}</div>}><Icon aria-label={`${type}_type_icon`} /></Tooltip>;
|
18
18
|
};
|
19
19
|
|
20
20
|
RepoIcon.propTypes = {
|
@@ -34,7 +34,6 @@ export const getSetsComponent = (repoSetsState, onPaginationChange) => {
|
|
34
34
|
<ListView>
|
35
35
|
<div className="sticky-pagination">
|
36
36
|
<Pagination
|
37
|
-
ouiaId="repos-pagination"
|
38
37
|
itemCount={itemCount}
|
39
38
|
onChange={onPaginationChange}
|
40
39
|
isCompact
|
@@ -65,7 +64,6 @@ export const getEnabledComponent = (enabledReposState, onPaginationChange) => {
|
|
65
64
|
<ListView>
|
66
65
|
<div className="sticky-pagination sticky-pagination-grey">
|
67
66
|
<Pagination
|
68
|
-
ouiaId="enabled-repos-pagination"
|
69
67
|
isCompact
|
70
68
|
itemCount={itemCount}
|
71
69
|
onChange={onPaginationChange}
|
@@ -1,16 +1,18 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import PropTypes from 'prop-types';
|
3
|
+
import { translate as __ } from 'foremanReact/common/I18n';
|
3
4
|
import ContentConfig from '../Content/ContentConfig';
|
4
5
|
|
5
6
|
const AdditionalCapsuleContent = ({ counts }) => {
|
6
7
|
const {
|
7
8
|
deb: debPackageCount = 0,
|
8
9
|
docker_manifest: dockerManifestCount = 0,
|
10
|
+
docker_manifest_list: dockerManifestListCount = 0,
|
9
11
|
docker_tag: dockerTagCount = 0,
|
10
12
|
file: fileCount = 0,
|
11
13
|
erratum: errataCount = 0,
|
12
14
|
package_group: packageGroup = 0,
|
13
|
-
|
15
|
+
module_stream: moduleStreamCount = 0,
|
14
16
|
} = counts;
|
15
17
|
|
16
18
|
const contentConfigTypes = ContentConfig.filter(({ names: { capsuleCountLabel } }) =>
|
@@ -32,37 +34,42 @@ const AdditionalCapsuleContent = ({ counts }) => {
|
|
32
34
|
<>
|
33
35
|
{errataCount > 0 &&
|
34
36
|
<>
|
35
|
-
{`${errataCount} Errata`}<br />
|
37
|
+
{`${errataCount} ${__('Errata')}`}<br />
|
36
38
|
</>
|
37
39
|
}
|
38
40
|
{moduleStreamCount > 0 &&
|
39
41
|
<>
|
40
|
-
{`${moduleStreamCount} Module streams`}<br />
|
42
|
+
{`${moduleStreamCount} ${__('Module streams')}`}<br />
|
41
43
|
</>
|
42
44
|
}
|
43
45
|
{packageGroup > 0 &&
|
44
46
|
<>
|
45
|
-
{`${packageGroup} Package groups`}<br />
|
47
|
+
{`${packageGroup} ${__('Package groups')}`}<br />
|
46
48
|
</>
|
47
49
|
}
|
48
50
|
{dockerTagCount > 0 &&
|
49
51
|
<>
|
50
|
-
{`${dockerTagCount} Container tags`}<br />
|
52
|
+
{`${dockerTagCount} ${__('Container tags')}`}<br />
|
51
53
|
</>
|
52
54
|
}
|
53
55
|
{dockerManifestCount > 0 &&
|
54
56
|
<>
|
55
|
-
{`${dockerManifestCount} Container manifests`}<br />
|
57
|
+
{`${dockerManifestCount} ${__('Container manifests')}`}<br />
|
56
58
|
</>
|
57
59
|
}
|
60
|
+
{dockerManifestListCount > 0 &&
|
61
|
+
<>
|
62
|
+
{`${dockerManifestListCount} ${__('Container manifest lists')}`}<br />
|
63
|
+
</>
|
64
|
+
}
|
58
65
|
{fileCount > 0 &&
|
59
66
|
<>
|
60
|
-
{`${fileCount} Files`}<br />
|
67
|
+
{`${fileCount} ${__('Files')}`}<br />
|
61
68
|
</>
|
62
69
|
}
|
63
70
|
{debPackageCount > 0 &&
|
64
71
|
<>
|
65
|
-
{`${debPackageCount} Debian packages`}<br />
|
72
|
+
{`${debPackageCount} ${__('Debian packages')}`}<br />
|
66
73
|
</>}
|
67
74
|
{contentConfigTypes?.length > 0 &&
|
68
75
|
contentConfigTypes.map(({ count, pluralLowercase }) => (
|
@@ -78,11 +85,12 @@ AdditionalCapsuleContent.propTypes = {
|
|
78
85
|
counts: PropTypes.shape({
|
79
86
|
deb: PropTypes.number,
|
80
87
|
docker_manifest: PropTypes.number,
|
88
|
+
docker_manifest_list: PropTypes.number,
|
81
89
|
docker_tag: PropTypes.number,
|
82
90
|
file: PropTypes.number,
|
83
91
|
erratum: PropTypes.number,
|
84
92
|
package_group: PropTypes.number,
|
85
|
-
|
93
|
+
module_stream: PropTypes.number,
|
86
94
|
}),
|
87
95
|
};
|
88
96
|
|
@@ -31,8 +31,8 @@ const ExpandedSmartProxyRepositories = ({
|
|
31
31
|
const cellList = [];
|
32
32
|
/* eslint-disable max-len */
|
33
33
|
cellList.push(<DataListCell key={`${repo.id}-name`}><span><a href={`/products/${envContentCounts[repo].metadata.product_id}/repositories/${envContentCounts[repo].metadata.library_instance_id}/`}>{getRepositoryNameById(envContentCounts[repo].metadata.library_instance_id)}</a></span></DataListCell>);
|
34
|
-
cellList.push(<DataListCell key={`${repo.id}-type`}><RepoIcon type={envContentCounts[repo].metadata.content_type} /></DataListCell>);
|
35
|
-
cellList.push(<DataListCell key={`${repo.id}-rpm`}><span>{envContentCounts[repo].counts.rpm ? `${envContentCounts[repo].counts.rpm} Packages` : 'N/A'}</span></DataListCell>);
|
34
|
+
cellList.push(<DataListCell key={`${repo.id}-type`}><RepoIcon type={envContentCounts[repo].metadata.content_type} identifier={repo.id} /></DataListCell>);
|
35
|
+
cellList.push(<DataListCell key={`${repo.id}-rpm`}><span>{envContentCounts[repo].counts.rpm ? `${envContentCounts[repo].counts.rpm} ${__('Packages')}` : 'N/A'}</span></DataListCell>);
|
36
36
|
cellList.push(<DataListCell key={`${repo.id}-count`}><AdditionalCapsuleContent counts={envContentCounts[repo].counts} /></DataListCell>);
|
37
37
|
/* eslint-enable max-len */
|
38
38
|
return cellList;
|
@@ -42,7 +42,7 @@ const ExpandedSmartProxyRepositories = ({
|
|
42
42
|
const cellList = [];
|
43
43
|
/* eslint-disable max-len */
|
44
44
|
cellList.push(<DataListCell key={`${repo.id}-name`}><span><a href={`/products/${repo.product_id}/repositories/${repo.library_id}/`}>{repo.name}</a></span></DataListCell>);
|
45
|
-
cellList.push(<DataListCell key={`${repo.id}-type`}><RepoIcon type={repo.content_type} /></DataListCell>);
|
45
|
+
cellList.push(<DataListCell key={`${repo.id}-type`}><RepoIcon type={repo.content_type} identifier={repo.id} /></DataListCell>);
|
46
46
|
cellList.push(<DataListCell key={`${repo.id}-rpm`}><span><InactiveText text="N/A" /></span></DataListCell>);
|
47
47
|
cellList.push(<DataListCell key={`${repo.id}-count`}><InactiveText text="N/A" /></DataListCell>);
|
48
48
|
/* eslint-enable max-len */
|
@@ -496,7 +496,7 @@
|
|
496
496
|
"package_group": 2,
|
497
497
|
"rpm.packagecategory": 1,
|
498
498
|
"rpm.distribution_tree": 1,
|
499
|
-
"
|
499
|
+
"module_stream": 3
|
500
500
|
},
|
501
501
|
"metadata": {
|
502
502
|
"env_id": 2,
|
@@ -529,7 +529,7 @@
|
|
529
529
|
"counts": {
|
530
530
|
"rpm": 22,
|
531
531
|
"erratum": 7,
|
532
|
-
"
|
532
|
+
"module_stream": 14,
|
533
533
|
"package_group": 2,
|
534
534
|
"rpm.packagecategory": 1,
|
535
535
|
"rpm.distribution_tree": 1,
|
@@ -586,7 +586,7 @@
|
|
586
586
|
"counts": {
|
587
587
|
"rpm": 22,
|
588
588
|
"erratum": 7,
|
589
|
-
"
|
589
|
+
"module_stream": 14,
|
590
590
|
"package_group": 2,
|
591
591
|
"rpm.packagecategory": 1,
|
592
592
|
"rpm.distribution_tree": 1,
|
@@ -638,7 +638,7 @@
|
|
638
638
|
"counts": {
|
639
639
|
"rpm": 22,
|
640
640
|
"erratum": 7,
|
641
|
-
"
|
641
|
+
"module_stream": 14,
|
642
642
|
"package_group": 2,
|
643
643
|
"rpm.packagecategory": 1,
|
644
644
|
"rpm.distribution_tree": 1,
|
@@ -704,7 +704,7 @@
|
|
704
704
|
"counts": {
|
705
705
|
"rpm": 22,
|
706
706
|
"erratum": 7,
|
707
|
-
"
|
707
|
+
"module_stream": 14,
|
708
708
|
"package_group": 2,
|
709
709
|
"rpm.packagecategory": 1,
|
710
710
|
"rpm.distribution_tree": 1,
|
@@ -756,7 +756,7 @@
|
|
756
756
|
"counts": {
|
757
757
|
"rpm": 14,
|
758
758
|
"erratum": 6,
|
759
|
-
"
|
759
|
+
"module_stream": 14,
|
760
760
|
"rpm.distribution_tree": 1,
|
761
761
|
"rpm.modulemd_defaults": 3
|
762
762
|
},
|
@@ -776,7 +776,7 @@
|
|
776
776
|
"counts": {
|
777
777
|
"rpm": 14,
|
778
778
|
"erratum": 6,
|
779
|
-
"
|
779
|
+
"module_stream": 14,
|
780
780
|
"rpm.distribution_tree": 1,
|
781
781
|
"rpm.modulemd_defaults": 3
|
782
782
|
},
|
@@ -78,16 +78,16 @@ class SubscriptionDetails extends Component {
|
|
78
78
|
<TabContainer id="subscription-tabs-container" defaultActiveKey={1}>
|
79
79
|
<div>
|
80
80
|
<LoadingState loading={subscriptionDetails.loading} loadingText={__('Loading')}>
|
81
|
-
<Nav bsClass="nav nav-tabs"
|
82
|
-
<NavItem eventKey={1}
|
81
|
+
<Nav bsClass="nav nav-tabs">
|
82
|
+
<NavItem eventKey={1}>
|
83
83
|
<div>{__('Details')}</div>
|
84
84
|
</NavItem>
|
85
|
-
<NavItem eventKey={2}
|
85
|
+
<NavItem eventKey={2}>
|
86
86
|
<div>{__('Product Content')}</div>
|
87
87
|
</NavItem>
|
88
88
|
</Nav>
|
89
89
|
<Grid bsClass="container-fluid">
|
90
|
-
<TabContent
|
90
|
+
<TabContent animation={false}>
|
91
91
|
<TabPane eventKey={1}>
|
92
92
|
<div>
|
93
93
|
<Row>
|
data/webpack/scenes/Subscriptions/Details/__tests__/__snapshots__/SubscriptionDetails.test.js.snap
CHANGED
@@ -40,7 +40,6 @@ exports[`subscriptions details page should render and contain appropiate compone
|
|
40
40
|
<Nav
|
41
41
|
bsClass="nav nav-tabs"
|
42
42
|
justified={false}
|
43
|
-
ouiaId="subscription-details-nav"
|
44
43
|
pullLeft={false}
|
45
44
|
pullRight={false}
|
46
45
|
stacked={false}
|
@@ -49,7 +48,6 @@ exports[`subscriptions details page should render and contain appropiate compone
|
|
49
48
|
active={false}
|
50
49
|
disabled={false}
|
51
50
|
eventKey={1}
|
52
|
-
ouiaId="details-nav-item"
|
53
51
|
>
|
54
52
|
<div>
|
55
53
|
Details
|
@@ -59,7 +57,6 @@ exports[`subscriptions details page should render and contain appropiate compone
|
|
59
57
|
active={false}
|
60
58
|
disabled={false}
|
61
59
|
eventKey={2}
|
62
|
-
ouiaId="product-content-nav-item"
|
63
60
|
>
|
64
61
|
<div>
|
65
62
|
Product Content
|
@@ -76,7 +73,6 @@ exports[`subscriptions details page should render and contain appropiate compone
|
|
76
73
|
bsClass="tab"
|
77
74
|
componentClass="div"
|
78
75
|
mountOnEnter={false}
|
79
|
-
ouiaId="subscription-details-tab-content"
|
80
76
|
unmountOnExit={false}
|
81
77
|
>
|
82
78
|
<TabPane
|
@@ -129,10 +129,9 @@ class ManageManifestModal extends Component {
|
|
129
129
|
|
130
130
|
return (
|
131
131
|
<ForemanModal id={MANAGE_MANIFEST_MODAL_ID} title={__('Manage Manifest')}>
|
132
|
-
<Tabs id="manifest-history-tabs"
|
132
|
+
<Tabs id="manifest-history-tabs">
|
133
133
|
{showManifestTab &&
|
134
134
|
<Tab
|
135
|
-
ouiaId="subscription-manifest-tab"
|
136
135
|
eventKey={1}
|
137
136
|
title={__('Manifest')}
|
138
137
|
>
|
@@ -199,10 +198,10 @@ class ManageManifestModal extends Component {
|
|
199
198
|
<ForemanModal title={__('Confirm delete manifest')} id={DELETE_MANIFEST_MODAL_ID}>
|
200
199
|
<DeleteManifestModalText simpleContentAccess={simpleContentAccess} />
|
201
200
|
<ForemanModal.Footer>
|
202
|
-
<Button
|
201
|
+
<Button bsStyle="default" onClick={this.hideDeleteManifestModal}>
|
203
202
|
{__('Cancel')}
|
204
203
|
</Button>
|
205
|
-
<Button
|
204
|
+
<Button bsStyle="danger" onClick={this.deleteManifest}>
|
206
205
|
{__('Delete')}
|
207
206
|
</Button>
|
208
207
|
</ForemanModal.Footer>
|
@@ -216,13 +215,11 @@ class ManageManifestModal extends Component {
|
|
216
215
|
</Tab>
|
217
216
|
}
|
218
217
|
<Tab
|
219
|
-
ouiaId="manifest-history-tab"
|
220
218
|
eventKey={2}
|
221
219
|
title={__('Manifest History')}
|
222
220
|
>
|
223
221
|
<LoadingState loading={manifestHistory.loading} loadingText={__('Loading')}>
|
224
222
|
<Table
|
225
|
-
ouiaId="manifest-history-table"
|
226
223
|
rows={manifestHistory.results}
|
227
224
|
columns={columns}
|
228
225
|
emptyState={emptyStateData()}
|
@@ -231,7 +228,6 @@ class ManageManifestModal extends Component {
|
|
231
228
|
</Tab>
|
232
229
|
{showCdnConfigurationTab &&
|
233
230
|
<Tab
|
234
|
-
ouiaId="cdn-configuration-tab"
|
235
231
|
eventKey={3}
|
236
232
|
title={__('CDN Configuration')}
|
237
233
|
>
|
@@ -248,7 +244,7 @@ class ManageManifestModal extends Component {
|
|
248
244
|
}
|
249
245
|
</Tabs>
|
250
246
|
<ForemanModal.Footer>
|
251
|
-
<Button
|
247
|
+
<Button bsStyle="primary" onClick={this.hideModal}>
|
252
248
|
{__('Close')}
|
253
249
|
</Button>
|
254
250
|
</ForemanModal.Footer>
|
@@ -132,7 +132,6 @@ class UpstreamSubscriptionsPage extends Component {
|
|
132
132
|
<Row>
|
133
133
|
<Col sm={12}>
|
134
134
|
<Button
|
135
|
-
ouiaId="submit-button"
|
136
135
|
style={{ marginTop: '10px', marginRight: '5px' }}
|
137
136
|
bsStyle="primary"
|
138
137
|
type="submit"
|
@@ -144,7 +143,7 @@ class UpstreamSubscriptionsPage extends Component {
|
|
144
143
|
</Button>
|
145
144
|
|
146
145
|
<LinkContainer to="/subscriptions" style={{ marginTop: '10px' }}>
|
147
|
-
<Button
|
146
|
+
<Button>
|
148
147
|
{__('Cancel')}
|
149
148
|
</Button>
|
150
149
|
</LinkContainer>
|
@@ -191,7 +191,6 @@ exports[`upstream subscriptions page should render 1`] = `
|
|
191
191
|
bsStyle="primary"
|
192
192
|
disabled={true}
|
193
193
|
onClick={[Function]}
|
194
|
-
ouiaId="submit-button"
|
195
194
|
style={
|
196
195
|
Object {
|
197
196
|
"marginRight": "5px",
|
@@ -216,7 +215,6 @@ exports[`upstream subscriptions page should render 1`] = `
|
|
216
215
|
bsClass="btn"
|
217
216
|
bsStyle="default"
|
218
217
|
disabled={false}
|
219
|
-
ouiaId="cancel-button"
|
220
218
|
>
|
221
219
|
Cancel
|
222
220
|
</Button>
|
@@ -74,14 +74,11 @@ const SubscriptionsToolbar = ({
|
|
74
74
|
</a>
|
75
75
|
}
|
76
76
|
|
77
|
-
<Button
|
77
|
+
<Button onClick={onManageManifestButtonClick}>
|
78
78
|
{__('Manage Manifest')}
|
79
79
|
</Button>
|
80
80
|
|
81
|
-
<Button
|
82
|
-
ouiaId="export-csv-button"
|
83
|
-
onClick={onExportCsvButtonClick}
|
84
|
-
>
|
81
|
+
<Button onClick={onExportCsvButtonClick}>
|
85
82
|
{__('Export CSV')}
|
86
83
|
</Button>
|
87
84
|
{canManageSubscriptionAllocations &&
|
@@ -72,7 +72,6 @@ exports[`SubscriptionsToolbar renders SubscriptionsToolbar 1`] = `
|
|
72
72
|
bsStyle="default"
|
73
73
|
disabled={false}
|
74
74
|
onClick={[Function]}
|
75
|
-
ouiaId="manage-manifest-button"
|
76
75
|
>
|
77
76
|
Manage Manifest
|
78
77
|
</Button>
|
@@ -83,7 +82,6 @@ exports[`SubscriptionsToolbar renders SubscriptionsToolbar 1`] = `
|
|
83
82
|
bsStyle="default"
|
84
83
|
disabled={false}
|
85
84
|
onClick={[Function]}
|
86
|
-
ouiaId="export-csv-button"
|
87
85
|
>
|
88
86
|
Export CSV
|
89
87
|
</Button>
|
@@ -166,7 +164,6 @@ exports[`SubscriptionsToolbar renders SubscriptionsToolbar with disabled add but
|
|
166
164
|
bsStyle="default"
|
167
165
|
disabled={false}
|
168
166
|
onClick={[Function]}
|
169
|
-
ouiaId="manage-manifest-button"
|
170
167
|
>
|
171
168
|
Manage Manifest
|
172
169
|
</Button>
|
@@ -177,7 +174,6 @@ exports[`SubscriptionsToolbar renders SubscriptionsToolbar with disabled add but
|
|
177
174
|
bsStyle="default"
|
178
175
|
disabled={false}
|
179
176
|
onClick={[Function]}
|
180
|
-
ouiaId="export-csv-button"
|
181
177
|
>
|
182
178
|
Export CSV
|
183
179
|
</Button>
|
@@ -260,7 +256,6 @@ exports[`SubscriptionsToolbar renders SubscriptionsToolbar with disabled delete
|
|
260
256
|
bsStyle="default"
|
261
257
|
disabled={false}
|
262
258
|
onClick={[Function]}
|
263
|
-
ouiaId="manage-manifest-button"
|
264
259
|
>
|
265
260
|
Manage Manifest
|
266
261
|
</Button>
|
@@ -271,7 +266,6 @@ exports[`SubscriptionsToolbar renders SubscriptionsToolbar with disabled delete
|
|
271
266
|
bsStyle="default"
|
272
267
|
disabled={false}
|
273
268
|
onClick={[Function]}
|
274
|
-
ouiaId="export-csv-button"
|
275
269
|
>
|
276
270
|
Export CSV
|
277
271
|
</Button>
|
@@ -354,7 +348,6 @@ exports[`SubscriptionsToolbar renders SubscriptionsToolbar with disabled manifes
|
|
354
348
|
bsStyle="default"
|
355
349
|
disabled={false}
|
356
350
|
onClick={[Function]}
|
357
|
-
ouiaId="manage-manifest-button"
|
358
351
|
>
|
359
352
|
Manage Manifest
|
360
353
|
</Button>
|
@@ -365,7 +358,6 @@ exports[`SubscriptionsToolbar renders SubscriptionsToolbar with disabled manifes
|
|
365
358
|
bsStyle="default"
|
366
359
|
disabled={false}
|
367
360
|
onClick={[Function]}
|
368
|
-
ouiaId="export-csv-button"
|
369
361
|
>
|
370
362
|
Export CSV
|
371
363
|
</Button>
|
@@ -466,7 +458,6 @@ exports[`SubscriptionsToolbar renders SubscriptionsToolbar with table columns 1`
|
|
466
458
|
bsStyle="default"
|
467
459
|
disabled={false}
|
468
460
|
onClick={[Function]}
|
469
|
-
ouiaId="manage-manifest-button"
|
470
461
|
>
|
471
462
|
Manage Manifest
|
472
463
|
</Button>
|
@@ -477,7 +468,6 @@ exports[`SubscriptionsToolbar renders SubscriptionsToolbar with table columns 1`
|
|
477
468
|
bsStyle="default"
|
478
469
|
disabled={false}
|
479
470
|
onClick={[Function]}
|
480
|
-
ouiaId="export-csv-button"
|
481
471
|
>
|
482
472
|
Export CSV
|
483
473
|
</Button>
|
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.11.0
|
4
|
+
version: 4.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- N/A
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-12-
|
11
|
+
date: 2023-12-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -1164,6 +1164,7 @@ files:
|
|
1164
1164
|
- app/lib/katello/resources/registry.rb
|
1165
1165
|
- app/lib/katello/util/candlepin_repository_checker.rb
|
1166
1166
|
- app/lib/katello/util/cdn_var_substitutor.rb
|
1167
|
+
- app/lib/katello/util/cvecf_migrator.rb
|
1167
1168
|
- app/lib/katello/util/data.rb
|
1168
1169
|
- app/lib/katello/util/deduplication_migrator.rb
|
1169
1170
|
- app/lib/katello/util/docker_manifest_clause_generator.rb
|
@@ -1599,7 +1600,6 @@ files:
|
|
1599
1600
|
- app/views/katello/api/v2/common/update.json.rabl
|
1600
1601
|
- app/views/katello/api/v2/content_credentials/index.json.rabl
|
1601
1602
|
- app/views/katello/api/v2/content_credentials/show.json.rabl
|
1602
|
-
- app/views/katello/api/v2/content_export_incrementals/repository.json.rabl
|
1603
1603
|
- app/views/katello/api/v2/content_facet/base.json.rabl
|
1604
1604
|
- app/views/katello/api/v2/content_facet/base_with_root.json.rabl
|
1605
1605
|
- app/views/katello/api/v2/content_facet/erratum.json.rabl
|
@@ -5588,9 +5588,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
5588
5588
|
version: '2.5'
|
5589
5589
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
5590
5590
|
requirements:
|
5591
|
-
- - "
|
5591
|
+
- - ">="
|
5592
5592
|
- !ruby/object:Gem::Version
|
5593
|
-
version:
|
5593
|
+
version: '0'
|
5594
5594
|
requirements: []
|
5595
5595
|
rubygems_version: 3.1.6
|
5596
5596
|
signing_key:
|
@@ -1,13 +0,0 @@
|
|
1
|
-
object @resource
|
2
|
-
|
3
|
-
extends "katello/api/v2/common/metadata"
|
4
|
-
|
5
|
-
node :nachos do
|
6
|
-
attribute sandwich: 'sandwiches are delicious'
|
7
|
-
end
|
8
|
-
|
9
|
-
node :errors do
|
10
|
-
#unless @resource.valid?
|
11
|
-
attribute :messages => @resource.errors.full_messages
|
12
|
-
#end
|
13
|
-
end
|