foreman_rh_cloud 3.0.23 → 4.0.24
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/models/insights_client_report_status.rb +4 -0
- data/app/services/foreman_rh_cloud/cloud_request_forwarder.rb +0 -8
- data/config/package-lock.json.plugin +1785 -3628
- data/lib/foreman_inventory_upload.rb +9 -1
- data/lib/foreman_inventory_upload/generators/queries.rb +1 -0
- data/lib/foreman_inventory_upload/generators/slice.rb +1 -0
- data/lib/foreman_rh_cloud/engine.rb +14 -9
- data/lib/foreman_rh_cloud/version.rb +1 -1
- data/lib/insights_cloud/async/insights_client_status_aging.rb +17 -0
- data/lib/inventory_sync/async/host_result.rb +4 -0
- data/lib/inventory_sync/async/inventory_hosts_sync.rb +10 -0
- data/lib/inventory_sync/async/inventory_self_host_sync.rb +30 -0
- data/lib/inventory_sync/async/query_inventory_job.rb +5 -1
- data/package.json +1 -1
- data/test/controllers/insights_cloud/api/machine_telemetries_controller_test.rb +41 -0
- data/test/jobs/insights_client_status_aging_test.rb +33 -0
- data/test/jobs/inventory_hosts_sync_test.rb +2 -0
- data/test/jobs/inventory_self_host_sync_test.rb +103 -0
- data/test/test_plugin_helper.rb +0 -1
- data/test/unit/services/foreman_rh_cloud/cloud_request_forwarder_test.rb +3 -3
- data/test/unit/slice_generator_test.rb +15 -0
- data/webpack/InsightsCloudSync/Components/InsightsTable/__tests__/__snapshots__/InsightsTable.test.js.snap +0 -2
- data/webpack/InsightsCloudSync/Components/RemediationModal/RemediateButton.js +0 -1
- data/webpack/InsightsCloudSync/Components/__tests__/__snapshots__/NoTokenEmptyState.test.js.snap +13 -20
- data/webpack/InsightsCloudSync/__snapshots__/InsightsCloudSync.test.js.snap +2 -2
- metadata +8 -2
@@ -70,8 +70,16 @@ module ForemanInventoryUpload
|
|
70
70
|
folder
|
71
71
|
end
|
72
72
|
|
73
|
+
def self.inventory_base_url
|
74
|
+
ForemanRhCloud.base_url + "/api/inventory/v1/hosts"
|
75
|
+
end
|
76
|
+
|
73
77
|
def self.inventory_export_url
|
74
78
|
tags = URI.encode("satellite/satellite_instance_id=#{Foreman.instance_id}")
|
75
|
-
|
79
|
+
inventory_base_url + "?tags=#{tags}"
|
80
|
+
end
|
81
|
+
|
82
|
+
def self.inventory_self_url
|
83
|
+
inventory_base_url + "?hostname_or_id=#{ForemanRhCloud.foreman_host.fqdn}"
|
76
84
|
end
|
77
85
|
end
|
@@ -49,6 +49,7 @@ module ForemanInventoryUpload
|
|
49
49
|
@stream.simple_field('satellite_id', uuid_value!(host.subscription_facet&.uuid))
|
50
50
|
@stream.simple_field('bios_uuid', bios_uuid(host))
|
51
51
|
@stream.simple_field('vm_uuid', uuid_value(fact_value(host, 'virt::uuid')))
|
52
|
+
@stream.simple_field('insights_id', uuid_value(fact_value(host, 'insights_id')))
|
52
53
|
report_ip_addresses(host, host_ips_cache)
|
53
54
|
report_mac_addresses(host)
|
54
55
|
@stream.object_field('system_profile') do
|
@@ -6,6 +6,18 @@ module ForemanRhCloud
|
|
6
6
|
class Engine < ::Rails::Engine
|
7
7
|
engine_name 'foreman_rh_cloud'
|
8
8
|
|
9
|
+
def self.register_scheduled_task(task_class, cronline)
|
10
|
+
return if ForemanTasks::RecurringLogic.joins(:tasks)
|
11
|
+
.merge(ForemanTasks::Task.where(label: task_class.name))
|
12
|
+
.exists?
|
13
|
+
|
14
|
+
User.as_anonymous_admin do
|
15
|
+
recurring_logic = ForemanTasks::RecurringLogic.new_from_cronline(cronline)
|
16
|
+
recurring_logic.save!
|
17
|
+
recurring_logic.start(task_class)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
9
21
|
initializer 'foreman_rh_cloud.load_default_settings', :before => :load_config_initializers do
|
10
22
|
require_dependency File.expand_path('../../app/models/setting/rh_cloud.rb', __dir__)
|
11
23
|
end
|
@@ -138,15 +150,8 @@ module ForemanRhCloud
|
|
138
150
|
# skip object creation when admin user is not present, for example in test DB
|
139
151
|
if User.unscoped.find_by_login(User::ANONYMOUS_ADMIN).present?
|
140
152
|
::ForemanTasks.dynflow.config.on_init(false) do |world|
|
141
|
-
|
142
|
-
|
143
|
-
).exists?
|
144
|
-
User.as_anonymous_admin do
|
145
|
-
recurring_logic = ForemanTasks::RecurringLogic.new_from_cronline("0 0 * * *")
|
146
|
-
recurring_logic.save!
|
147
|
-
recurring_logic.start(InventorySync::Async::InventoryScheduledSync)
|
148
|
-
end
|
149
|
-
end
|
153
|
+
ForemanRhCloud::Engine.register_scheduled_task(InventorySync::Async::InventoryScheduledSync, '0 0 * * *')
|
154
|
+
ForemanRhCloud::Engine.register_scheduled_task(InsightsCloud::Async::InsightsClientStatusAging, '0 0 * * *')
|
150
155
|
end
|
151
156
|
end
|
152
157
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module InsightsCloud
|
2
|
+
module Async
|
3
|
+
class InsightsClientStatusAging < ::Actions::EntryAction
|
4
|
+
include ::Actions::RecurringAction
|
5
|
+
|
6
|
+
def run
|
7
|
+
# update all stale records to "not reporting" counterpart
|
8
|
+
InsightsClientReportStatus.stale.reporting.update_all(status: InsightsClientReportStatus::NO_REPORT)
|
9
|
+
InsightsClientReportStatus.stale.not_managed_with_data.update_all(status: InsightsClientReportStatus::NOT_MANAGED)
|
10
|
+
end
|
11
|
+
|
12
|
+
def logger
|
13
|
+
action_logger
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
module InventorySync
|
2
2
|
module Async
|
3
3
|
class HostResult
|
4
|
+
attr_reader :uuid_by_fqdn
|
5
|
+
|
4
6
|
def initialize(result)
|
5
7
|
@total = result['total']
|
6
8
|
@count = result['count']
|
@@ -8,6 +10,7 @@ module InventorySync
|
|
8
10
|
@per_page = result['per_page']
|
9
11
|
@sub_ids = result["results"].map { |host| host['subscription_manager_id'] }
|
10
12
|
@uuid_by_sub_id = Hash[result["results"].map { |host| [host['subscription_manager_id'], host['id']] }]
|
13
|
+
@uuid_by_fqdn = Hash[result["results"].map { |host| [host['fqdn'].downcase, host['id']] }]
|
11
14
|
end
|
12
15
|
|
13
16
|
def status_hashes
|
@@ -19,6 +22,7 @@ module InventorySync
|
|
19
22
|
host_id: host_id,
|
20
23
|
status: InventorySync::InventoryStatus::SYNC,
|
21
24
|
reported_at: DateTime.current,
|
25
|
+
type: InventorySync::InventoryStatus.name,
|
22
26
|
}
|
23
27
|
end
|
24
28
|
end.compact
|
@@ -4,6 +4,12 @@ module InventorySync
|
|
4
4
|
set_callback :iteration, :around, :setup_facet_transaction
|
5
5
|
set_callback :step, :around, :create_facets
|
6
6
|
|
7
|
+
def plan
|
8
|
+
# by default the tasks will be executed concurrently
|
9
|
+
plan_self
|
10
|
+
plan_self_host_sync
|
11
|
+
end
|
12
|
+
|
7
13
|
def setup_facet_transaction
|
8
14
|
InsightsFacet.transaction do
|
9
15
|
yield
|
@@ -33,6 +39,10 @@ module InventorySync
|
|
33
39
|
InsightsFacet.where(host_id: host_id).update_all(uuid: uuids_hash[host_id])
|
34
40
|
end
|
35
41
|
end
|
42
|
+
|
43
|
+
def plan_self_host_sync
|
44
|
+
plan_action InventorySync::Async::InventorySelfHostSync
|
45
|
+
end
|
36
46
|
end
|
37
47
|
end
|
38
48
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module InventorySync
|
2
|
+
module Async
|
3
|
+
class InventorySelfHostSync < QueryInventoryJob
|
4
|
+
set_callback :step, :around, :create_facets
|
5
|
+
|
6
|
+
def create_facets
|
7
|
+
# get the results from the event
|
8
|
+
results = yield
|
9
|
+
|
10
|
+
add_missing_insights_facet(results.uuid_by_fqdn) unless results.uuid_by_fqdn.empty?
|
11
|
+
results
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def add_missing_insights_facet(uuids_hash)
|
17
|
+
facet = InsightsFacet.find_or_create_by(host_id: ForemanRhCloud.foreman_host.id) do |facet|
|
18
|
+
facet.uuid = uuids_hash.values.first
|
19
|
+
end
|
20
|
+
|
21
|
+
# fix empty uuid in case the facet already exists
|
22
|
+
facet.update(uuid: uuids_hash.values.first) unless facet.uuid
|
23
|
+
end
|
24
|
+
|
25
|
+
def request_url
|
26
|
+
ForemanInventoryUpload.inventory_self_url
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -31,7 +31,7 @@ module InventorySync
|
|
31
31
|
def query_inventory(page = 1)
|
32
32
|
hosts_inventory_response = execute_cloud_request(
|
33
33
|
method: :get,
|
34
|
-
url:
|
34
|
+
url: request_url,
|
35
35
|
headers: {
|
36
36
|
params: {
|
37
37
|
per_page: 100,
|
@@ -46,6 +46,10 @@ module InventorySync
|
|
46
46
|
def logger
|
47
47
|
action_logger
|
48
48
|
end
|
49
|
+
|
50
|
+
def request_url
|
51
|
+
ForemanInventoryUpload.inventory_export_url
|
52
|
+
end
|
49
53
|
end
|
50
54
|
end
|
51
55
|
end
|
data/package.json
CHANGED
@@ -11,6 +11,39 @@ module InsightsCloud::Api
|
|
11
11
|
host = FactoryBot.create(:host, :with_subscription, :organization => org)
|
12
12
|
User.current = ::Katello::CpConsumerUser.new(:uuid => host.subscription_facet.uuid, :login => host.subscription_facet.uuid)
|
13
13
|
InsightsCloud::Api::MachineTelemetriesController.any_instance.stubs(:upstream_owner).returns({ 'uuid' => 'abcdefg' })
|
14
|
+
|
15
|
+
@cert1 = "-----BEGIN CERTIFICATE-----\r\n" +
|
16
|
+
"MIIFdDCCA1ygAwIBAgIJAM5Uqykb3EAtMA0GCSqGSIb3DQEBCwUAME8xCzAJBgNV\r\n" +
|
17
|
+
"BAYTAklMMREwDwYDVQQIDAhUZWwgQXZpdjEUMBIGA1UECgwLVGhlIEZvcmVtYW4x\r\n" +
|
18
|
+
"FzAVBgNVBAMMDnRoZWZvcmVtYW4ub3JnMB4XDTE4MDMyNDEyMzYyOFoXDTI4MDMy\r\n" +
|
19
|
+
"MTEyMzYyOFowTzELMAkGA1UEBhMCSUwxETAPBgNVBAgMCFRlbCBBdml2MRQwEgYD\r\n" +
|
20
|
+
"VQQKDAtUaGUgRm9yZW1hbjEXMBUGA1UEAwwOdGhlZm9yZW1hbi5vcmcwggIiMA0G\r\n" +
|
21
|
+
"CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDF04/s4h+BgHPG1HDZ/sDlYq925pkc\r\n" +
|
22
|
+
"RTVAfnE2EXDAmZ6W4Q9ueDY65MHe3ZWO5Dg72kNSP2sK9kRI7Dk5CAFOgyw1rH8t\r\n" +
|
23
|
+
"Hd1+0xp/lv6e4SvSYghxIL68vFe0ftKkm1usqejBM5ZTgKr7JCI+XSIN36F65Kde\r\n" +
|
24
|
+
"c+vxwBnayuhP04r9/aaE/709SXML4eRVYW8I3qFy9FPtUOm+bY8U2PIv5fHayqbG\r\n" +
|
25
|
+
"cL/4t3+MCtMhHJsLzdBXya+1P5t+HcKjUNlmwoUF961YAktVuEFloGd0RMRlqF3/\r\n" +
|
26
|
+
"itU3QNlXgA5QBIciE5VPr/PiqgMC3zgd5avjF4OribZ+N9AATLiQMW78il5wSfcc\r\n" +
|
27
|
+
"kQjU9ChOLrzku455vQ8KE4bc0qvpCWGfUah6MvL9JB+TQkRl/8kxl0b9ZinIvJDH\r\n" +
|
28
|
+
"ynVMb4cB/TDEjrjOfzn9mWLH0ZJqjmc2bER/G12WQxOaYLxdVwRStD3Yh6PtiFWu\r\n" +
|
29
|
+
"sXOk19UOTVkeuvGFVtvzLfEwQ1lDEo7+VBQz8FG/HBu2Hpq3IwCFrHuicikwjQJk\r\n" +
|
30
|
+
"nfturgD0rBOKEc1qWNZRCvovYOLL6ihvv5Orujsx5ZCHOAtnVNxkvIlFt2RS45LF\r\n" +
|
31
|
+
"MtPJyhAc6SjitllfUEirxprsbmeSZqrIfzcGaEhgOSnyik1WMv6bYiqPfBg8Fzjh\r\n" +
|
32
|
+
"vOCbtiDNPmvgOwIDAQABo1MwUTAdBgNVHQ4EFgQUtkAgQopsTtG9zSG3MgW2IxHD\r\n" +
|
33
|
+
"MDwwHwYDVR0jBBgwFoAUtkAgQopsTtG9zSG3MgW2IxHDMDwwDwYDVR0TAQH/BAUw\r\n" +
|
34
|
+
"AwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAJq7iN+ZroRBweNhvUobxs75bLIV6tNn1\r\n" +
|
35
|
+
"MdNHDRA+hezwf+gxHZhFyaAHfTpst2/9leK5Qe5Zd6gZLr3E5/8ppQuRod72H39B\r\n" +
|
36
|
+
"vxMlG5zxDss0WMo3vZeKZbTY6QhXi/lY2IZ6OGV4feSvCsYxn27GTjjrRUSLFeHH\r\n" +
|
37
|
+
"JVemCwCDMavaE3+OIY4v2P4FcG+MjUvfOB9ahI24TWL7YgrsNVmJjCILq+EeUj0t\r\n" +
|
38
|
+
"Gde1SXVyLkqt7PoxHRJAE0BCEMJSnjxaVB329acJgeehBUxjj4CCPqtDxtbz9HEH\r\n" +
|
39
|
+
"mOKfNdaKpFor+DUeEKUWVGnr9U9xOaC+Ws+oX7MIEUCDM7p2ob4JwcjnFs1jZgHh\r\n" +
|
40
|
+
"Hwig+i7doTlc701PvKWO96fuNHK3B3/jTb1fVvSZ49O/RvY1VWODdUdxWmXGHNh3\r\n" +
|
41
|
+
"LoR8tSPEb46lC2DXGaIQumqQt8PnBG+vL1qkQa1SGTV7dJ8TTbxbv0S+sS+igkk9\r\n" +
|
42
|
+
"zsIEK8Ea3Ep935cXximz0faAAKHSA+It+xHLAyDtqy2KaAEBgGsBuuWlUfK6TaP3\r\n" +
|
43
|
+
"Gwdjct3y4yYUO45lUsUfHqX8vk/4ttW5zYeDiW+HArJz+9VUXNbEdury4kGuHgBj\r\n" +
|
44
|
+
"xHD4Bsul65+hHZ9QywKU26F1A6TLkYpQ2rk/Dx9LGICM4m4IlHjWJPFsQdtkyOor\r\n" +
|
45
|
+
"osxMtcaZZ1E=\r\n" +
|
46
|
+
"-----END CERTIFICATE-----"
|
14
47
|
end
|
15
48
|
|
16
49
|
test "should respond with response from cloud" do
|
@@ -30,6 +63,14 @@ module InsightsCloud::Api
|
|
30
63
|
::ForemanRhCloud::CloudRequestForwarder.any_instance.expects(:execute_cloud_request).with do |opts|
|
31
64
|
opts[:headers][:content_type] == 'application/json'
|
32
65
|
end.returns(res)
|
66
|
+
InsightsCloud::Api::MachineTelemetriesController.any_instance.expects(:candlepin_id_cert)
|
67
|
+
.returns(
|
68
|
+
{
|
69
|
+
cert: @cert1,
|
70
|
+
key: OpenSSL::PKey::RSA.new(1024).to_pem,
|
71
|
+
}
|
72
|
+
)
|
73
|
+
InsightsCloud::Api::MachineTelemetriesController.any_instance.expects(:cp_owner_id).returns('123')
|
33
74
|
|
34
75
|
post :forward_request, as: :json, params: { "path" => "static/v1/test", "machine_telemetry" => {"foo" => "bar"} }
|
35
76
|
assert_equal @body, @response.body
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'test_plugin_helper'
|
2
|
+
require 'foreman_tasks/test_helpers'
|
3
|
+
|
4
|
+
class InsightsClientStatusAgingTest < ActiveSupport::TestCase
|
5
|
+
include ForemanTasks::TestHelpers::WithInThreadExecutor
|
6
|
+
|
7
|
+
setup do
|
8
|
+
User.current = User.find_by(login: 'secret_admin')
|
9
|
+
|
10
|
+
@host1 = FactoryBot.create(:host)
|
11
|
+
@host2 = FactoryBot.create(:host)
|
12
|
+
@host3 = FactoryBot.create(:host)
|
13
|
+
@host4 = FactoryBot.create(:host)
|
14
|
+
|
15
|
+
@hosts = [@host1, @host2, @host3, @host4]
|
16
|
+
end
|
17
|
+
|
18
|
+
test 'stale statuses should change' do
|
19
|
+
InsightsClientReportStatus.find_or_initialize_by(host_id: @host1.id).update(status: InsightsClientReportStatus::REPORTING, reported_at: Time.now - InsightsClientReportStatus::REPORT_INTERVAL - 1.day)
|
20
|
+
InsightsClientReportStatus.find_or_initialize_by(host_id: @host2.id).update(status: InsightsClientReportStatus::NO_REPORT, reported_at: Time.now - InsightsClientReportStatus::REPORT_INTERVAL - 1.day)
|
21
|
+
InsightsClientReportStatus.find_or_initialize_by(host_id: @host3.id).update(status: InsightsClientReportStatus::NOT_MANAGED, reported_at: Time.now - InsightsClientReportStatus::REPORT_INTERVAL - 1.day)
|
22
|
+
InsightsClientReportStatus.find_or_initialize_by(host_id: @host4.id).update(status: InsightsClientReportStatus::NOT_MANAGED_WITH_DATA, reported_at: Time.now - InsightsClientReportStatus::REPORT_INTERVAL - 1.day)
|
23
|
+
|
24
|
+
ForemanTasks.sync_task(InsightsCloud::Async::InsightsClientStatusAging)
|
25
|
+
|
26
|
+
@hosts.each(&:reload)
|
27
|
+
|
28
|
+
assert_equal InsightsClientReportStatus::NO_REPORT, @host1.get_status(InsightsClientReportStatus).status
|
29
|
+
assert_equal InsightsClientReportStatus::NO_REPORT, @host2.get_status(InsightsClientReportStatus).status
|
30
|
+
assert_equal InsightsClientReportStatus::NOT_MANAGED, @host3.get_status(InsightsClientReportStatus).status
|
31
|
+
assert_equal InsightsClientReportStatus::NOT_MANAGED, @host4.get_status(InsightsClientReportStatus).status
|
32
|
+
end
|
33
|
+
end
|
@@ -243,6 +243,7 @@ class InventoryHostsSyncTest < ActiveSupport::TestCase
|
|
243
243
|
|
244
244
|
test 'Inventory should sync UUID for existing Insights Facets' do
|
245
245
|
InventorySync::Async::InventoryHostsSync.any_instance.expects(:query_inventory).returns(@inventory)
|
246
|
+
InventorySync::Async::InventoryHostsSync.any_instance.expects(:plan_self_host_sync)
|
246
247
|
|
247
248
|
@host2.build_insights.save
|
248
249
|
|
@@ -255,6 +256,7 @@ class InventoryHostsSyncTest < ActiveSupport::TestCase
|
|
255
256
|
|
256
257
|
test 'Inventory should sync UUID for new Insights Facets' do
|
257
258
|
InventorySync::Async::InventoryHostsSync.any_instance.expects(:query_inventory).returns(@inventory)
|
259
|
+
InventorySync::Async::InventoryHostsSync.any_instance.expects(:plan_self_host_sync)
|
258
260
|
|
259
261
|
ForemanTasks.sync_task(InventorySync::Async::InventoryHostsSync)
|
260
262
|
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require 'test_plugin_helper'
|
2
|
+
require 'foreman_tasks/test_helpers'
|
3
|
+
|
4
|
+
class InventorySelfHostSyncTest < ActiveSupport::TestCase
|
5
|
+
include ForemanTasks::TestHelpers::WithInThreadExecutor
|
6
|
+
|
7
|
+
setup do
|
8
|
+
User.current = User.find_by(login: 'secret_admin')
|
9
|
+
|
10
|
+
# this host would pass our plugin queries, so it could be uploaded to the cloud.
|
11
|
+
@host1 = FactoryBot.create(:host)
|
12
|
+
@host1_inventory_id = '3255d080-e6c1-44e2-8d72-b044b9a38d8f'
|
13
|
+
|
14
|
+
ForemanInventoryUpload::Generators::Queries.instance_variable_set(:@fact_names, nil)
|
15
|
+
|
16
|
+
ForemanRhCloud.stubs(:foreman_host).returns(@host1)
|
17
|
+
|
18
|
+
inventory_json = <<-INVENTORY_JSON
|
19
|
+
{
|
20
|
+
"total": 1,
|
21
|
+
"count": 1,
|
22
|
+
"page": 1,
|
23
|
+
"per_page": 1,
|
24
|
+
"results": [
|
25
|
+
{
|
26
|
+
"insights_id": "e0dc5144-d78e-43ed-97be-a7a21d1b6946",
|
27
|
+
"rhel_machine_id": null,
|
28
|
+
"subscription_manager_id": "0f97ee19-6862-4900-aea4-f121c8754776",
|
29
|
+
"satellite_id": "0f97ee19-6862-4900-aea4-f121c8754776",
|
30
|
+
"bios_uuid": "6a0b199a-8225-4ade-ae44-3b18cfc84a01",
|
31
|
+
"ip_addresses": [
|
32
|
+
"192.168.122.136"
|
33
|
+
],
|
34
|
+
"fqdn": "#{@host1.fqdn}",
|
35
|
+
"mac_addresses": [
|
36
|
+
"52:54:00:02:d1:2a",
|
37
|
+
"00:00:00:00:00:00"
|
38
|
+
],
|
39
|
+
"external_id": null,
|
40
|
+
"id": "#{@host1_inventory_id}",
|
41
|
+
"account": "1460290",
|
42
|
+
"display_name": "insights-rh8.example.com",
|
43
|
+
"ansible_host": null,
|
44
|
+
"facts": [
|
45
|
+
{
|
46
|
+
"namespace": "satellite",
|
47
|
+
"facts": {
|
48
|
+
"virtual_host_name": "virt-who-nobody.home-1",
|
49
|
+
"satellite_instance_id": "fc4d0cb0-a0b0-421e-b096-b028319b8e47",
|
50
|
+
"is_simple_content_access": false,
|
51
|
+
"distribution_version": "8.3",
|
52
|
+
"satellite_version": "6.8.4",
|
53
|
+
"organization_id": 1,
|
54
|
+
"is_hostname_obfuscated": false,
|
55
|
+
"virtual_host_uuid": "a90e6294-4766-420a-8dc0-3ec5b96d60ec"
|
56
|
+
}
|
57
|
+
},
|
58
|
+
{
|
59
|
+
"namespace": "yupana",
|
60
|
+
"facts": {
|
61
|
+
"report_platform_id": "d37afa50-08ce-4efb-a0e5-759c2a016661",
|
62
|
+
"report_slice_id": "5bf791d7-5e30-4a3c-929a-11dd9fa6eb72",
|
63
|
+
"source": "Satellite",
|
64
|
+
"yupana_host_id": "78c62486-0ac4-406c-a4c0-3a1f81112a2d",
|
65
|
+
"account": "1460290"
|
66
|
+
}
|
67
|
+
}
|
68
|
+
],
|
69
|
+
"reporter": "puptoo",
|
70
|
+
"stale_timestamp": "2021-03-19T06:05:12.092136+00:00",
|
71
|
+
"stale_warning_timestamp": "2021-03-26T06:05:12.092136+00:00",
|
72
|
+
"culled_timestamp": "2021-04-02T06:05:12.092136+00:00",
|
73
|
+
"created": "2021-02-08T13:22:50.555671+00:00",
|
74
|
+
"updated": "2021-03-18T01:05:12.131847+00:00"
|
75
|
+
}
|
76
|
+
]
|
77
|
+
}
|
78
|
+
INVENTORY_JSON
|
79
|
+
@inventory = JSON.parse(inventory_json)
|
80
|
+
end
|
81
|
+
|
82
|
+
test 'Inventory should sync UUID for existing Insights Facets' do
|
83
|
+
InventorySync::Async::InventorySelfHostSync.any_instance.expects(:query_inventory).returns(@inventory)
|
84
|
+
|
85
|
+
@host1.build_insights.save
|
86
|
+
|
87
|
+
ForemanTasks.sync_task(InventorySync::Async::InventorySelfHostSync)
|
88
|
+
|
89
|
+
@host1.reload
|
90
|
+
|
91
|
+
assert_equal @host1_inventory_id, @host1.insights.uuid
|
92
|
+
end
|
93
|
+
|
94
|
+
test 'Inventory should sync UUID for new Insights Facets' do
|
95
|
+
InventorySync::Async::InventorySelfHostSync.any_instance.expects(:query_inventory).returns(@inventory)
|
96
|
+
|
97
|
+
ForemanTasks.sync_task(InventorySync::Async::InventorySelfHostSync)
|
98
|
+
|
99
|
+
@host1.reload
|
100
|
+
|
101
|
+
assert_equal @host1_inventory_id, @host1.insights.uuid
|
102
|
+
end
|
103
|
+
end
|
data/test/test_plugin_helper.rb
CHANGED
@@ -35,7 +35,6 @@ module KatelloLocationFix
|
|
35
35
|
FactoryBot.create(:setting, name: 'default_location_subscribed_hosts')
|
36
36
|
FactoryBot.create(:setting, name: 'default_location_puppet_content')
|
37
37
|
Setting[:default_location_subscribed_hosts] = Location.first.title
|
38
|
-
Setting[:default_location_puppet_content] = Location.first.title
|
39
38
|
end
|
40
39
|
end
|
41
40
|
end
|
@@ -42,9 +42,9 @@ class CloudRequestForwarderTest < ActiveSupport::TestCase
|
|
42
42
|
test 'should prepare correct cloud url' do
|
43
43
|
paths = {
|
44
44
|
"/redhat_access/r/insights/platform/module-update-router/v1/channel?module=insights-core" => "https://cert.cloud.redhat.com/api/module-update-router/v1/channel?module=insights-core",
|
45
|
-
"/redhat_access/r/insights/v1/static/release/insights-core.egg" => "https://
|
46
|
-
"/redhat_access/r/insights/v1/static/uploader.v2.json" => "https://
|
47
|
-
"/redhat_access/r/insights/v1/static/uploader.v2.json.asc" => "https://
|
45
|
+
"/redhat_access/r/insights/v1/static/release/insights-core.egg" => "https://cert-api.access.redhat.com/r/insights/v1/static/release/insights-core.egg",
|
46
|
+
"/redhat_access/r/insights/v1/static/uploader.v2.json" => "https://cert-api.access.redhat.com/r/insights/v1/static/uploader.v2.json",
|
47
|
+
"/redhat_access/r/insights/v1/static/uploader.v2.json.asc" => "https://cert-api.access.redhat.com/r/insights/v1/static/uploader.v2.json.asc",
|
48
48
|
"/redhat_access/r/insights/platform/inventory/v1/hosts" => "https://cert.cloud.redhat.com/api/inventory/v1/hosts",
|
49
49
|
"/redhat_access/r/insights/platform/ingress/v1/upload" => "https://cert.cloud.redhat.com/api/ingress/v1/upload",
|
50
50
|
"/redhat_access/r/insights/uploads/67200803-132b-474b-a6f9-37be74185df4" => "https://cert-api.access.redhat.com/r/insights/uploads/67200803-132b-474b-a6f9-37be74185df4",
|
@@ -53,6 +53,7 @@ class SliceGeneratorTest < ActiveSupport::TestCase
|
|
53
53
|
'insights_client::hostname',
|
54
54
|
'insights_client::obfuscate_ip_enabled',
|
55
55
|
'insights_client::ips',
|
56
|
+
'insights_id',
|
56
57
|
]
|
57
58
|
end
|
58
59
|
|
@@ -657,6 +658,20 @@ class SliceGeneratorTest < ActiveSupport::TestCase
|
|
657
658
|
assert_not_nil actual_host['bios_uuid']
|
658
659
|
end
|
659
660
|
|
661
|
+
test 'passes valid insights_id field' do
|
662
|
+
FactoryBot.create(:fact_value, fact_name: fact_names['insights_id'], value: 'D30B0B42-7824-2635-C62D-491394DE43F7', host: @host)
|
663
|
+
|
664
|
+
batch = Host.where(id: @host.id).in_batches.first
|
665
|
+
generator = create_generator(batch)
|
666
|
+
|
667
|
+
json_str = generator.render
|
668
|
+
actual = JSON.parse(json_str.join("\n"))
|
669
|
+
|
670
|
+
assert_equal '00000000-0000-0000-0000-000000000000', actual['report_slice_id']
|
671
|
+
assert_not_nil(actual_host = actual['hosts'].first)
|
672
|
+
assert_not_nil actual_host['insights_id']
|
673
|
+
end
|
674
|
+
|
660
675
|
private
|
661
676
|
|
662
677
|
def create_generator(batch, name = '00000000-0000-0000-0000-000000000000')
|