foreman_rh_cloud 3.0.21 → 4.0.23
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.
- checksums.yaml +4 -4
- data/app/controllers/api/v2/rh_cloud/inventory_controller.rb +50 -0
- data/app/controllers/concerns/inventory_upload/report_actions.rb +26 -0
- data/app/controllers/concerns/inventory_upload/task_actions.rb +25 -0
- data/app/controllers/foreman_inventory_upload/reports_controller.rb +3 -1
- data/app/controllers/foreman_inventory_upload/tasks_controller.rb +5 -13
- data/app/controllers/foreman_inventory_upload/uploads_controller.rb +4 -4
- data/app/controllers/insights_cloud/api/machine_telemetries_controller.rb +1 -0
- data/app/controllers/insights_cloud/hits_controller.rb +7 -3
- data/app/helpers/foreman_insights_host_helper.rb +19 -0
- data/app/services/foreman_rh_cloud/cloud_auth.rb +12 -0
- data/app/services/foreman_rh_cloud/cloud_request.rb +14 -0
- data/app/services/foreman_rh_cloud/cloud_request_forwarder.rb +1 -6
- data/app/services/foreman_rh_cloud/remediations_retriever.rb +1 -4
- data/config/package-lock.json.plugin +30931 -0
- data/config/routes.rb +19 -0
- data/lib/foreman_inventory_upload/generators/fact_helpers.rb +19 -0
- data/lib/foreman_inventory_upload/generators/slice.rb +6 -6
- data/lib/foreman_rh_cloud/engine.rb +13 -7
- data/lib/foreman_rh_cloud/version.rb +1 -1
- data/lib/insights_cloud/async/insights_full_sync.rb +4 -14
- data/lib/insights_cloud/async/insights_resolutions_sync.rb +1 -4
- data/lib/insights_cloud/async/insights_rules_sync.rb +2 -7
- data/lib/inventory_sync/async/inventory_full_sync.rb +2 -1
- data/lib/inventory_sync/async/inventory_hosts_sync.rb +6 -2
- data/lib/inventory_sync/async/inventory_scheduled_sync.rb +12 -0
- data/lib/inventory_sync/async/query_inventory_job.rb +1 -4
- data/lib/tasks/rh_cloud_inventory.rake +8 -1
- data/package.json +1 -1
- data/test/controllers/inventory_upload/api/inventory_controller_test.rb +53 -0
- data/test/factories/inventory_upload_factories.rb +1 -1
- data/test/jobs/insights_full_sync_test.rb +3 -0
- data/test/jobs/insights_resolutions_sync_test.rb +3 -0
- data/test/jobs/insights_rules_sync_test.rb +3 -0
- data/test/jobs/inventory_full_sync_test.rb +3 -0
- data/test/jobs/inventory_hosts_sync_test.rb +265 -0
- data/test/jobs/inventory_scheduled_sync_test.rb +22 -0
- data/test/test_plugin_helper.rb +2 -1
- data/test/unit/slice_generator_test.rb +66 -29
- data/webpack/ForemanInventoryUpload/Components/FullScreenModal/FullScreenModal.js +1 -1
- data/webpack/ForemanInventoryUpload/Components/FullScreenModal/__tests__/__snapshots__/FullScreenModal.test.js.snap +1 -1
- data/webpack/ForemanInventoryUpload/Components/FullScreenModal/fullScreenModal.scss +14 -16
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/PageDescription/PageDescription.js +11 -0
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/PageDescription/__tests__/__snapshots__/PageDescription.test.js.snap +11 -0
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonActions.js +28 -63
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/integrations.test.js.snap +2 -3
- data/webpack/ForemanInventoryUpload/Components/Terminal/Terminal.js +1 -1
- data/webpack/ForemanInventoryUpload/Components/Terminal/__tests__/Terminal.test.js +1 -1
- data/webpack/ForemanInventoryUpload/Components/Terminal/__tests__/__snapshots__/Terminal.test.js.snap +2 -2
- data/webpack/ForemanInventoryUpload/Components/Terminal/terminal.scss +25 -27
- data/webpack/InsightsCloudSync/Components/InsightsTable/InsightsTableActions.js +19 -19
- data/webpack/InsightsCloudSync/Components/InsightsTable/__tests__/__snapshots__/InsightsTable.test.js.snap +0 -2
- data/webpack/InsightsCloudSync/Components/InsightsTable/__tests__/__snapshots__/InsightsTableActions.test.js.snap +14 -14
- data/webpack/InsightsCloudSync/InsightsCloudSync.js +4 -1
- data/webpack/InsightsCloudSync/InsightsCloudSyncActions.js +44 -20
- data/webpack/InsightsCloudSync/InsightsCloudSyncConstants.js +2 -0
- data/webpack/InsightsCloudSync/__tests__/__snapshots__/InsightsCloudSyncActions.test.js.snap +11 -7
- data/webpack/common/ForemanTasks/ForemanTasksActions.js +64 -0
- data/webpack/common/ForemanTasks/ForemanTasksHelpers.js +7 -0
- data/webpack/common/ForemanTasks/index.js +1 -0
- metadata +17 -2
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'test_plugin_helper'
|
2
|
+
require 'foreman_tasks/test_helpers'
|
3
|
+
|
4
|
+
class InventoryScheduledSyncTest < ActiveSupport::TestCase
|
5
|
+
include ForemanTasks::TestHelpers::WithInThreadExecutor
|
6
|
+
|
7
|
+
test 'Schedules an execution if auto upload is enabled' do
|
8
|
+
FactoryBot.create(:setting, :name => 'allow_auto_inventory_upload', :settings_type => "boolean", :category => "Setting::RhCloud", :default => false, :value => true)
|
9
|
+
|
10
|
+
InventorySync::Async::InventoryScheduledSync.any_instance.expects(:plan_org_sync).times(Organization.unscoped.count)
|
11
|
+
|
12
|
+
ForemanTasks.sync_task(InventorySync::Async::InventoryScheduledSync)
|
13
|
+
end
|
14
|
+
|
15
|
+
test 'Skips execution if auto upload is disabled' do
|
16
|
+
FactoryBot.create(:setting, :name => 'allow_auto_inventory_upload', :settings_type => "boolean", :category => "Setting::RhCloud", :default => false, :value => false)
|
17
|
+
|
18
|
+
InventorySync::Async::InventoryScheduledSync.any_instance.expects(:plan_org_sync).never
|
19
|
+
|
20
|
+
ForemanTasks.sync_task(InventorySync::Async::InventoryScheduledSync)
|
21
|
+
end
|
22
|
+
end
|
data/test/test_plugin_helper.rb
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
require 'test_helper'
|
3
3
|
|
4
4
|
# Add plugin to FactoryBot's paths
|
5
|
+
FactoryBot.definition_file_paths << "#{ForemanTasks::Engine.root}/test/factories"
|
6
|
+
FactoryBot.definition_file_paths << "#{ForemanRemoteExecution::Engine.root}/test/factories"
|
5
7
|
FactoryBot.definition_file_paths << File.join(File.dirname(__FILE__), 'factories')
|
6
8
|
# FactoryBot.definition_file_paths << "#{Katello::Engine.root}/test/factories"
|
7
9
|
FactoryBot.reload
|
@@ -33,7 +35,6 @@ module KatelloLocationFix
|
|
33
35
|
FactoryBot.create(:setting, name: 'default_location_subscribed_hosts')
|
34
36
|
FactoryBot.create(:setting, name: 'default_location_puppet_content')
|
35
37
|
Setting[:default_location_subscribed_hosts] = Location.first.title
|
36
|
-
Setting[:default_location_puppet_content] = Location.first.title
|
37
38
|
end
|
38
39
|
end
|
39
40
|
end
|
@@ -71,7 +71,7 @@ class SliceGeneratorTest < ActiveSupport::TestCase
|
|
71
71
|
json_str = generator.render
|
72
72
|
actual = JSON.parse(json_str.join("\n"))
|
73
73
|
|
74
|
-
assert_equal '
|
74
|
+
assert_equal '00000000-0000-0000-0000-000000000000', actual['report_slice_id']
|
75
75
|
assert_not_nil(actual_host = actual['hosts'].first)
|
76
76
|
assert_nil actual_host['ip_addresses']
|
77
77
|
assert_nil actual_host['mac_addresses']
|
@@ -102,7 +102,7 @@ class SliceGeneratorTest < ActiveSupport::TestCase
|
|
102
102
|
json_str = generator.render
|
103
103
|
actual = JSON.parse(json_str.join("\n"))
|
104
104
|
|
105
|
-
assert_equal '
|
105
|
+
assert_equal '00000000-0000-0000-0000-000000000000', actual['report_slice_id']
|
106
106
|
assert_not_nil(actual_host = actual['hosts'].first)
|
107
107
|
assert_not_nil(actual_system_profile = actual_host['system_profile'])
|
108
108
|
assert_equal 4, actual_system_profile['number_of_cpus']
|
@@ -120,7 +120,7 @@ class SliceGeneratorTest < ActiveSupport::TestCase
|
|
120
120
|
json_str = generator.render
|
121
121
|
actual = JSON.parse(json_str.join("\n"))
|
122
122
|
|
123
|
-
assert_equal '
|
123
|
+
assert_equal '00000000-0000-0000-0000-000000000000', actual['report_slice_id']
|
124
124
|
assert_not_nil(actual_host = actual['hosts'].first)
|
125
125
|
assert_equal @host.interfaces.where.not(ip: nil).first.ip, actual_host['ip_addresses'].first
|
126
126
|
assert_equal @host.interfaces.where.not(mac: nil).first.mac, actual_host['mac_addresses'].first
|
@@ -142,7 +142,7 @@ class SliceGeneratorTest < ActiveSupport::TestCase
|
|
142
142
|
json_str = generator.render
|
143
143
|
actual = JSON.parse(json_str.join("\n"))
|
144
144
|
|
145
|
-
assert_equal '
|
145
|
+
assert_equal '00000000-0000-0000-0000-000000000000', actual['report_slice_id']
|
146
146
|
assert_not_nil(actual_host = actual['hosts'].first)
|
147
147
|
assert_equal @host.interfaces.where.not(ip: nil).first.ip, actual_host['ip_addresses'].first
|
148
148
|
assert_equal @host.interfaces.where.not(mac: nil).first.mac, actual_host['mac_addresses'].first
|
@@ -172,7 +172,7 @@ class SliceGeneratorTest < ActiveSupport::TestCase
|
|
172
172
|
json_str = generator.render
|
173
173
|
actual = JSON.parse(json_str.join("\n"))
|
174
174
|
|
175
|
-
assert_equal '
|
175
|
+
assert_equal '00000000-0000-0000-0000-000000000000', actual['report_slice_id']
|
176
176
|
assert_not_nil(actual_host = actual['hosts'].first)
|
177
177
|
assert_equal @host.interfaces.where.not(ip: nil).first.ip, actual_host['ip_addresses'].first
|
178
178
|
assert_equal @host.interfaces.where.not(mac: nil).first.mac, actual_host['mac_addresses'].first
|
@@ -191,7 +191,7 @@ class SliceGeneratorTest < ActiveSupport::TestCase
|
|
191
191
|
json_str = generator.render
|
192
192
|
actual = JSON.parse(json_str.join("\n"))
|
193
193
|
|
194
|
-
assert_equal '
|
194
|
+
assert_equal '00000000-0000-0000-0000-000000000000', actual['report_slice_id']
|
195
195
|
assert_not_nil(actual_host = actual['hosts'].first)
|
196
196
|
assert_equal '10.230.230.1', actual_host['ip_addresses'].first
|
197
197
|
assert_not_nil(actual_system_profile = actual_host['system_profile'])
|
@@ -221,7 +221,7 @@ class SliceGeneratorTest < ActiveSupport::TestCase
|
|
221
221
|
json_str = generator.render
|
222
222
|
actual = JSON.parse(json_str.join("\n"))
|
223
223
|
|
224
|
-
assert_equal '
|
224
|
+
assert_equal '00000000-0000-0000-0000-000000000000', actual['report_slice_id']
|
225
225
|
assert_not_nil(actual_host = actual['hosts'].first)
|
226
226
|
assert_equal '10.230.230.100', actual_host['ip_addresses'].first
|
227
227
|
assert_not_nil(actual_system_profile = actual_host['system_profile'])
|
@@ -243,7 +243,7 @@ class SliceGeneratorTest < ActiveSupport::TestCase
|
|
243
243
|
json_str = generator.render
|
244
244
|
actual = JSON.parse(json_str.join("\n"))
|
245
245
|
|
246
|
-
assert_equal '
|
246
|
+
assert_equal '00000000-0000-0000-0000-000000000000', actual['report_slice_id']
|
247
247
|
assert_not_nil(actual_host = actual['hosts'].first)
|
248
248
|
assert_equal 'obfuscated_name', actual_host['fqdn']
|
249
249
|
assert_equal '1234', actual_host['account']
|
@@ -263,7 +263,7 @@ class SliceGeneratorTest < ActiveSupport::TestCase
|
|
263
263
|
|
264
264
|
obfuscated_fqdn = Digest::SHA1.hexdigest(@host.fqdn) + '.example.com'
|
265
265
|
|
266
|
-
assert_equal '
|
266
|
+
assert_equal '00000000-0000-0000-0000-000000000000', actual['report_slice_id']
|
267
267
|
assert_not_nil(actual_host = actual['hosts'].first)
|
268
268
|
assert_equal obfuscated_fqdn, actual_host['fqdn']
|
269
269
|
assert_equal '1234', actual_host['account']
|
@@ -282,7 +282,7 @@ class SliceGeneratorTest < ActiveSupport::TestCase
|
|
282
282
|
json_str = generator.render
|
283
283
|
actual = JSON.parse(json_str.join("\n"))
|
284
284
|
|
285
|
-
assert_equal '
|
285
|
+
assert_equal '00000000-0000-0000-0000-000000000000', actual['report_slice_id']
|
286
286
|
assert_not_nil(actual_host = actual['hosts'].first)
|
287
287
|
assert_equal @host.fqdn, actual_host['fqdn']
|
288
288
|
assert_equal '1234', actual_host['account']
|
@@ -296,6 +296,13 @@ class SliceGeneratorTest < ActiveSupport::TestCase
|
|
296
296
|
@host.hostgroup = hostgroup
|
297
297
|
@host.save!
|
298
298
|
|
299
|
+
ForemanInventoryUpload::Generators::Tags.any_instance.expects(:generate_parameters).returns(
|
300
|
+
[
|
301
|
+
['bool_param', true],
|
302
|
+
['int_param', 1],
|
303
|
+
]
|
304
|
+
)
|
305
|
+
|
299
306
|
Foreman.expects(:instance_id).twice.returns('satellite-id')
|
300
307
|
batch = Host.where(id: @host.id).in_batches.first
|
301
308
|
generator = create_generator(batch)
|
@@ -316,6 +323,8 @@ class SliceGeneratorTest < ActiveSupport::TestCase
|
|
316
323
|
assert_tag(@host.location.name, actual_host, 'location')
|
317
324
|
assert_tag(@host.organization.name, actual_host, 'organization')
|
318
325
|
assert_tag(@host.hostgroup.name, actual_host, 'hostgroup')
|
326
|
+
assert_tag('true', actual_host, 'bool_param', 'satellite_parameter')
|
327
|
+
assert_tag('1', actual_host, 'int_param', 'satellite_parameter')
|
319
328
|
|
320
329
|
assert_equal false, satellite_facts['is_hostname_obfuscated']
|
321
330
|
|
@@ -346,7 +355,7 @@ class SliceGeneratorTest < ActiveSupport::TestCase
|
|
346
355
|
json_str = generator.render
|
347
356
|
actual = JSON.parse(json_str.join("\n"))
|
348
357
|
|
349
|
-
assert_equal '
|
358
|
+
assert_equal '00000000-0000-0000-0000-000000000000', actual['report_slice_id']
|
350
359
|
assert_not_nil(actual_host = actual['hosts'].first)
|
351
360
|
assert_equal @host.fqdn, actual_host['fqdn']
|
352
361
|
assert_not_nil(host_facts = actual_host['facts']&.first)
|
@@ -368,7 +377,7 @@ class SliceGeneratorTest < ActiveSupport::TestCase
|
|
368
377
|
json_str = generator.render
|
369
378
|
actual = JSON.parse(json_str.join("\n"))
|
370
379
|
|
371
|
-
assert_equal '
|
380
|
+
assert_equal '00000000-0000-0000-0000-000000000000', actual['report_slice_id']
|
372
381
|
assert_not_nil(actual_host = actual['hosts'].first)
|
373
382
|
assert_equal @host.fqdn, actual_host['fqdn']
|
374
383
|
assert_not_nil(host_facts = actual_host['facts']&.first)
|
@@ -388,7 +397,7 @@ class SliceGeneratorTest < ActiveSupport::TestCase
|
|
388
397
|
json_str = generator.render
|
389
398
|
actual = JSON.parse(json_str.join("\n"))
|
390
399
|
|
391
|
-
assert_equal '
|
400
|
+
assert_equal '00000000-0000-0000-0000-000000000000', actual['report_slice_id']
|
392
401
|
assert_not_nil(actual_host = actual['hosts'].first)
|
393
402
|
assert_equal @host.fqdn, actual_host['fqdn']
|
394
403
|
assert_equal '1234', actual_host['account']
|
@@ -408,7 +417,7 @@ class SliceGeneratorTest < ActiveSupport::TestCase
|
|
408
417
|
json_str = generator.render
|
409
418
|
actual = JSON.parse(json_str.join("\n"))
|
410
419
|
|
411
|
-
assert_equal '
|
420
|
+
assert_equal '00000000-0000-0000-0000-000000000000', actual['report_slice_id']
|
412
421
|
assert_not_nil(actual_host = actual['hosts'].first)
|
413
422
|
assert_equal @host.fqdn, actual_host['fqdn']
|
414
423
|
assert_equal '1234', actual_host['account']
|
@@ -427,7 +436,7 @@ class SliceGeneratorTest < ActiveSupport::TestCase
|
|
427
436
|
json_str = generator.render
|
428
437
|
actual = JSON.parse(json_str.join("\n"))
|
429
438
|
|
430
|
-
assert_equal '
|
439
|
+
assert_equal '00000000-0000-0000-0000-000000000000', actual['report_slice_id']
|
431
440
|
assert_equal 1, generator.hosts_count
|
432
441
|
end
|
433
442
|
|
@@ -440,7 +449,7 @@ class SliceGeneratorTest < ActiveSupport::TestCase
|
|
440
449
|
json_str = generator.render
|
441
450
|
actual = JSON.parse(json_str.join("\n"))
|
442
451
|
|
443
|
-
assert_equal '
|
452
|
+
assert_equal '00000000-0000-0000-0000-000000000000', actual['report_slice_id']
|
444
453
|
assert_not_nil(actual_host = actual['hosts'].first)
|
445
454
|
assert_not_nil(actual_profile = actual_host['system_profile'])
|
446
455
|
assert_equal 1024, actual_profile['system_memory_bytes']
|
@@ -466,7 +475,7 @@ class SliceGeneratorTest < ActiveSupport::TestCase
|
|
466
475
|
json_str = generator.render
|
467
476
|
actual = JSON.parse(json_str.join("\n"))
|
468
477
|
|
469
|
-
assert_equal '
|
478
|
+
assert_equal '00000000-0000-0000-0000-000000000000', actual['report_slice_id']
|
470
479
|
assert_not_nil(actual_host = actual['hosts'].first)
|
471
480
|
assert_not_nil(actual_host['account'])
|
472
481
|
assert_not_empty(actual_host['account'])
|
@@ -483,7 +492,7 @@ class SliceGeneratorTest < ActiveSupport::TestCase
|
|
483
492
|
json_str = generator.render
|
484
493
|
actual = JSON.parse(json_str.join("\n"))
|
485
494
|
|
486
|
-
assert_equal '
|
495
|
+
assert_equal '00000000-0000-0000-0000-000000000000', actual['report_slice_id']
|
487
496
|
assert_not_nil(actual_host = actual['hosts'].first)
|
488
497
|
assert_not_nil(actual_profile = actual_host['system_profile'])
|
489
498
|
assert_equal 'Red Hat Test Linux 7.1 (TestId)', actual_profile['os_release']
|
@@ -498,7 +507,7 @@ class SliceGeneratorTest < ActiveSupport::TestCase
|
|
498
507
|
json_str = generator.render
|
499
508
|
actual = JSON.parse(json_str.join("\n"))
|
500
509
|
|
501
|
-
assert_equal '
|
510
|
+
assert_equal '00000000-0000-0000-0000-000000000000', actual['report_slice_id']
|
502
511
|
assert_not_nil(actual_host = actual['hosts'].first)
|
503
512
|
assert_not_nil(actual_profile = actual_host['system_profile'])
|
504
513
|
assert_equal 'virtual', actual_profile['infrastructure_type']
|
@@ -513,7 +522,7 @@ class SliceGeneratorTest < ActiveSupport::TestCase
|
|
513
522
|
json_str = generator.render
|
514
523
|
actual = JSON.parse(json_str.join("\n"))
|
515
524
|
|
516
|
-
assert_equal '
|
525
|
+
assert_equal '00000000-0000-0000-0000-000000000000', actual['report_slice_id']
|
517
526
|
assert_not_nil(actual_host = actual['hosts'].first)
|
518
527
|
assert_not_nil(actual_profile = actual_host['system_profile'])
|
519
528
|
assert_equal 'physical', actual_profile['infrastructure_type']
|
@@ -528,7 +537,7 @@ class SliceGeneratorTest < ActiveSupport::TestCase
|
|
528
537
|
json_str = generator.render
|
529
538
|
actual = JSON.parse(json_str.join("\n"))
|
530
539
|
|
531
|
-
assert_equal '
|
540
|
+
assert_equal '00000000-0000-0000-0000-000000000000', actual['report_slice_id']
|
532
541
|
assert_not_nil(actual_host = actual['hosts'].first)
|
533
542
|
assert_not_nil(actual_profile = actual_host['system_profile'])
|
534
543
|
assert_equal 'aws', actual_profile['cloud_provider']
|
@@ -543,7 +552,7 @@ class SliceGeneratorTest < ActiveSupport::TestCase
|
|
543
552
|
json_str = generator.render
|
544
553
|
actual = JSON.parse(json_str.join("\n"))
|
545
554
|
|
546
|
-
assert_equal '
|
555
|
+
assert_equal '00000000-0000-0000-0000-000000000000', actual['report_slice_id']
|
547
556
|
assert_not_nil(actual_host = actual['hosts'].first)
|
548
557
|
assert_not_nil(actual_profile = actual_host['system_profile'])
|
549
558
|
assert_equal 'google', actual_profile['cloud_provider']
|
@@ -558,7 +567,7 @@ class SliceGeneratorTest < ActiveSupport::TestCase
|
|
558
567
|
json_str = generator.render
|
559
568
|
actual = JSON.parse(json_str.join("\n"))
|
560
569
|
|
561
|
-
assert_equal '
|
570
|
+
assert_equal '00000000-0000-0000-0000-000000000000', actual['report_slice_id']
|
562
571
|
assert_not_nil(actual_host = actual['hosts'].first)
|
563
572
|
assert_not_nil(actual_profile = actual_host['system_profile'])
|
564
573
|
assert_equal 'azure', actual_profile['cloud_provider']
|
@@ -573,7 +582,7 @@ class SliceGeneratorTest < ActiveSupport::TestCase
|
|
573
582
|
json_str = generator.render
|
574
583
|
actual = JSON.parse(json_str.join("\n"))
|
575
584
|
|
576
|
-
assert_equal '
|
585
|
+
assert_equal '00000000-0000-0000-0000-000000000000', actual['report_slice_id']
|
577
586
|
assert_not_nil(actual_host = actual['hosts'].first)
|
578
587
|
assert_not_nil(actual_profile = actual_host['system_profile'])
|
579
588
|
assert_equal 'alibaba', actual_profile['cloud_provider']
|
@@ -588,7 +597,7 @@ class SliceGeneratorTest < ActiveSupport::TestCase
|
|
588
597
|
json_str = generator.render
|
589
598
|
actual = JSON.parse(json_str.join("\n"))
|
590
599
|
|
591
|
-
assert_equal '
|
600
|
+
assert_equal '00000000-0000-0000-0000-000000000000', actual['report_slice_id']
|
592
601
|
assert_not_nil(actual_host = actual['hosts'].first)
|
593
602
|
assert_not_nil(actual_profile = actual_host['system_profile'])
|
594
603
|
assert_equal 'alibaba', actual_profile['cloud_provider']
|
@@ -614,15 +623,43 @@ class SliceGeneratorTest < ActiveSupport::TestCase
|
|
614
623
|
json_str = generator.render
|
615
624
|
actual = JSON.parse(json_str.join("\n"))
|
616
625
|
|
617
|
-
assert_equal '
|
626
|
+
assert_equal '00000000-0000-0000-0000-000000000000', actual['report_slice_id']
|
618
627
|
assert_not_nil(actual_host = actual['hosts'].first)
|
619
628
|
assert_not_nil(actual_profile = actual_host['system_profile'])
|
620
629
|
assert_not_nil(actual_profile['installed_packages'])
|
621
630
|
end
|
622
631
|
|
632
|
+
test 'omits malformed bios_uuid field' do
|
633
|
+
FactoryBot.create(:fact_value, fact_name: fact_names['dmi::system::uuid'], value: 'test value', host: @host)
|
634
|
+
|
635
|
+
batch = Host.where(id: @host.id).in_batches.first
|
636
|
+
generator = create_generator(batch)
|
637
|
+
|
638
|
+
json_str = generator.render
|
639
|
+
actual = JSON.parse(json_str.join("\n"))
|
640
|
+
|
641
|
+
assert_equal '00000000-0000-0000-0000-000000000000', actual['report_slice_id']
|
642
|
+
assert_not_nil(actual_host = actual['hosts'].first)
|
643
|
+
assert_nil actual_host['bios_uuid']
|
644
|
+
end
|
645
|
+
|
646
|
+
test 'passes valid bios_uuid field' do
|
647
|
+
FactoryBot.create(:fact_value, fact_name: fact_names['dmi::system::uuid'], value: 'D30B0B42-7824-2635-C62D-491394DE43F7', host: @host)
|
648
|
+
|
649
|
+
batch = Host.where(id: @host.id).in_batches.first
|
650
|
+
generator = create_generator(batch)
|
651
|
+
|
652
|
+
json_str = generator.render
|
653
|
+
actual = JSON.parse(json_str.join("\n"))
|
654
|
+
|
655
|
+
assert_equal '00000000-0000-0000-0000-000000000000', actual['report_slice_id']
|
656
|
+
assert_not_nil(actual_host = actual['hosts'].first)
|
657
|
+
assert_not_nil actual_host['bios_uuid']
|
658
|
+
end
|
659
|
+
|
623
660
|
private
|
624
661
|
|
625
|
-
def create_generator(batch, name = '
|
662
|
+
def create_generator(batch, name = '00000000-0000-0000-0000-000000000000')
|
626
663
|
generator = ForemanInventoryUpload::Generators::Slice.new(batch, [], name)
|
627
664
|
if block_given?
|
628
665
|
yield(generator)
|
@@ -632,8 +669,8 @@ class SliceGeneratorTest < ActiveSupport::TestCase
|
|
632
669
|
generator
|
633
670
|
end
|
634
671
|
|
635
|
-
def assert_tag(expected_value, host, tag_id)
|
636
|
-
actual_tag = host['tags'].find { |tag| tag['namespace'] ==
|
672
|
+
def assert_tag(expected_value, host, tag_id, namespace = 'satellite')
|
673
|
+
actual_tag = host['tags'].find { |tag| tag['namespace'] == namespace && tag['key'] == tag_id }
|
637
674
|
assert_not_nil actual_tag
|
638
675
|
assert_equal expected_value, actual_tag['value']
|
639
676
|
end
|
@@ -8,7 +8,7 @@ exports[`FullScreenModal rendering render without Props 1`] = `
|
|
8
8
|
bsClass="modal"
|
9
9
|
dialogComponentClass={[Function]}
|
10
10
|
enforceFocus={true}
|
11
|
-
id="full-screen-terminal"
|
11
|
+
id="rh-cloud-inventory-full-screen-terminal"
|
12
12
|
keyboard={true}
|
13
13
|
manager={
|
14
14
|
ModalManager {
|
@@ -1,21 +1,19 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
margin: 30px 0 0 30px;
|
1
|
+
#rh-cloud-inventory-full-screen-terminal {
|
2
|
+
.modal-dialog {
|
3
|
+
width: 95%;
|
4
|
+
height: 95%;
|
5
|
+
margin: 30px 0 0 30px;
|
7
6
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
7
|
+
.modal-body {
|
8
|
+
padding: 0;
|
9
|
+
display: flex;
|
10
|
+
height: -webkit-fill-available;
|
11
|
+
height: -moz-available;
|
12
|
+
height: fill-available;
|
14
13
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
}
|
14
|
+
.rh-cloud-inventory-terminal {
|
15
|
+
margin: 0 -20px;
|
16
|
+
height: 100%;
|
19
17
|
}
|
20
18
|
}
|
21
19
|
}
|
@@ -31,6 +31,17 @@ export const PageDescription = () => (
|
|
31
31
|
About subscription watch
|
32
32
|
</a>
|
33
33
|
</p>
|
34
|
+
<p>
|
35
|
+
{__('For more information about Insights and Cloud Connector read')}
|
36
|
+
|
37
|
+
<a
|
38
|
+
href="https://console.redhat.com/security/insights/"
|
39
|
+
target="_blank"
|
40
|
+
rel="noopener noreferrer"
|
41
|
+
>
|
42
|
+
Red Hat Insights Data and Application Security
|
43
|
+
</a>
|
44
|
+
</p>
|
34
45
|
</div>
|
35
46
|
);
|
36
47
|
|
@@ -24,5 +24,16 @@ exports[`PageDescription rendering render without Props 1`] = `
|
|
24
24
|
About subscription watch
|
25
25
|
</a>
|
26
26
|
</p>
|
27
|
+
<p>
|
28
|
+
For more information about Insights and Cloud Connector read
|
29
|
+
|
30
|
+
<a
|
31
|
+
href="https://console.redhat.com/security/insights/"
|
32
|
+
rel="noopener noreferrer"
|
33
|
+
target="_blank"
|
34
|
+
>
|
35
|
+
Red Hat Insights Data and Application Security
|
36
|
+
</a>
|
37
|
+
</p>
|
27
38
|
</div>
|
28
39
|
`;
|
data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonActions.js
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
import React from 'react';
|
2
|
-
import {
|
3
|
-
import { withInterval } from 'foremanReact/redux/middlewares/IntervalMiddleware';
|
2
|
+
import { post } from 'foremanReact/redux/API';
|
4
3
|
import { addToast } from 'foremanReact/redux/actions/toasts';
|
5
4
|
import { translate as __ } from 'foremanReact/common/I18n';
|
6
5
|
import { inventoryUrl } from '../../../../ForemanInventoryHelpers';
|
@@ -9,7 +8,10 @@ import {
|
|
9
8
|
INVENTORY_SYNC,
|
10
9
|
INVENTORY_SYNC_TASK_UPDATE,
|
11
10
|
} from './SyncButtonConstants';
|
12
|
-
import {
|
11
|
+
import {
|
12
|
+
setupTaskPolling,
|
13
|
+
taskRelatedToast,
|
14
|
+
} from '../../../../../common/ForemanTasks';
|
13
15
|
|
14
16
|
export const handleSync = () => dispatch => {
|
15
17
|
dispatch(
|
@@ -21,9 +23,9 @@ export const handleSync = () => dispatch => {
|
|
21
23
|
task: { id },
|
22
24
|
},
|
23
25
|
}) => {
|
24
|
-
dispatch(
|
26
|
+
dispatch(setupInventorySyncTaskPolling(id, dispatch));
|
25
27
|
return dispatch(
|
26
|
-
|
28
|
+
taskRelatedToast(id, 'info', __('Inventory sync has started:'))
|
27
29
|
);
|
28
30
|
},
|
29
31
|
errorToast: inventorySyncErrorToast,
|
@@ -31,62 +33,25 @@ export const handleSync = () => dispatch => {
|
|
31
33
|
);
|
32
34
|
};
|
33
35
|
|
34
|
-
export const
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
),
|
52
|
-
})
|
53
|
-
);
|
54
|
-
}
|
55
|
-
if (result === 'error') {
|
56
|
-
dispatch(
|
57
|
-
taskPageRefererToast(
|
58
|
-
id,
|
59
|
-
'error',
|
60
|
-
__('Inventory sync has failed:'),
|
61
|
-
true
|
62
|
-
)
|
63
|
-
);
|
64
|
-
}
|
65
|
-
stopTaskInterval();
|
66
|
-
},
|
67
|
-
errorToast: inventorySyncErrorToast,
|
68
|
-
})
|
69
|
-
)
|
70
|
-
);
|
71
|
-
};
|
72
|
-
|
73
|
-
const inventorySyncErrorToast = ({ message, response }) =>
|
74
|
-
`${__('Inventory sync has failed: ')} ${response.data?.message || message}`;
|
75
|
-
|
76
|
-
const taskPageRefererToast = (taskID, toastType, prefix, sticky = false) =>
|
77
|
-
addToast({
|
78
|
-
sticky,
|
79
|
-
type: toastType,
|
80
|
-
message: (
|
81
|
-
<span>
|
82
|
-
{prefix}{' '}
|
83
|
-
<a
|
84
|
-
target="_blank"
|
85
|
-
rel="noopener noreferrer"
|
86
|
-
href={foremanUrl(`/foreman_tasks/tasks/${taskID}`)}
|
87
|
-
>
|
88
|
-
{__('view the task page for more details')}
|
89
|
-
</a>
|
90
|
-
</span>
|
91
|
-
),
|
36
|
+
export const setupInventorySyncTaskPolling = (id, dispatch) =>
|
37
|
+
setupTaskPolling({
|
38
|
+
taskId: id,
|
39
|
+
key: INVENTORY_SYNC_TASK_UPDATE,
|
40
|
+
onTaskSuccess: ({
|
41
|
+
output: {
|
42
|
+
host_statuses: { sync, disconnect },
|
43
|
+
},
|
44
|
+
}) =>
|
45
|
+
dispatch(
|
46
|
+
addToast({
|
47
|
+
sticky: true,
|
48
|
+
type: 'success',
|
49
|
+
message: <Toast syncHosts={sync} disconnectHosts={disconnect} />,
|
50
|
+
})
|
51
|
+
),
|
52
|
+
dispatch,
|
92
53
|
});
|
54
|
+
|
55
|
+
const inventorySyncErrorToast = message =>
|
56
|
+
`${__('Inventory sync has failed: ')} ${message.response?.data?.message ||
|
57
|
+
message}`;
|