foreman_rh_cloud 3.0.23 → 3.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/helpers/foreman_insights_deprecations_helper.rb +9 -0
- data/app/models/insights_client_report_status.rb +4 -0
- data/app/overrides/old_plugin_deprecation.rb +20 -0
- data/app/services/foreman_rh_cloud/cloud_request_forwarder.rb +0 -8
- 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/unit/services/foreman_rh_cloud/cloud_request_forwarder_test.rb +3 -3
- data/test/unit/slice_generator_test.rb +15 -0
- metadata +10 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a770469a80b05e6f28d320292ff14ec760b24a5b2a564f5bee625adcb1c3589d
|
|
4
|
+
data.tar.gz: 0fb9dc4b88422fc28cbf68002e565e49c2deec51eb1edc7e6ecfbfe397f0335b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a79f98d8fe9e2883bde293b96eb138c68d01fa2e8fffdb2843b8d5a1fefa09d65f76b7ff18a09961c914ab81d0b65e8232c51066ab1729bfcf4a6fd127e0948d
|
|
7
|
+
data.tar.gz: e6e8e67014a16817cd4a1b86611541b133b86bc1ef7f588ecc0293f2b81e6682d43a4118a5bec03a3fe8de4c7e4a39dafc7c9c0d223cdc217e01ee97fa400d42
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
module ForemanInsightsDeprecationsHelper
|
|
2
|
+
def old_plugin_deprecation_warning
|
|
3
|
+
alert(
|
|
4
|
+
class: 'alert-warning',
|
|
5
|
+
close: false,
|
|
6
|
+
text: _('redhat_access plugin is deprecated and will be removed in Satellite 6.10. You can find recommendations for your hosts on hosts index and details pages.')
|
|
7
|
+
)
|
|
8
|
+
end
|
|
9
|
+
end
|
|
@@ -6,6 +6,10 @@ class InsightsClientReportStatus < HostStatus::Status
|
|
|
6
6
|
NOT_MANAGED = 2 # host_registration_insights = false
|
|
7
7
|
NOT_MANAGED_WITH_DATA = 3 # host_registration_insights = false & getting data
|
|
8
8
|
|
|
9
|
+
scope :stale, -> { where.not(reported_at: (Time.now - REPORT_INTERVAL)..Time.now) }
|
|
10
|
+
scope :reporting, -> { where(status: REPORTING) }
|
|
11
|
+
scope :not_managed_with_data, -> { where(status: NOT_MANAGED_WITH_DATA) }
|
|
12
|
+
|
|
9
13
|
def self.status_name
|
|
10
14
|
N_('Insights')
|
|
11
15
|
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Deface::Override.new(
|
|
2
|
+
virtual_path: 'redhat_access/analytics_dashboard/welcome',
|
|
3
|
+
name: 'deprecation_warning',
|
|
4
|
+
insert_before: 'div#welcome',
|
|
5
|
+
text: '<%= old_plugin_deprecation_warning %>'
|
|
6
|
+
)
|
|
7
|
+
|
|
8
|
+
Deface::Override.new(
|
|
9
|
+
virtual_path: 'redhat_access/analytics_dashboard/index',
|
|
10
|
+
name: 'deprecation_warning_index_not_met',
|
|
11
|
+
insert_before: 'article#content',
|
|
12
|
+
text: '<%= old_plugin_deprecation_warning %>'
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
Deface::Override.new(
|
|
16
|
+
virtual_path: 'redhat_access/analytics_dashboard/index',
|
|
17
|
+
name: 'deprecation_warning_index_met',
|
|
18
|
+
insert_before: 'div.main-content',
|
|
19
|
+
text: '<%= old_plugin_deprecation_warning %>'
|
|
20
|
+
)
|
|
@@ -56,10 +56,6 @@ module ForemanRhCloud
|
|
|
56
56
|
|
|
57
57
|
def path_params(request_path, certs)
|
|
58
58
|
case request_path
|
|
59
|
-
when metadata_request?
|
|
60
|
-
{
|
|
61
|
-
url: ForemanRhCloud.base_url + request_path.sub('/redhat_access/r/insights', '/api'),
|
|
62
|
-
}
|
|
63
59
|
when platform_request?
|
|
64
60
|
{
|
|
65
61
|
url: ForemanRhCloud.cert_base_url + request_path.sub('/redhat_access/r/insights/platform', '/api'),
|
|
@@ -76,10 +72,6 @@ module ForemanRhCloud
|
|
|
76
72
|
end
|
|
77
73
|
end
|
|
78
74
|
|
|
79
|
-
def metadata_request?
|
|
80
|
-
->(request_path) { request_path.include? '/static' }
|
|
81
|
-
end
|
|
82
|
-
|
|
83
75
|
def platform_request?
|
|
84
76
|
->(request_path) { request_path.include? '/platform' }
|
|
85
77
|
end
|
|
@@ -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
|
|
@@ -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')
|
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: 3.0.
|
|
4
|
+
version: 3.0.24
|
|
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-
|
|
11
|
+
date: 2021-07-20 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: katello
|
|
@@ -160,6 +160,7 @@ files:
|
|
|
160
160
|
- app/controllers/insights_cloud/hits_controller.rb
|
|
161
161
|
- app/controllers/insights_cloud/settings_controller.rb
|
|
162
162
|
- app/controllers/insights_cloud/tasks_controller.rb
|
|
163
|
+
- app/helpers/foreman_insights_deprecations_helper.rb
|
|
163
164
|
- app/helpers/foreman_insights_host_helper.rb
|
|
164
165
|
- app/helpers/foreman_inventory_upload_helper.rb
|
|
165
166
|
- app/helpers/foreman_inventory_upload_host_helper.rb
|
|
@@ -173,6 +174,7 @@ files:
|
|
|
173
174
|
- app/models/setting/rh_cloud.rb
|
|
174
175
|
- app/overrides/hosts_list.rb
|
|
175
176
|
- app/overrides/layouts/base/styles.html.erb.deface
|
|
177
|
+
- app/overrides/old_plugin_deprecation.rb
|
|
176
178
|
- app/services/foreman_rh_cloud/branch_info.rb
|
|
177
179
|
- app/services/foreman_rh_cloud/cloud_auth.rb
|
|
178
180
|
- app/services/foreman_rh_cloud/cloud_connector.rb
|
|
@@ -221,6 +223,7 @@ files:
|
|
|
221
223
|
- lib/foreman_rh_cloud/engine.rb
|
|
222
224
|
- lib/foreman_rh_cloud/version.rb
|
|
223
225
|
- lib/insights_cloud.rb
|
|
226
|
+
- lib/insights_cloud/async/insights_client_status_aging.rb
|
|
224
227
|
- lib/insights_cloud/async/insights_full_sync.rb
|
|
225
228
|
- lib/insights_cloud/async/insights_generate_notifications.rb
|
|
226
229
|
- lib/insights_cloud/async/insights_resolutions_sync.rb
|
|
@@ -231,6 +234,7 @@ files:
|
|
|
231
234
|
- lib/inventory_sync/async/inventory_full_sync.rb
|
|
232
235
|
- lib/inventory_sync/async/inventory_hosts_sync.rb
|
|
233
236
|
- lib/inventory_sync/async/inventory_scheduled_sync.rb
|
|
237
|
+
- lib/inventory_sync/async/inventory_self_host_sync.rb
|
|
234
238
|
- lib/inventory_sync/async/query_inventory_job.rb
|
|
235
239
|
- lib/tasks/foreman_rh_cloud_tasks.rake
|
|
236
240
|
- lib/tasks/insights.rake
|
|
@@ -249,12 +253,14 @@ files:
|
|
|
249
253
|
- test/controllers/uploads_settings_controller_test.rb
|
|
250
254
|
- test/factories/insights_factories.rb
|
|
251
255
|
- test/factories/inventory_upload_factories.rb
|
|
256
|
+
- test/jobs/insights_client_status_aging_test.rb
|
|
252
257
|
- test/jobs/insights_full_sync_test.rb
|
|
253
258
|
- test/jobs/insights_resolutions_sync_test.rb
|
|
254
259
|
- test/jobs/insights_rules_sync_test.rb
|
|
255
260
|
- test/jobs/inventory_full_sync_test.rb
|
|
256
261
|
- test/jobs/inventory_hosts_sync_test.rb
|
|
257
262
|
- test/jobs/inventory_scheduled_sync_test.rb
|
|
263
|
+
- test/jobs/inventory_self_host_sync_test.rb
|
|
258
264
|
- test/jobs/upload_report_job_test.rb
|
|
259
265
|
- test/models/insights_client_report_status_test.rb
|
|
260
266
|
- test/test_plugin_helper.rb
|
|
@@ -677,12 +683,14 @@ test_files:
|
|
|
677
683
|
- test/controllers/uploads_settings_controller_test.rb
|
|
678
684
|
- test/factories/insights_factories.rb
|
|
679
685
|
- test/factories/inventory_upload_factories.rb
|
|
686
|
+
- test/jobs/insights_client_status_aging_test.rb
|
|
680
687
|
- test/jobs/insights_full_sync_test.rb
|
|
681
688
|
- test/jobs/insights_resolutions_sync_test.rb
|
|
682
689
|
- test/jobs/insights_rules_sync_test.rb
|
|
683
690
|
- test/jobs/inventory_full_sync_test.rb
|
|
684
691
|
- test/jobs/inventory_hosts_sync_test.rb
|
|
685
692
|
- test/jobs/inventory_scheduled_sync_test.rb
|
|
693
|
+
- test/jobs/inventory_self_host_sync_test.rb
|
|
686
694
|
- test/jobs/upload_report_job_test.rb
|
|
687
695
|
- test/models/insights_client_report_status_test.rb
|
|
688
696
|
- test/test_plugin_helper.rb
|