foreman_rh_cloud 4.0.25.1 → 4.0.26
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 +4 -1
- data/app/controllers/insights_cloud/api/machine_telemetries_controller.rb +8 -0
- data/app/services/foreman_rh_cloud/cloud_request_forwarder.rb +14 -2
- data/config/Gemfile.lock.gh_test +74 -76
- data/config/routes.rb +1 -1
- data/lib/foreman_rh_cloud/engine.rb +2 -0
- data/lib/foreman_rh_cloud/version.rb +1 -1
- data/lib/insights_cloud/async/insights_client_status_aging.rb +4 -0
- data/lib/insights_cloud/async/insights_full_sync.rb +4 -0
- data/lib/insights_cloud/async/insights_generate_notifications.rb +4 -0
- data/lib/insights_cloud/async/insights_resolutions_sync.rb +7 -2
- data/lib/insights_cloud/async/insights_rules_sync.rb +10 -2
- data/lib/inventory_sync/async/inventory_full_sync.rb +4 -0
- data/lib/inventory_sync/async/inventory_hosts_sync.rb +4 -0
- data/lib/inventory_sync/async/inventory_scheduled_sync.rb +4 -0
- data/lib/inventory_sync/async/inventory_self_host_sync.rb +4 -0
- data/lib/inventory_sync/async/query_inventory_job.rb +4 -0
- data/package.json +2 -2
- data/test/controllers/insights_cloud/api/machine_telemetries_controller_test.rb +16 -39
- data/test/jobs/insights_resolutions_sync_test.rb +10 -1
- data/test/unit/services/foreman_rh_cloud/cloud_request_forwarder_test.rb +26 -0
- data/webpack/InsightsCloudSync/Components/InsightsHeader/index.js +0 -2
- data/webpack/InsightsCloudSync/Components/InsightsSettings/insightsSettings.scss +1 -0
- data/webpack/InsightsCloudSync/Components/__tests__/__snapshots__/InsightsHeader.test.js.snap +0 -1
- data/webpack/InsightsCloudSync/InsightsCloudSync.js +2 -0
- data/webpack/InsightsCloudSync/__snapshots__/InsightsCloudSync.test.js.snap +1 -0
- data/webpack/common/Switcher/HelpLabel.js +1 -1
- data/webpack/common/Switcher/__tests__/__snapshots__/HelpLabel.test.js.snap +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 713d1737fd81e7a54efa8a300fe4c0765c1d2a31b796218bcc1f447b473921af
|
4
|
+
data.tar.gz: a47efbe51980f47c71e57af619f73a08d214f7af3bb84632946189a1aabe81f3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c7419f0e5583f02038cf784e38d67f15dd0dfa3a392a72cd19000c0f51f41fc97a29ed2e9387bfee4e1fe7a91addb563db53167c98343b640f52e3b17a729387
|
7
|
+
data.tar.gz: 2eb4fea115c546084e2365807e87933e60a102f1ec7455cfc5a368a1ae5a20587bf7c12206e40816a2893c19d02a035a2cee3c2262982a53f88542599bda629d
|
@@ -7,6 +7,7 @@ module Api
|
|
7
7
|
include InventoryUpload::TaskActions
|
8
8
|
|
9
9
|
api :GET, "/organizations/:organization_id/rh_cloud/report", N_("Download latest report")
|
10
|
+
param :organization_id, Integer, required: true, desc: N_("Set the current organization context for the request")
|
10
11
|
def download_file
|
11
12
|
filename, file = report_file(params[:organization_id])
|
12
13
|
|
@@ -16,6 +17,7 @@ module Api
|
|
16
17
|
end
|
17
18
|
|
18
19
|
api :POST, "/organizations/:organization_id/rh_cloud/report", N_("Start report generation")
|
20
|
+
param :organization_id, Integer, required: true, desc: N_("Set the current organization context for the request")
|
19
21
|
def generate_report
|
20
22
|
organization_id = params[:organization_id]
|
21
23
|
|
@@ -27,6 +29,7 @@ module Api
|
|
27
29
|
end
|
28
30
|
|
29
31
|
api :POST, "/organizations/:organization_id/rh_cloud/inventory_sync", N_("Start inventory synchronization")
|
32
|
+
param :organization_id, Integer, required: true, desc: N_("Set the current organization context for the request")
|
30
33
|
def sync_inventory_status
|
31
34
|
selected_org = Organization.find(params[:organization_id])
|
32
35
|
|
@@ -39,7 +42,7 @@ module Api
|
|
39
42
|
render json: { message: error.message }, status: :bad_request
|
40
43
|
end
|
41
44
|
|
42
|
-
api :POST, "rh_cloud/enable_connector", N_("Enable cloud connector")
|
45
|
+
api :POST, "/rh_cloud/enable_connector", N_("Enable cloud connector")
|
43
46
|
def enable_cloud_connector
|
44
47
|
cloud_connector = ForemanRhCloud::CloudConnector.new
|
45
48
|
render json: cloud_connector.install.to_json
|
@@ -25,6 +25,14 @@ module InsightsCloud::Api
|
|
25
25
|
}, status: :bad_gateway
|
26
26
|
end
|
27
27
|
|
28
|
+
if @cloud_response.code >= 300
|
29
|
+
return render json: {
|
30
|
+
:message => 'Cloud request failed',
|
31
|
+
:headers => {},
|
32
|
+
:response => @cloud_response,
|
33
|
+
}, status: @cloud_response.code
|
34
|
+
end
|
35
|
+
|
28
36
|
if @cloud_response.headers[:content_disposition]
|
29
37
|
return send_data @cloud_response, disposition: @cloud_response.headers[:content_disposition], type: @cloud_response.headers[:content_type]
|
30
38
|
end
|
@@ -17,6 +17,8 @@ module ForemanRhCloud
|
|
17
17
|
logger.debug("Sending request to: #{request_opts[:url]}")
|
18
18
|
|
19
19
|
execute_cloud_request(request_opts)
|
20
|
+
rescue RestClient::Exception => error_response
|
21
|
+
error_response.response
|
20
22
|
end
|
21
23
|
|
22
24
|
def prepare_request_opts(original_request, forward_payload, forward_params, certs)
|
@@ -62,6 +64,12 @@ module ForemanRhCloud
|
|
62
64
|
ssl_client_cert: OpenSSL::X509::Certificate.new(certs[:cert]),
|
63
65
|
ssl_client_key: OpenSSL::PKey::RSA.new(certs[:key]),
|
64
66
|
}
|
67
|
+
when connection_test_request?
|
68
|
+
{
|
69
|
+
url: ForemanRhCloud.cert_base_url + '/api/apicast-tests/ping',
|
70
|
+
ssl_client_cert: OpenSSL::X509::Certificate.new(certs[:cert]),
|
71
|
+
ssl_client_key: OpenSSL::PKey::RSA.new(certs[:key]),
|
72
|
+
}
|
65
73
|
else # Legacy insights API
|
66
74
|
{
|
67
75
|
url: ForemanRhCloud.legacy_insights_url + request_path.sub('/redhat_access/r/insights', '/r/insights'),
|
@@ -76,6 +84,10 @@ module ForemanRhCloud
|
|
76
84
|
->(request_path) { request_path.include? '/platform' }
|
77
85
|
end
|
78
86
|
|
87
|
+
def connection_test_request?
|
88
|
+
->(request_path) { request_path =~ /redhat_access\/r\/insights\/?$/ }
|
89
|
+
end
|
90
|
+
|
79
91
|
def prepare_forward_cloud_url(base_url, request_path)
|
80
92
|
cloud_path = request_path.sub('/redhat_access/r/insights/platform/', '')
|
81
93
|
.sub('/redhat_access/r/insights/', '')
|
@@ -84,11 +96,11 @@ module ForemanRhCloud
|
|
84
96
|
end
|
85
97
|
|
86
98
|
def core_app_name
|
87
|
-
|
99
|
+
BranchInfo.new.core_app_name
|
88
100
|
end
|
89
101
|
|
90
102
|
def core_app_version
|
91
|
-
|
103
|
+
BranchInfo.new.core_app_version
|
92
104
|
end
|
93
105
|
|
94
106
|
def http_user_agent(original_request)
|
data/config/Gemfile.lock.gh_test
CHANGED
@@ -40,66 +40,66 @@ PATH
|
|
40
40
|
GEM
|
41
41
|
remote: https://rubygems.org/
|
42
42
|
specs:
|
43
|
-
actioncable (6.0.3.
|
44
|
-
actionpack (= 6.0.3.
|
43
|
+
actioncable (6.0.3.6)
|
44
|
+
actionpack (= 6.0.3.6)
|
45
45
|
nio4r (~> 2.0)
|
46
46
|
websocket-driver (>= 0.6.1)
|
47
|
-
actionmailbox (6.0.3.
|
48
|
-
actionpack (= 6.0.3.
|
49
|
-
activejob (= 6.0.3.
|
50
|
-
activerecord (= 6.0.3.
|
51
|
-
activestorage (= 6.0.3.
|
52
|
-
activesupport (= 6.0.3.
|
47
|
+
actionmailbox (6.0.3.6)
|
48
|
+
actionpack (= 6.0.3.6)
|
49
|
+
activejob (= 6.0.3.6)
|
50
|
+
activerecord (= 6.0.3.6)
|
51
|
+
activestorage (= 6.0.3.6)
|
52
|
+
activesupport (= 6.0.3.6)
|
53
53
|
mail (>= 2.7.1)
|
54
|
-
actionmailer (6.0.3.
|
55
|
-
actionpack (= 6.0.3.
|
56
|
-
actionview (= 6.0.3.
|
57
|
-
activejob (= 6.0.3.
|
54
|
+
actionmailer (6.0.3.6)
|
55
|
+
actionpack (= 6.0.3.6)
|
56
|
+
actionview (= 6.0.3.6)
|
57
|
+
activejob (= 6.0.3.6)
|
58
58
|
mail (~> 2.5, >= 2.5.4)
|
59
59
|
rails-dom-testing (~> 2.0)
|
60
|
-
actionpack (6.0.3.
|
61
|
-
actionview (= 6.0.3.
|
62
|
-
activesupport (= 6.0.3.
|
60
|
+
actionpack (6.0.3.6)
|
61
|
+
actionview (= 6.0.3.6)
|
62
|
+
activesupport (= 6.0.3.6)
|
63
63
|
rack (~> 2.0, >= 2.0.8)
|
64
64
|
rack-test (>= 0.6.3)
|
65
65
|
rails-dom-testing (~> 2.0)
|
66
66
|
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
67
|
-
actiontext (6.0.3.
|
68
|
-
actionpack (= 6.0.3.
|
69
|
-
activerecord (= 6.0.3.
|
70
|
-
activestorage (= 6.0.3.
|
71
|
-
activesupport (= 6.0.3.
|
67
|
+
actiontext (6.0.3.6)
|
68
|
+
actionpack (= 6.0.3.6)
|
69
|
+
activerecord (= 6.0.3.6)
|
70
|
+
activestorage (= 6.0.3.6)
|
71
|
+
activesupport (= 6.0.3.6)
|
72
72
|
nokogiri (>= 1.8.5)
|
73
|
-
actionview (6.0.3.
|
74
|
-
activesupport (= 6.0.3.
|
73
|
+
actionview (6.0.3.6)
|
74
|
+
activesupport (= 6.0.3.6)
|
75
75
|
builder (~> 3.1)
|
76
76
|
erubi (~> 1.4)
|
77
77
|
rails-dom-testing (~> 2.0)
|
78
78
|
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
79
|
-
activejob (6.0.3.
|
80
|
-
activesupport (= 6.0.3.
|
79
|
+
activejob (6.0.3.6)
|
80
|
+
activesupport (= 6.0.3.6)
|
81
81
|
globalid (>= 0.3.6)
|
82
|
-
activemodel (6.0.3.
|
83
|
-
activesupport (= 6.0.3.
|
84
|
-
activerecord (6.0.3.
|
85
|
-
activemodel (= 6.0.3.
|
86
|
-
activesupport (= 6.0.3.
|
87
|
-
activerecord-import (1.0.
|
82
|
+
activemodel (6.0.3.6)
|
83
|
+
activesupport (= 6.0.3.6)
|
84
|
+
activerecord (6.0.3.6)
|
85
|
+
activemodel (= 6.0.3.6)
|
86
|
+
activesupport (= 6.0.3.6)
|
87
|
+
activerecord-import (1.0.8)
|
88
88
|
activerecord (>= 3.2)
|
89
89
|
activerecord-nulldb-adapter (0.7.0)
|
90
90
|
activerecord (>= 5.2.0, < 6.3)
|
91
|
-
activerecord-session_store (
|
92
|
-
actionpack (>= 4.
|
93
|
-
activerecord (>= 4.
|
91
|
+
activerecord-session_store (2.0.0)
|
92
|
+
actionpack (>= 5.2.4.1)
|
93
|
+
activerecord (>= 5.2.4.1)
|
94
94
|
multi_json (~> 1.11, >= 1.11.2)
|
95
|
-
rack (>=
|
96
|
-
railties (>= 4.
|
97
|
-
activestorage (6.0.3.
|
98
|
-
actionpack (= 6.0.3.
|
99
|
-
activejob (= 6.0.3.
|
100
|
-
activerecord (= 6.0.3.
|
101
|
-
marcel (~> 0.
|
102
|
-
activesupport (6.0.3.
|
95
|
+
rack (>= 2.0.8, < 3)
|
96
|
+
railties (>= 5.2.4.1)
|
97
|
+
activestorage (6.0.3.6)
|
98
|
+
actionpack (= 6.0.3.6)
|
99
|
+
activejob (= 6.0.3.6)
|
100
|
+
activerecord (= 6.0.3.6)
|
101
|
+
marcel (~> 1.0.0)
|
102
|
+
activesupport (6.0.3.6)
|
103
103
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
104
104
|
i18n (>= 0.7, < 2)
|
105
105
|
minitest (~> 5.1)
|
@@ -108,7 +108,7 @@ GEM
|
|
108
108
|
addressable (2.7.0)
|
109
109
|
public_suffix (>= 2.0.2, < 5.0)
|
110
110
|
algebrick (0.7.5)
|
111
|
-
amazing_print (1.
|
111
|
+
amazing_print (1.3.0)
|
112
112
|
ancestry (3.2.1)
|
113
113
|
activerecord (>= 4.2.0)
|
114
114
|
anemone (0.7.2)
|
@@ -135,13 +135,13 @@ GEM
|
|
135
135
|
benchmark-ips (2.8.4)
|
136
136
|
binding_of_caller (1.0.0)
|
137
137
|
debug_inspector (>= 0.0.1)
|
138
|
-
bootsnap (1.7.
|
138
|
+
bootsnap (1.7.3)
|
139
139
|
msgpack (~> 1.0)
|
140
140
|
bootstrap-sass (3.4.1)
|
141
141
|
autoprefixer-rails (>= 5.2.1)
|
142
142
|
sassc (>= 2.0.0)
|
143
143
|
builder (3.2.4)
|
144
|
-
bullet (6.1.
|
144
|
+
bullet (6.1.4)
|
145
145
|
activesupport (>= 3.0.0)
|
146
146
|
uniform_notifier (~> 1.11)
|
147
147
|
byebug (11.1.3)
|
@@ -167,7 +167,7 @@ GEM
|
|
167
167
|
coffee-script-source
|
168
168
|
execjs
|
169
169
|
coffee-script-source (1.12.2)
|
170
|
-
concurrent-ruby (1.1.
|
170
|
+
concurrent-ruby (1.1.9)
|
171
171
|
concurrent-ruby-edge (0.6.0)
|
172
172
|
concurrent-ruby (~> 1.1.6)
|
173
173
|
connection_pool (2.2.3)
|
@@ -179,12 +179,12 @@ GEM
|
|
179
179
|
daemons (1.3.1)
|
180
180
|
database_cleaner (1.99.0)
|
181
181
|
deacon (1.0.0)
|
182
|
-
debug_inspector (1.
|
182
|
+
debug_inspector (1.1.0)
|
183
183
|
declarative (0.0.20)
|
184
184
|
declarative-option (0.1.0)
|
185
|
-
deep_cloneable (3.
|
185
|
+
deep_cloneable (3.1.0)
|
186
186
|
activerecord (>= 3.1.0, < 7)
|
187
|
-
deface (1.
|
187
|
+
deface (1.8.1)
|
188
188
|
nokogiri (>= 1.6)
|
189
189
|
polyglot
|
190
190
|
rails (>= 5.2)
|
@@ -337,7 +337,7 @@ GEM
|
|
337
337
|
http-cookie (1.0.3)
|
338
338
|
domain_name (~> 0.5)
|
339
339
|
httpclient (2.8.3)
|
340
|
-
i18n (1.8.
|
340
|
+
i18n (1.8.10)
|
341
341
|
concurrent-ruby (~> 1.0)
|
342
342
|
immigrant (0.3.6)
|
343
343
|
activerecord (>= 3.0)
|
@@ -368,16 +368,14 @@ GEM
|
|
368
368
|
nokogiri (>= 1.5.9)
|
369
369
|
mail (2.7.1)
|
370
370
|
mini_mime (>= 0.1.1)
|
371
|
-
marcel (0.
|
372
|
-
mimemagic (~> 0.3.2)
|
371
|
+
marcel (1.0.0)
|
373
372
|
maruku (0.7.3)
|
374
373
|
memoist (0.16.2)
|
375
374
|
method_source (1.0.0)
|
376
375
|
mime-types (3.3.1)
|
377
376
|
mime-types-data (~> 3.2015)
|
378
|
-
mime-types-data (3.
|
379
|
-
|
380
|
-
mini_mime (1.0.2)
|
377
|
+
mime-types-data (3.2021.0225)
|
378
|
+
mini_mime (1.0.3)
|
381
379
|
mini_portile2 (2.5.0)
|
382
380
|
minitest (5.10.3)
|
383
381
|
minitest-reporters (1.4.3)
|
@@ -403,8 +401,8 @@ GEM
|
|
403
401
|
net-ssh (>= 2.6.5, < 7.0.0)
|
404
402
|
net-ssh (4.2.0)
|
405
403
|
netrc (0.11.0)
|
406
|
-
nio4r (2.5.
|
407
|
-
nokogiri (1.11.
|
404
|
+
nio4r (2.5.7)
|
405
|
+
nokogiri (1.11.2)
|
408
406
|
mini_portile2 (~> 2.5.0)
|
409
407
|
racc (~> 1.4)
|
410
408
|
oauth (0.5.5)
|
@@ -414,7 +412,7 @@ GEM
|
|
414
412
|
json (>= 1, < 3)
|
415
413
|
paint (2.2.1)
|
416
414
|
parallel (1.20.1)
|
417
|
-
parallel_tests (3.
|
415
|
+
parallel_tests (3.6.0)
|
418
416
|
parallel
|
419
417
|
parse-cron (0.1.4)
|
420
418
|
parser (3.0.0.0)
|
@@ -491,20 +489,20 @@ GEM
|
|
491
489
|
rack
|
492
490
|
rack-test (1.1.0)
|
493
491
|
rack (>= 1.0, < 3)
|
494
|
-
rails (6.0.3.
|
495
|
-
actioncable (= 6.0.3.
|
496
|
-
actionmailbox (= 6.0.3.
|
497
|
-
actionmailer (= 6.0.3.
|
498
|
-
actionpack (= 6.0.3.
|
499
|
-
actiontext (= 6.0.3.
|
500
|
-
actionview (= 6.0.3.
|
501
|
-
activejob (= 6.0.3.
|
502
|
-
activemodel (= 6.0.3.
|
503
|
-
activerecord (= 6.0.3.
|
504
|
-
activestorage (= 6.0.3.
|
505
|
-
activesupport (= 6.0.3.
|
492
|
+
rails (6.0.3.6)
|
493
|
+
actioncable (= 6.0.3.6)
|
494
|
+
actionmailbox (= 6.0.3.6)
|
495
|
+
actionmailer (= 6.0.3.6)
|
496
|
+
actionpack (= 6.0.3.6)
|
497
|
+
actiontext (= 6.0.3.6)
|
498
|
+
actionview (= 6.0.3.6)
|
499
|
+
activejob (= 6.0.3.6)
|
500
|
+
activemodel (= 6.0.3.6)
|
501
|
+
activerecord (= 6.0.3.6)
|
502
|
+
activestorage (= 6.0.3.6)
|
503
|
+
activesupport (= 6.0.3.6)
|
506
504
|
bundler (>= 1.3.0)
|
507
|
-
railties (= 6.0.3.
|
505
|
+
railties (= 6.0.3.6)
|
508
506
|
sprockets-rails (>= 2.0.0)
|
509
507
|
rails-controller-testing (1.0.5)
|
510
508
|
actionpack (>= 5.0.1.rc1)
|
@@ -518,9 +516,9 @@ GEM
|
|
518
516
|
rails-i18n (6.0.0)
|
519
517
|
i18n (>= 0.7, < 2)
|
520
518
|
railties (>= 6.0.0, < 7)
|
521
|
-
railties (6.0.3.
|
522
|
-
actionpack (= 6.0.3.
|
523
|
-
activesupport (= 6.0.3.
|
519
|
+
railties (6.0.3.6)
|
520
|
+
actionpack (= 6.0.3.6)
|
521
|
+
activesupport (= 6.0.3.6)
|
524
522
|
method_source
|
525
523
|
rake (>= 0.8.7)
|
526
524
|
thor (>= 0.20.3, < 2.0)
|
@@ -620,8 +618,8 @@ GEM
|
|
620
618
|
tilt
|
621
619
|
scoped_search (4.1.9)
|
622
620
|
activerecord (>= 4.2.0)
|
623
|
-
sd_notify (0.1.
|
624
|
-
secure_headers (6.3.
|
621
|
+
sd_notify (0.1.1)
|
622
|
+
secure_headers (6.3.2)
|
625
623
|
selenium-webdriver (3.142.7)
|
626
624
|
childprocess (>= 0.5, < 4.0)
|
627
625
|
rubyzip (>= 1.2.2)
|
@@ -708,7 +706,7 @@ PLATFORMS
|
|
708
706
|
|
709
707
|
DEPENDENCIES
|
710
708
|
activerecord-nulldb-adapter
|
711
|
-
activerecord-session_store (>=
|
709
|
+
activerecord-session_store (>= 2.0.0, < 3)
|
712
710
|
amazing_print (~> 1.1)
|
713
711
|
ancestry (>= 3.0.7, < 4, != 3.2.0)
|
714
712
|
apipie-dsl (>= 2.2.6)
|
data/config/routes.rb
CHANGED
@@ -39,7 +39,7 @@ Rails.application.routes.draw do
|
|
39
39
|
end
|
40
40
|
|
41
41
|
scope '/r/insights' do
|
42
|
-
match '/*path', :constraints => lambda { |req| !req.path.include?('view/api') }, to: 'machine_telemetries#forward_request', via: [:get, :post, :delete,:put, :patch]
|
42
|
+
match '(/*path)(/)', :constraints => lambda { |req| !req.path.include?('view/api') }, to: 'machine_telemetries#forward_request', via: [:get, :post, :delete,:put, :patch]
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
@@ -42,6 +42,8 @@ module ForemanRhCloud
|
|
42
42
|
Foreman::Plugin.register :foreman_rh_cloud do
|
43
43
|
requires_foreman '>= 2.3'
|
44
44
|
|
45
|
+
apipie_documented_controllers ["#{ForemanRhCloud::Engine.root}/app/controllers/api/v2/**/*.rb"]
|
46
|
+
|
45
47
|
# Add permissions
|
46
48
|
security_block :foreman_rh_cloud do
|
47
49
|
permission(
|
@@ -19,8 +19,9 @@ module InsightsCloud
|
|
19
19
|
def run
|
20
20
|
InsightsResolution.transaction do
|
21
21
|
InsightsResolution.delete_all
|
22
|
-
|
23
|
-
|
22
|
+
rule_ids = relevant_rules
|
23
|
+
api_response = query_insights_resolutions(rule_ids) unless rule_ids.empty?
|
24
|
+
write_resolutions(api_response) if api_response
|
24
25
|
end
|
25
26
|
end
|
26
27
|
|
@@ -70,6 +71,10 @@ module InsightsCloud
|
|
70
71
|
def to_rule_id(resolution_rule_id)
|
71
72
|
RULE_ID_REGEX.match(resolution_rule_id).named_captures.fetch('id', resolution_rule_id)
|
72
73
|
end
|
74
|
+
|
75
|
+
def rescue_strategy_for_self
|
76
|
+
Dynflow::Action::Rescue::Fail
|
77
|
+
end
|
73
78
|
end
|
74
79
|
end
|
75
80
|
end
|
@@ -11,8 +11,12 @@ module InsightsCloud
|
|
11
11
|
return
|
12
12
|
end
|
13
13
|
|
14
|
-
|
15
|
-
|
14
|
+
# since the tasks are not connected, we need to force sequence execution here
|
15
|
+
# to make sure we don't run resolutions until we synced all our rules
|
16
|
+
sequence do
|
17
|
+
plan_self
|
18
|
+
plan_resolutions
|
19
|
+
end
|
16
20
|
end
|
17
21
|
|
18
22
|
def plan_resolutions
|
@@ -71,6 +75,10 @@ module InsightsCloud
|
|
71
75
|
rating: rule_hash['rating'],
|
72
76
|
}
|
73
77
|
end
|
78
|
+
|
79
|
+
def rescue_strategy_for_self
|
80
|
+
Dynflow::Action::Rescue::Fail
|
81
|
+
end
|
74
82
|
end
|
75
83
|
end
|
76
84
|
end
|
data/package.json
CHANGED
@@ -7,6 +7,8 @@ module InsightsCloud::Api
|
|
7
7
|
end
|
8
8
|
|
9
9
|
context '#forward_request' do
|
10
|
+
include MockCerts
|
11
|
+
|
10
12
|
setup do
|
11
13
|
@body = 'Cloud response body'
|
12
14
|
@http_req = RestClient::Request.new(:method => 'GET', :url => 'http://test.theforeman.org')
|
@@ -16,38 +18,9 @@ module InsightsCloud::Api
|
|
16
18
|
User.current = ::Katello::CpConsumerUser.new(:uuid => host.subscription_facet.uuid, :login => host.subscription_facet.uuid)
|
17
19
|
InsightsCloud::Api::MachineTelemetriesController.any_instance.stubs(:upstream_owner).returns({ 'uuid' => 'abcdefg' })
|
18
20
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
"FzAVBgNVBAMMDnRoZWZvcmVtYW4ub3JnMB4XDTE4MDMyNDEyMzYyOFoXDTI4MDMy\r\n" +
|
23
|
-
"MTEyMzYyOFowTzELMAkGA1UEBhMCSUwxETAPBgNVBAgMCFRlbCBBdml2MRQwEgYD\r\n" +
|
24
|
-
"VQQKDAtUaGUgRm9yZW1hbjEXMBUGA1UEAwwOdGhlZm9yZW1hbi5vcmcwggIiMA0G\r\n" +
|
25
|
-
"CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDF04/s4h+BgHPG1HDZ/sDlYq925pkc\r\n" +
|
26
|
-
"RTVAfnE2EXDAmZ6W4Q9ueDY65MHe3ZWO5Dg72kNSP2sK9kRI7Dk5CAFOgyw1rH8t\r\n" +
|
27
|
-
"Hd1+0xp/lv6e4SvSYghxIL68vFe0ftKkm1usqejBM5ZTgKr7JCI+XSIN36F65Kde\r\n" +
|
28
|
-
"c+vxwBnayuhP04r9/aaE/709SXML4eRVYW8I3qFy9FPtUOm+bY8U2PIv5fHayqbG\r\n" +
|
29
|
-
"cL/4t3+MCtMhHJsLzdBXya+1P5t+HcKjUNlmwoUF961YAktVuEFloGd0RMRlqF3/\r\n" +
|
30
|
-
"itU3QNlXgA5QBIciE5VPr/PiqgMC3zgd5avjF4OribZ+N9AATLiQMW78il5wSfcc\r\n" +
|
31
|
-
"kQjU9ChOLrzku455vQ8KE4bc0qvpCWGfUah6MvL9JB+TQkRl/8kxl0b9ZinIvJDH\r\n" +
|
32
|
-
"ynVMb4cB/TDEjrjOfzn9mWLH0ZJqjmc2bER/G12WQxOaYLxdVwRStD3Yh6PtiFWu\r\n" +
|
33
|
-
"sXOk19UOTVkeuvGFVtvzLfEwQ1lDEo7+VBQz8FG/HBu2Hpq3IwCFrHuicikwjQJk\r\n" +
|
34
|
-
"nfturgD0rBOKEc1qWNZRCvovYOLL6ihvv5Orujsx5ZCHOAtnVNxkvIlFt2RS45LF\r\n" +
|
35
|
-
"MtPJyhAc6SjitllfUEirxprsbmeSZqrIfzcGaEhgOSnyik1WMv6bYiqPfBg8Fzjh\r\n" +
|
36
|
-
"vOCbtiDNPmvgOwIDAQABo1MwUTAdBgNVHQ4EFgQUtkAgQopsTtG9zSG3MgW2IxHD\r\n" +
|
37
|
-
"MDwwHwYDVR0jBBgwFoAUtkAgQopsTtG9zSG3MgW2IxHDMDwwDwYDVR0TAQH/BAUw\r\n" +
|
38
|
-
"AwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAJq7iN+ZroRBweNhvUobxs75bLIV6tNn1\r\n" +
|
39
|
-
"MdNHDRA+hezwf+gxHZhFyaAHfTpst2/9leK5Qe5Zd6gZLr3E5/8ppQuRod72H39B\r\n" +
|
40
|
-
"vxMlG5zxDss0WMo3vZeKZbTY6QhXi/lY2IZ6OGV4feSvCsYxn27GTjjrRUSLFeHH\r\n" +
|
41
|
-
"JVemCwCDMavaE3+OIY4v2P4FcG+MjUvfOB9ahI24TWL7YgrsNVmJjCILq+EeUj0t\r\n" +
|
42
|
-
"Gde1SXVyLkqt7PoxHRJAE0BCEMJSnjxaVB329acJgeehBUxjj4CCPqtDxtbz9HEH\r\n" +
|
43
|
-
"mOKfNdaKpFor+DUeEKUWVGnr9U9xOaC+Ws+oX7MIEUCDM7p2ob4JwcjnFs1jZgHh\r\n" +
|
44
|
-
"Hwig+i7doTlc701PvKWO96fuNHK3B3/jTb1fVvSZ49O/RvY1VWODdUdxWmXGHNh3\r\n" +
|
45
|
-
"LoR8tSPEb46lC2DXGaIQumqQt8PnBG+vL1qkQa1SGTV7dJ8TTbxbv0S+sS+igkk9\r\n" +
|
46
|
-
"zsIEK8Ea3Ep935cXximz0faAAKHSA+It+xHLAyDtqy2KaAEBgGsBuuWlUfK6TaP3\r\n" +
|
47
|
-
"Gwdjct3y4yYUO45lUsUfHqX8vk/4ttW5zYeDiW+HArJz+9VUXNbEdury4kGuHgBj\r\n" +
|
48
|
-
"xHD4Bsul65+hHZ9QywKU26F1A6TLkYpQ2rk/Dx9LGICM4m4IlHjWJPFsQdtkyOor\r\n" +
|
49
|
-
"osxMtcaZZ1E=\r\n" +
|
50
|
-
"-----END CERTIFICATE-----"
|
21
|
+
setup_certs_expectation do
|
22
|
+
InsightsCloud::Api::MachineTelemetriesController.any_instance.stubs(:candlepin_id_cert)
|
23
|
+
end
|
51
24
|
end
|
52
25
|
|
53
26
|
test "should respond with response from cloud" do
|
@@ -67,13 +40,6 @@ module InsightsCloud::Api
|
|
67
40
|
::ForemanRhCloud::CloudRequestForwarder.any_instance.expects(:execute_cloud_request).with do |opts|
|
68
41
|
opts[:headers][:content_type] == 'application/json'
|
69
42
|
end.returns(res)
|
70
|
-
InsightsCloud::Api::MachineTelemetriesController.any_instance.expects(:candlepin_id_cert)
|
71
|
-
.returns(
|
72
|
-
{
|
73
|
-
cert: @cert1,
|
74
|
-
key: OpenSSL::PKey::RSA.new(1024).to_pem,
|
75
|
-
}
|
76
|
-
)
|
77
43
|
InsightsCloud::Api::MachineTelemetriesController.any_instance.expects(:cp_owner_id).returns('123')
|
78
44
|
|
79
45
|
post :forward_request, as: :json, params: { "path" => "static/v1/test", "machine_telemetry" => {"foo" => "bar"} }
|
@@ -103,6 +69,17 @@ module InsightsCloud::Api
|
|
103
69
|
assert_equal 502, @response.status
|
104
70
|
assert_equal 'Authentication to the Insights Service failed.', JSON.parse(@response.body)['message']
|
105
71
|
end
|
72
|
+
|
73
|
+
test "should forward errors to the client" do
|
74
|
+
net_http_resp = Net::HTTPResponse.new(1.0, 500, "TEST_RESPONSE")
|
75
|
+
res = RestClient::Response.create(@body, net_http_resp, @http_req)
|
76
|
+
::ForemanRhCloud::CloudRequestForwarder.any_instance.stubs(:execute_cloud_request).raises(RestClient::InternalServerError.new(res))
|
77
|
+
|
78
|
+
get :forward_request, params: { "path" => "platform/module-update-router/v1/channel" }
|
79
|
+
assert_equal 500, @response.status
|
80
|
+
assert_equal 'Cloud request failed', JSON.parse(@response.body)['message']
|
81
|
+
assert_match /#{@body}/, JSON.parse(@response.body)['response']
|
82
|
+
end
|
106
83
|
end
|
107
84
|
|
108
85
|
context '#branch_info' do
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'test_plugin_helper'
|
2
2
|
require 'foreman_tasks/test_helpers'
|
3
3
|
|
4
4
|
class InsightsResolutionsSyncTest < ActiveSupport::TestCase
|
@@ -75,4 +75,13 @@ class InsightsResolutionsSyncTest < ActiveSupport::TestCase
|
|
75
75
|
assert_equal 5, InsightsResolution.all.count
|
76
76
|
assert_equal 2, @rule.resolutions.count
|
77
77
|
end
|
78
|
+
|
79
|
+
test 'Skips pinging the cloud if no rule ids were found' do
|
80
|
+
InsightsCloud::Async::InsightsResolutionsSync.any_instance.expects(:query_insights_resolutions).never
|
81
|
+
InsightsRule.all.delete_all
|
82
|
+
|
83
|
+
ForemanTasks.sync_task(InsightsCloud::Async::InsightsResolutionsSync)
|
84
|
+
|
85
|
+
assert_equal 0, InsightsResolution.all.count
|
86
|
+
end
|
78
87
|
end
|
@@ -17,6 +17,7 @@ class CloudRequestForwarderTest < ActiveSupport::TestCase
|
|
17
17
|
"/redhat_access/r/insights/platform/inventory/v1/hosts" => "https://cert.cloud.redhat.com/api/inventory/v1/hosts",
|
18
18
|
"/redhat_access/r/insights/platform/ingress/v1/upload" => "https://cert.cloud.redhat.com/api/ingress/v1/upload",
|
19
19
|
"/redhat_access/r/insights/uploads/67200803-132b-474b-a6f9-37be74185df4" => "https://cert-api.access.redhat.com/r/insights/uploads/67200803-132b-474b-a6f9-37be74185df4",
|
20
|
+
"/redhat_access/r/insights/" => "https://cert.cloud.redhat.com/api/apicast-tests/ping",
|
20
21
|
}
|
21
22
|
|
22
23
|
paths.each do |key, value|
|
@@ -107,4 +108,29 @@ class CloudRequestForwarderTest < ActiveSupport::TestCase
|
|
107
108
|
)
|
108
109
|
assert_equal params.merge(:branch_id => 74), @forwarder.prepare_forward_params(req, 74)
|
109
110
|
end
|
111
|
+
|
112
|
+
test 'should reuse BranchInfo identifiers for user_agent' do
|
113
|
+
user_agent = { :foo => :bar }
|
114
|
+
params = { :page => 5, :per_page => 42 }
|
115
|
+
ForemanRhCloud::BranchInfo.any_instance.expects(:core_app_name).returns('test_app')
|
116
|
+
ForemanRhCloud::BranchInfo.any_instance.expects(:core_app_version).returns('test_ver')
|
117
|
+
|
118
|
+
req = ActionDispatch::Request.new(
|
119
|
+
'REQUEST_URI' => '/foo/bar',
|
120
|
+
'REQUEST_METHOD' => 'GET',
|
121
|
+
'HTTP_USER_AGENT' => user_agent,
|
122
|
+
'rack.input' => ::Puma::NullIO.new,
|
123
|
+
'action_dispatch.request.query_parameters' => params
|
124
|
+
)
|
125
|
+
|
126
|
+
actual = @forwarder.prepare_request_opts(req, 'TEST PAYLOAD', params, generate_certs_hash)
|
127
|
+
|
128
|
+
assert_match /foo/, actual[:headers][:user_agent]
|
129
|
+
assert_match /bar/, actual[:headers][:user_agent]
|
130
|
+
assert_match /test_app/, actual[:headers][:user_agent]
|
131
|
+
assert_match /test_ver/, actual[:headers][:user_agent]
|
132
|
+
assert_equal 'TEST PAYLOAD', actual[:payload]
|
133
|
+
assert_equal 'GET', actual[:method]
|
134
|
+
assert_equal params, actual[:headers][:params]
|
135
|
+
end
|
110
136
|
end
|
@@ -1,12 +1,10 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import { Text, TextVariants } from '@patternfly/react-core';
|
3
3
|
import { translate as __ } from 'foremanReact/common/I18n';
|
4
|
-
import InsightsSettings from '../InsightsSettings';
|
5
4
|
import './InsightsHeader.scss';
|
6
5
|
|
7
6
|
const InsightsHeader = () => (
|
8
7
|
<div className="insights-header">
|
9
|
-
<InsightsSettings />
|
10
8
|
<Text component={TextVariants.p}>
|
11
9
|
{__(
|
12
10
|
'Insights synchronization process is used to provide Insights recommendations output for hosts managed here.'
|
@@ -12,6 +12,7 @@ import {
|
|
12
12
|
import './InsightsCloudSync.scss';
|
13
13
|
import Pagination from './Components/InsightsTable/Pagination';
|
14
14
|
import ToolbarDropdown from './Components/ToolbarDropdown';
|
15
|
+
import InsightsSettings from './Components/InsightsSettings';
|
15
16
|
|
16
17
|
const InsightsCloudSync = ({
|
17
18
|
syncInsights,
|
@@ -42,6 +43,7 @@ const InsightsCloudSync = ({
|
|
42
43
|
|
43
44
|
return (
|
44
45
|
<div className="rh-cloud-insights">
|
46
|
+
<InsightsSettings />
|
45
47
|
<PageLayout
|
46
48
|
searchable
|
47
49
|
searchProps={INSIGHTS_SEARCH_PROPS}
|
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: 4.0.
|
4
|
+
version: 4.0.26
|
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: 2021-08-
|
11
|
+
date: 2021-08-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: katello
|
@@ -657,7 +657,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
657
657
|
- !ruby/object:Gem::Version
|
658
658
|
version: '0'
|
659
659
|
requirements: []
|
660
|
-
rubygems_version: 3.2.
|
660
|
+
rubygems_version: 3.2.22
|
661
661
|
signing_key:
|
662
662
|
specification_version: 4
|
663
663
|
summary: Summary of ForemanRhCloud.
|