foreman_rh_cloud 8.0.47 → 8.0.49
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/api/v2/rh_cloud/inventory_controller.rb +23 -0
- data/app/controllers/foreman_inventory_upload/missing_hosts_controller.rb +22 -0
- data/app/models/insights_missing_host.rb +2 -0
- data/config/package-lock.json.plugin +3701 -16609
- data/config/routes.rb +3 -0
- data/db/migrate/20230515140211_add_missing_hosts_table.foreman_rh_cloud.rb +1 -1
- data/lib/foreman_inventory_upload/generators/fact_helpers.rb +1 -1
- data/lib/foreman_inventory_upload/generators/slice.rb +1 -1
- data/lib/foreman_rh_cloud/engine.rb +3 -1
- data/lib/foreman_rh_cloud/version.rb +1 -1
- data/lib/insights_cloud/async/connector_playbook_execution_reporter_task.rb +26 -6
- data/package.json +3 -6
- data/test/jobs/connector_playbook_execution_reporter_task_test.rb +109 -36
- data/webpack/ForemanInventoryUpload/Components/PageHeader/__tests__/__snapshots__/PageTitle.test.js.snap +1 -1
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/PageDescription/PageDescription.js +25 -9
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/PageDescription/__tests__/__snapshots__/PageDescription.test.js.snap +28 -5
- data/webpack/ForemanInventoryUpload/ForemanInventoryHelpers.js +1 -1
- data/webpack/ForemanInventoryUpload/__tests__/__snapshots__/ForemanInventoryHelpers.test.js.snap +1 -1
- metadata +3 -2
data/config/routes.rb
CHANGED
@@ -4,6 +4,7 @@ Rails.application.routes.draw do
|
|
4
4
|
post ':organization_id/reports', to: 'reports#generate', constraints: { organization_id: %r{[^\/]+} }
|
5
5
|
get ':organization_id/uploads/last', to: 'uploads#last', constraints: { organization_id: %r{[^\/]+} }
|
6
6
|
get ':organization_id/uploads/file', to: 'uploads#download_file', constraints: { organization_id: %r{[^\/]+} }
|
7
|
+
get 'missing_hosts', to: 'missing_hosts#index'
|
7
8
|
get 'accounts', to: 'accounts#index'
|
8
9
|
get 'settings', to: 'uploads_settings#index'
|
9
10
|
post 'setting', to: 'uploads_settings#set_advanced_setting'
|
@@ -50,10 +51,12 @@ Rails.application.routes.draw do
|
|
50
51
|
scope '(:apiv)', :module => :v2, :defaults => {:apiv => 'v2'}, :apiv => /v1|v2/, :constraints => ApiConstraints.new(:version => 2, :default => true) do
|
51
52
|
resources :organizations, :only => [:show] do
|
52
53
|
namespace 'rh_cloud' do
|
54
|
+
get 'missing_hosts', to: 'inventory#get_hosts'
|
53
55
|
get 'report', to: 'inventory#download_file'
|
54
56
|
post 'report', to: 'inventory#generate_report'
|
55
57
|
|
56
58
|
post 'inventory_sync', to: 'inventory#sync_inventory_status'
|
59
|
+
post 'missing_hosts', to: 'inventory#remove_hosts'
|
57
60
|
end
|
58
61
|
end
|
59
62
|
|
@@ -113,7 +113,7 @@ module ForemanInventoryUpload
|
|
113
113
|
bash_hostname = `uname -n`.chomp
|
114
114
|
foreman_hostname = ForemanRhCloud.foreman_host&.name
|
115
115
|
if bash_hostname == foreman_hostname
|
116
|
-
fqdn(
|
116
|
+
fqdn(ForemanRhCloud.foreman_host)
|
117
117
|
elsif Setting[:obfuscate_inventory_hostnames]
|
118
118
|
obfuscate_fqdn(bash_hostname)
|
119
119
|
else
|
@@ -147,7 +147,7 @@ module ForemanInventoryUpload
|
|
147
147
|
@stream.array_field('installed_packages') do
|
148
148
|
first = true
|
149
149
|
host.installed_packages.each do |package|
|
150
|
-
@stream.raw("#{first ? '' : ', '}#{@stream.stringify_value(package.
|
150
|
+
@stream.raw("#{first ? '' : ', '}#{@stream.stringify_value(package.nvrea)}")
|
151
151
|
first = false
|
152
152
|
end
|
153
153
|
end
|
@@ -52,9 +52,10 @@ module ForemanRhCloud
|
|
52
52
|
:generate_foreman_rh_cloud,
|
53
53
|
'foreman_inventory_upload/reports': [:generate],
|
54
54
|
'foreman_inventory_upload/tasks': [:create],
|
55
|
-
'api/v2/rh_cloud/inventory': [:sync_inventory_status, :download_file, :generate_report, :enable_cloud_connector],
|
55
|
+
'api/v2/rh_cloud/inventory': [:get_hosts, :remove_hosts, :sync_inventory_status, :download_file, :generate_report, :enable_cloud_connector],
|
56
56
|
'foreman_inventory_upload/uploads': [:enable_cloud_connector],
|
57
57
|
'foreman_inventory_upload/uploads_settings': [:set_advanced_setting],
|
58
|
+
'foreman_inventory_upload/missing_hosts': [:remove_hosts],
|
58
59
|
'insights_cloud/settings': [:update],
|
59
60
|
'insights_cloud/tasks': [:create]
|
60
61
|
)
|
@@ -66,6 +67,7 @@ module ForemanRhCloud
|
|
66
67
|
'foreman_inventory_upload/tasks': [:show],
|
67
68
|
'foreman_inventory_upload/cloud_status': [:index],
|
68
69
|
'foreman_inventory_upload/uploads_settings': [:index],
|
70
|
+
'foreman_inventory_upload/missing_hosts': [:index],
|
69
71
|
'react': [:index]
|
70
72
|
)
|
71
73
|
permission(
|
@@ -43,7 +43,17 @@ module InsightsCloud
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def done?(current_status = invocation_status)
|
46
|
-
|
46
|
+
ActiveModel::Type::Boolean.new.cast(current_status[:task_state][:task_done_reported])
|
47
|
+
end
|
48
|
+
|
49
|
+
def job_finished?
|
50
|
+
job_invocation.finished?
|
51
|
+
end
|
52
|
+
|
53
|
+
def all_hosts_finished?(current_status)
|
54
|
+
current_status[:hosts_state].values.all? do |status|
|
55
|
+
ActiveModel::Type::Boolean.new.cast(status['report_done'] == true)
|
56
|
+
end
|
47
57
|
end
|
48
58
|
|
49
59
|
# noop, we don't want to do anything when the polling task starts
|
@@ -95,7 +105,11 @@ module InsightsCloud
|
|
95
105
|
end
|
96
106
|
|
97
107
|
def host_status(host)
|
98
|
-
external_task&.dig('invocation_status', host)
|
108
|
+
external_task&.dig('invocation_status', :hosts_state, host)
|
109
|
+
end
|
110
|
+
|
111
|
+
def task_done_state
|
112
|
+
ActiveModel::Type::Boolean.new.cast(external_task&.dig('invocation_status', :task_state, :task_done_reported))
|
99
113
|
end
|
100
114
|
|
101
115
|
def sequence(host)
|
@@ -111,13 +125,15 @@ module InsightsCloud
|
|
111
125
|
end
|
112
126
|
|
113
127
|
def invocation_status
|
114
|
-
Hash[job_invocation.targeting.hosts.map do |host|
|
128
|
+
hosts_state = Hash[job_invocation.targeting.hosts.map do |host|
|
115
129
|
next unless host.insights&.uuid
|
116
130
|
[
|
117
131
|
host.insights.uuid,
|
118
132
|
task_status(job_invocation.sub_task_for_host(host), host.insights.uuid),
|
119
133
|
]
|
120
134
|
end.compact]
|
135
|
+
|
136
|
+
{task_state: {task_done_reported: task_done_state}, hosts_state: hosts_state}
|
121
137
|
end
|
122
138
|
|
123
139
|
def task_status(host_task, host_name)
|
@@ -138,9 +154,9 @@ module InsightsCloud
|
|
138
154
|
generator = InsightsCloud::Generators::PlaybookProgressGenerator.new(correlation_id)
|
139
155
|
all_hosts_success = true
|
140
156
|
|
141
|
-
invocation_status.each do |host_name, status|
|
157
|
+
invocation_status[:hosts_state].each do |host_name, status|
|
142
158
|
# skip host if the host already reported that it's finished
|
143
|
-
next if status['report_done']
|
159
|
+
next if ActiveModel::Type::Boolean.new.cast(status['report_done'])
|
144
160
|
|
145
161
|
unless status['state'] == 'unknown'
|
146
162
|
sequence = status['sequence']
|
@@ -154,7 +170,11 @@ module InsightsCloud
|
|
154
170
|
all_hosts_success &&= status['exit_status'] == 0
|
155
171
|
end
|
156
172
|
end
|
157
|
-
|
173
|
+
|
174
|
+
if (job_finished? || all_hosts_finished?(invocation_status))
|
175
|
+
generator.job_finished_message(all_hosts_success)
|
176
|
+
invocation_status[:task_state][:task_done_reported] = true
|
177
|
+
end
|
158
178
|
|
159
179
|
send_report(generator.generate)
|
160
180
|
end
|
data/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "foreman_rh_cloud",
|
3
|
-
"version": "8.0.
|
3
|
+
"version": "8.0.49",
|
4
4
|
"description": "Inventory Upload =============",
|
5
5
|
"main": "index.js",
|
6
6
|
"scripts": {
|
@@ -9,10 +9,7 @@
|
|
9
9
|
"test": "tfm-test --plugin",
|
10
10
|
"test:watch": "tfm-test --plugin --watchAll",
|
11
11
|
"test:current": "tfm-test --plugin --watch",
|
12
|
-
"publish-coverage": "tfm-publish-coverage"
|
13
|
-
"stories": "tfm-stories --plugin",
|
14
|
-
"stories:build": "tfm-build-stories --plugin",
|
15
|
-
"stories:deploy": "surge --project .storybook-dist"
|
12
|
+
"publish-coverage": "tfm-publish-coverage"
|
16
13
|
},
|
17
14
|
"repository": {
|
18
15
|
"type": "git",
|
@@ -27,10 +24,10 @@
|
|
27
24
|
"devDependencies": {
|
28
25
|
"@babel/core": "~7.7.0",
|
29
26
|
"@theforeman/builder": ">= 10.1.1",
|
30
|
-
"@theforeman/stories": ">= 10.1.1",
|
31
27
|
"@theforeman/test": ">= 10.1.1",
|
32
28
|
"@theforeman/eslint-plugin-foreman": ">= 10.1.1",
|
33
29
|
"babel-eslint": "~10.0.0",
|
30
|
+
"cosmiconfig-typescript-loader": "~4.3.0",
|
34
31
|
"eslint": "~6.7.2",
|
35
32
|
"eslint-plugin-spellcheck": "~0.0.17",
|
36
33
|
"jed": "~1.1.1",
|
@@ -29,7 +29,11 @@ class ConnectorPlaybookExecutionReporterTaskTest < ActiveSupport::TestCase
|
|
29
29
|
end
|
30
30
|
|
31
31
|
test 'It reports finish playbook messages' do
|
32
|
-
|
32
|
+
host1_task = @job_invocation.sub_task_for_host(Host.where(name: 'host1').first)
|
33
|
+
host1_task.state = 'stopped'
|
34
|
+
host1_task.save!
|
35
|
+
|
36
|
+
TestConnectorPlaybookExecutionReporterTask.any_instance.stubs(:job_finished?).returns(true)
|
33
37
|
|
34
38
|
actual = ForemanTasks.sync_task(TestConnectorPlaybookExecutionReporterTask, @job_invocation)
|
35
39
|
|
@@ -39,6 +43,9 @@ class ConnectorPlaybookExecutionReporterTaskTest < ActiveSupport::TestCase
|
|
39
43
|
assert_not_nil actual_report
|
40
44
|
actual_jsonl = read_jsonl(actual_report)
|
41
45
|
|
46
|
+
assert_equal true, @job_invocation.finished?
|
47
|
+
assert_equal 'stopped', @job_invocation.sub_task_for_host(Host.where(name: 'host1').first)['state']
|
48
|
+
|
42
49
|
assert_not_nil actual_report_finished = actual_jsonl.find { |l| l['type'] == 'playbook_run_completed' }
|
43
50
|
assert_equal 'TEST_CORRELATION', actual_report_finished['correlation_id']
|
44
51
|
assert_equal 'success', actual_report_finished['status']
|
@@ -49,57 +56,121 @@ class ConnectorPlaybookExecutionReporterTaskTest < ActiveSupport::TestCase
|
|
49
56
|
end
|
50
57
|
|
51
58
|
test 'It reports single progress message for done host' do
|
52
|
-
|
59
|
+
class ArrangeTestHost < InsightsCloud::Async::ConnectorPlaybookExecutionReporterTask
|
60
|
+
def send_report(report)
|
61
|
+
host1_task = @job_invocation.sub_task_for_host(Host.where(name: 'host1').first)
|
62
|
+
host1_task.state = 'stopped'
|
63
|
+
host1_task.save!
|
64
|
+
|
65
|
+
output[:saved_reports] = (output[:saved_reports] || []) << report
|
66
|
+
end
|
67
|
+
end
|
53
68
|
|
54
|
-
|
69
|
+
ArrangeTestHost.instance_variable_set(:@connector_feature_id, nil)
|
70
|
+
host1_task = @job_invocation.sub_task_for_host(Host.where(name: 'host1').first)
|
71
|
+
host1_task.state = 'running'
|
72
|
+
host1_task.save!
|
55
73
|
|
56
|
-
|
74
|
+
ArrangeTestHost.any_instance.stubs(:job_finished?).returns(false, true)
|
57
75
|
|
58
|
-
|
59
|
-
|
60
|
-
|
76
|
+
actual = ForemanTasks.sync_task(ArrangeTestHost, @job_invocation)
|
77
|
+
|
78
|
+
actual_report1 = actual.output[:saved_reports].first.to_s
|
79
|
+
actual_report2 = actual.output[:saved_reports].second.to_s
|
80
|
+
|
81
|
+
assert_equal 2, actual.output[:saved_reports].size
|
82
|
+
assert_not_nil actual_report1
|
83
|
+
assert_not_nil actual_report2
|
84
|
+
|
85
|
+
actual_json1 = read_jsonl(actual_report1)
|
86
|
+
actual_json2 = read_jsonl(actual_report2)
|
87
|
+
|
88
|
+
assert_equal 'stopped', @job_invocation.sub_task_for_host(Host.where(name: 'host1').first)['state']
|
61
89
|
|
62
|
-
|
63
|
-
|
64
|
-
assert_equal
|
65
|
-
assert_equal 0,
|
90
|
+
assert_not_nil actual_report_updated = actual_json1.find { |l| l['type'] == 'playbook_run_update' && l['host'] == 'TEST_UUID1' }
|
91
|
+
assert_equal 'TEST_CORRELATION', actual_report_updated['correlation_id']
|
92
|
+
assert_equal 'TEST_UUID1', actual_report_updated['host']
|
93
|
+
assert_equal 0, actual_report_updated['sequence']
|
94
|
+
assert_equal 6, actual_report_updated.size
|
95
|
+
|
96
|
+
assert_not_nil actual_report_updated = actual_json2.find { |l| l['type'] == 'playbook_run_update' && l['host'] == 'TEST_UUID1' }
|
97
|
+
assert_equal 'TEST_CORRELATION', actual_report_updated['correlation_id']
|
98
|
+
assert_equal 'TEST_UUID1', actual_report_updated['host']
|
99
|
+
assert_equal 1, actual_report_updated['sequence']
|
100
|
+
assert_equal 6, actual_report_updated.size
|
101
|
+
|
102
|
+
assert_not_nil actual_host_finished = actual_json2.find { |l| l['type'] == 'playbook_run_finished' && l['host'] == 'TEST_UUID1' }
|
103
|
+
assert_equal 'TEST_CORRELATION', actual_host_finished['correlation_id']
|
104
|
+
assert_equal 'TEST_UUID1', actual_host_finished['host']
|
105
|
+
assert_equal 'success', actual_host_finished['status']
|
106
|
+
assert_equal 7, actual_host_finished.size
|
107
|
+
|
108
|
+
assert_not_nil actual_report_finished = actual_json2.find { |l| l['type'] == 'playbook_run_completed' }
|
109
|
+
assert_equal 'TEST_CORRELATION', actual_report_finished['correlation_id']
|
110
|
+
assert_equal 'success', actual_report_finished['status']
|
111
|
+
assert_equal 4, actual_report_finished.size
|
66
112
|
end
|
67
113
|
|
68
114
|
test 'It reports two progress messages for in progress host' do
|
69
|
-
|
115
|
+
class ArrangeTestHostTwo < InsightsCloud::Async::ConnectorPlaybookExecutionReporterTask
|
116
|
+
def send_report(report)
|
117
|
+
iteration_number = output[:iteration_number].to_i
|
118
|
+
|
119
|
+
if iteration_number == 1
|
120
|
+
host1_task = job_invocation.sub_task_for_host(Host.where(name: 'host1').first)
|
121
|
+
host1_task.state = 'stopped'
|
122
|
+
host1_task.save!
|
123
|
+
end
|
124
|
+
|
125
|
+
output[:iteration_number] = iteration_number + 1
|
126
|
+
output[:saved_reports] = (output[:saved_reports] || []) << report
|
127
|
+
end
|
128
|
+
end
|
70
129
|
|
71
|
-
|
130
|
+
ArrangeTestHostTwo.instance_variable_set(:@connector_feature_id, nil)
|
131
|
+
host1_task = @job_invocation.sub_task_for_host(Host.where(name: 'host1').first)
|
72
132
|
host1_task.state = 'running'
|
73
133
|
host1_task.save!
|
74
134
|
|
75
|
-
|
135
|
+
ArrangeTestHostTwo.any_instance.stubs(:job_finished?).returns(false, false, true)
|
76
136
|
|
77
|
-
|
137
|
+
actual = ForemanTasks.sync_task(ArrangeTestHostTwo, @job_invocation)
|
78
138
|
|
79
|
-
|
80
|
-
|
139
|
+
actual_report1 = actual.output[:saved_reports].first.to_s
|
140
|
+
actual_report2 = actual.output[:saved_reports].second.to_s
|
141
|
+
actual_report3 = actual.output[:saved_reports].third.to_s
|
81
142
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
143
|
+
assert_equal 3, actual.output[:saved_reports].size
|
144
|
+
assert_not_nil actual_report1
|
145
|
+
assert_not_nil actual_report2
|
146
|
+
assert_not_nil actual_report3
|
86
147
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
assert_equal 0, actual_host_updates.first['sequence']
|
148
|
+
actual_json1 = read_jsonl(actual_report1)
|
149
|
+
actual_json2 = read_jsonl(actual_report2)
|
150
|
+
actual_json3 = read_jsonl(actual_report3)
|
91
151
|
|
92
|
-
|
93
|
-
|
152
|
+
assert_not_nil actual_report_updated = actual_json1.find { |l| l['type'] == 'playbook_run_update' && l['host'] == 'TEST_UUID1' }
|
153
|
+
assert_equal 'TEST_CORRELATION', actual_report_updated['correlation_id']
|
154
|
+
assert_equal 'TEST_UUID1', actual_report_updated['host']
|
155
|
+
assert_equal 0, actual_report_updated['sequence']
|
156
|
+
assert_equal 6, actual_report_updated.size
|
94
157
|
|
95
|
-
|
96
|
-
|
97
|
-
assert_equal
|
98
|
-
assert_equal 1,
|
158
|
+
assert_not_nil actual_report_updated = actual_json2.find { |l| l['type'] == 'playbook_run_update' && l['host'] == 'TEST_UUID1' }
|
159
|
+
assert_equal 'TEST_CORRELATION', actual_report_updated['correlation_id']
|
160
|
+
assert_equal 'TEST_UUID1', actual_report_updated['host']
|
161
|
+
assert_equal 1, actual_report_updated['sequence']
|
162
|
+
assert_equal 6, actual_report_updated.size
|
99
163
|
|
100
|
-
|
101
|
-
|
102
|
-
assert_equal
|
164
|
+
assert_not_nil actual_host_finished = actual_json3.find { |l| l['type'] == 'playbook_run_finished' && l['host'] == 'TEST_UUID1' }
|
165
|
+
assert_equal 'TEST_CORRELATION', actual_host_finished['correlation_id']
|
166
|
+
assert_equal 'TEST_UUID1', actual_host_finished['host']
|
167
|
+
assert_equal 'success', actual_host_finished['status']
|
168
|
+
assert_equal 7, actual_host_finished.size
|
169
|
+
|
170
|
+
assert_not_nil actual_report_finished = actual_json3.find { |l| l['type'] == 'playbook_run_completed' }
|
171
|
+
assert_equal 'TEST_CORRELATION', actual_report_finished['correlation_id']
|
172
|
+
assert_equal 'success', actual_report_finished['status']
|
173
|
+
assert_equal 4, actual_report_finished.size
|
103
174
|
end
|
104
175
|
|
105
176
|
private
|
@@ -164,10 +235,12 @@ class ConnectorPlaybookExecutionReporterTaskTest < ActiveSupport::TestCase
|
|
164
235
|
:value => '1'
|
165
236
|
)
|
166
237
|
|
167
|
-
@host1 = FactoryBot.create(:host, :with_insights_hits
|
238
|
+
@host1 = FactoryBot.create(:host, :with_insights_hits)
|
239
|
+
@host1.name = 'host1' # overriding name since there is an issue with Factorybot and setting the name correctly, same for 2nd host
|
168
240
|
@host1.insights.uuid = 'TEST_UUID1'
|
169
241
|
@host1.insights.save!
|
170
|
-
@host2 = FactoryBot.create(:host, :with_insights_hits
|
242
|
+
@host2 = FactoryBot.create(:host, :with_insights_hits)
|
243
|
+
@host2.name = 'host2'
|
171
244
|
@host2.insights.uuid = 'TEST_UUID2'
|
172
245
|
@host2.insights.save!
|
173
246
|
|
@@ -31,7 +31,7 @@ exports[`PageTitle rendering render without Props 1`] = `
|
|
31
31
|
Actions history
|
32
32
|
</DropdownItem>,
|
33
33
|
<DropdownItem
|
34
|
-
href="/links/manual
|
34
|
+
href="/links/manual/?root_url=https%3A%2F%2Faccess.redhat.com%2Fproducts%2Fsubscription-central"
|
35
35
|
rel="noopener noreferrer"
|
36
36
|
target="_blank"
|
37
37
|
>
|
@@ -2,28 +2,44 @@ import React from 'react';
|
|
2
2
|
import { Text } from '@patternfly/react-core';
|
3
3
|
|
4
4
|
import { translate as __ } from 'foremanReact/common/I18n';
|
5
|
+
import { FormattedMessage } from 'react-intl';
|
5
6
|
|
6
7
|
export const PageDescription = () => (
|
7
8
|
<div id="inventory_page_description">
|
8
9
|
<Text>
|
9
10
|
{__(
|
10
|
-
'Red Hat
|
11
|
+
'The Red Hat Hybrid Cloud Console provides a set of cloud services, including Red Hat Insights and Subscriptions, that provide predictive analysis, remediation of issues, and unified subscription reporting for this Satellite instance.'
|
11
12
|
)}
|
12
13
|
</Text>
|
13
14
|
<Text>
|
14
15
|
{__(
|
15
|
-
'
|
16
|
+
'The Satellite inventory upload plugin automatically uploads Satellite host inventory data to the Inventory service of Insights, where it can also be used by the Subscriptions service for subscription reporting. If you use the Subscriptions service, enabling inventory uploads is required.'
|
16
17
|
)}
|
17
18
|
</Text>
|
18
19
|
<Text>
|
19
|
-
|
20
|
-
|
21
|
-
|
20
|
+
<FormattedMessage
|
21
|
+
id="enable-upload-hint"
|
22
|
+
defaultMessage={__(
|
23
|
+
'To enable this reporting for all Satellite organizations, set {uploadButtonName} to on. The data will be reported automatically once per day.'
|
24
|
+
)}
|
25
|
+
values={{
|
26
|
+
uploadButtonName: <strong>{__('Automatic inventory upload')}</strong>,
|
27
|
+
}}
|
28
|
+
/>
|
22
29
|
</Text>
|
23
30
|
<Text>
|
24
|
-
|
25
|
-
|
26
|
-
|
31
|
+
<FormattedMessage
|
32
|
+
id="restart-button-hint"
|
33
|
+
defaultMessage={__(
|
34
|
+
'To manually upload the data for a specific organization, select an organization and click {restartButtonName}.'
|
35
|
+
)}
|
36
|
+
values={{
|
37
|
+
restartButtonName: <strong>{__('Restart')}</strong>,
|
38
|
+
}}
|
39
|
+
/>
|
40
|
+
</Text>
|
41
|
+
<Text>
|
42
|
+
{__('For more information about the Subscriptions service, see:')}
|
27
43
|
|
28
44
|
<a
|
29
45
|
href="https://access.redhat.com/documentation/en-us/subscription_central/2020-04/html/getting_started_with_subscription_watch/assembly-about-subscriptionwatch"
|
@@ -34,7 +50,7 @@ export const PageDescription = () => (
|
|
34
50
|
</a>
|
35
51
|
</Text>
|
36
52
|
<Text>
|
37
|
-
{__('For more information about Insights and Cloud Connector
|
53
|
+
{__('For more information about Insights and Cloud Connector, see:')}
|
38
54
|
|
39
55
|
<a
|
40
56
|
href="https://console.redhat.com/security/insights/"
|
@@ -5,16 +5,39 @@ exports[`PageDescription rendering render without Props 1`] = `
|
|
5
5
|
id="inventory_page_description"
|
6
6
|
>
|
7
7
|
<Text>
|
8
|
-
Red Hat
|
8
|
+
The Red Hat Hybrid Cloud Console provides a set of cloud services, including Red Hat Insights and Subscriptions, that provide predictive analysis, remediation of issues, and unified subscription reporting for this Satellite instance.
|
9
9
|
</Text>
|
10
10
|
<Text>
|
11
|
-
|
11
|
+
The Satellite inventory upload plugin automatically uploads Satellite host inventory data to the Inventory service of Insights, where it can also be used by the Subscriptions service for subscription reporting. If you use the Subscriptions service, enabling inventory uploads is required.
|
12
12
|
</Text>
|
13
13
|
<Text>
|
14
|
-
|
14
|
+
<FormattedMessage
|
15
|
+
defaultMessage="To enable this reporting for all Satellite organizations, set {uploadButtonName} to on. The data will be reported automatically once per day."
|
16
|
+
id="enable-upload-hint"
|
17
|
+
values={
|
18
|
+
Object {
|
19
|
+
"uploadButtonName": <strong>
|
20
|
+
Automatic inventory upload
|
21
|
+
</strong>,
|
22
|
+
}
|
23
|
+
}
|
24
|
+
/>
|
15
25
|
</Text>
|
16
26
|
<Text>
|
17
|
-
|
27
|
+
<FormattedMessage
|
28
|
+
defaultMessage="To manually upload the data for a specific organization, select an organization and click {restartButtonName}."
|
29
|
+
id="restart-button-hint"
|
30
|
+
values={
|
31
|
+
Object {
|
32
|
+
"restartButtonName": <strong>
|
33
|
+
Restart
|
34
|
+
</strong>,
|
35
|
+
}
|
36
|
+
}
|
37
|
+
/>
|
38
|
+
</Text>
|
39
|
+
<Text>
|
40
|
+
For more information about the Subscriptions service, see:
|
18
41
|
|
19
42
|
<a
|
20
43
|
href="https://access.redhat.com/documentation/en-us/subscription_central/2020-04/html/getting_started_with_subscription_watch/assembly-about-subscriptionwatch"
|
@@ -25,7 +48,7 @@ exports[`PageDescription rendering render without Props 1`] = `
|
|
25
48
|
</a>
|
26
49
|
</Text>
|
27
50
|
<Text>
|
28
|
-
For more information about Insights and Cloud Connector
|
51
|
+
For more information about Insights and Cloud Connector, see:
|
29
52
|
|
30
53
|
<a
|
31
54
|
href="https://console.redhat.com/security/insights/"
|
data/webpack/ForemanInventoryUpload/__tests__/__snapshots__/ForemanInventoryHelpers.test.js.snap
CHANGED
@@ -2,4 +2,4 @@
|
|
2
2
|
|
3
3
|
exports[`ForemanInventoryUpload helpers should return inventory Url 1`] = `"/foreman_inventory_upload/test_path"`;
|
4
4
|
|
5
|
-
exports[`ForemanInventoryUpload helpers should return inventory docs url 1`] = `"/links/manual
|
5
|
+
exports[`ForemanInventoryUpload helpers should return inventory docs url 1`] = `"/links/manual/?root_url=https%3A%2F%2Faccess.redhat.com%2Fproducts%2Fsubscription-central"`;
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman_rh_cloud
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 8.0.
|
4
|
+
version: 8.0.49
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Foreman Red Hat Cloud team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-09-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: katello
|
@@ -126,6 +126,7 @@ files:
|
|
126
126
|
- app/controllers/concerns/inventory_upload/task_actions.rb
|
127
127
|
- app/controllers/foreman_inventory_upload/accounts_controller.rb
|
128
128
|
- app/controllers/foreman_inventory_upload/cloud_status_controller.rb
|
129
|
+
- app/controllers/foreman_inventory_upload/missing_hosts_controller.rb
|
129
130
|
- app/controllers/foreman_inventory_upload/reports_controller.rb
|
130
131
|
- app/controllers/foreman_inventory_upload/tasks_controller.rb
|
131
132
|
- app/controllers/foreman_inventory_upload/uploads_controller.rb
|