foreman_rh_cloud 4.0.24 → 4.0.26

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.
Files changed (104) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/api/v2/rh_cloud/inventory_controller.rb +4 -1
  3. data/app/controllers/foreman_inventory_upload/cloud_status_controller.rb +26 -0
  4. data/app/controllers/insights_cloud/api/machine_telemetries_controller.rb +23 -7
  5. data/app/controllers/insights_cloud/hits_controller.rb +0 -1
  6. data/app/models/insights_client_report_status.rb +8 -23
  7. data/app/services/foreman_rh_cloud/cloud_auth.rb +4 -0
  8. data/app/services/foreman_rh_cloud/cloud_ping_service.rb +83 -0
  9. data/app/services/foreman_rh_cloud/cloud_request_forwarder.rb +15 -3
  10. data/app/services/foreman_rh_cloud/insights_status_cleaner.rb +17 -0
  11. data/app/services/foreman_rh_cloud/remediations_retriever.rb +5 -0
  12. data/config/Gemfile.lock.gh_test +74 -84
  13. data/config/rh_cert-api_chain.pem +74 -0
  14. data/config/routes.rb +3 -1
  15. data/db/migrate/20210720000001_remove_old_insights_statuses.foreman_rh_cloud.rb +6 -0
  16. data/lib/foreman_inventory_upload/generators/queries.rb +0 -16
  17. data/lib/foreman_inventory_upload/generators/tags.rb +3 -1
  18. data/lib/foreman_rh_cloud/engine.rb +2 -3
  19. data/lib/foreman_rh_cloud/version.rb +1 -1
  20. data/lib/foreman_rh_cloud.rb +4 -0
  21. data/lib/insights_cloud/async/insights_client_status_aging.rb +13 -3
  22. data/lib/insights_cloud/async/insights_full_sync.rb +9 -0
  23. data/lib/insights_cloud/async/insights_generate_notifications.rb +4 -0
  24. data/lib/insights_cloud/async/insights_resolutions_sync.rb +16 -2
  25. data/lib/insights_cloud/async/insights_rules_sync.rb +15 -2
  26. data/lib/insights_cloud.rb +4 -0
  27. data/lib/inventory_sync/async/inventory_full_sync.rb +9 -0
  28. data/lib/inventory_sync/async/inventory_hosts_sync.rb +9 -0
  29. data/lib/inventory_sync/async/inventory_scheduled_sync.rb +4 -0
  30. data/lib/inventory_sync/async/inventory_self_host_sync.rb +13 -0
  31. data/lib/inventory_sync/async/query_inventory_job.rb +4 -0
  32. data/lib/tasks/insights.rake +15 -0
  33. data/lib/tasks/rh_cloud_inventory.rake +2 -9
  34. data/package.json +1 -1
  35. data/test/controllers/insights_cloud/api/machine_telemetries_controller_test.rb +20 -39
  36. data/test/controllers/inventory_upload/cloud_status_controller_test.rb +44 -0
  37. data/test/jobs/insights_client_status_aging_test.rb +7 -7
  38. data/test/jobs/insights_full_sync_test.rb +1 -0
  39. data/test/jobs/insights_resolutions_sync_test.rb +11 -1
  40. data/test/jobs/insights_rules_sync_test.rb +1 -0
  41. data/test/jobs/inventory_full_sync_test.rb +10 -0
  42. data/test/jobs/inventory_hosts_sync_test.rb +1 -0
  43. data/test/jobs/inventory_self_host_sync_test.rb +1 -0
  44. data/test/models/insights_client_report_status_test.rb +70 -72
  45. data/test/test_plugin_helper.rb +53 -0
  46. data/test/unit/services/foreman_rh_cloud/cloud_request_forwarder_test.rb +29 -34
  47. data/test/unit/services/foreman_rh_cloud/cloud_status_service_test.rb +66 -0
  48. data/test/unit/services/foreman_rh_cloud/insights_status_cleaner_test.rb +31 -0
  49. data/test/unit/services/foreman_rh_cloud/template_renderer_helper_test.rb +1 -0
  50. data/test/unit/tags_generator_test.rb +41 -0
  51. data/webpack/ForemanInventoryUpload/Components/AccountList/Components/EmptyState/EmptyState.js +1 -1
  52. data/webpack/ForemanInventoryUpload/Components/AccountList/Components/EmptyState/__tests__/__snapshots__/EmptyState.test.js.snap +1 -2
  53. data/webpack/ForemanInventoryUpload/Components/FileDownload/FileDownload.js +3 -1
  54. data/webpack/ForemanInventoryUpload/Components/FileDownload/__tests__/__snapshots__/FileDownload.test.js.snap +2 -1
  55. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/InventoryFilter.js +1 -2
  56. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/InventoryFilterConstants.js +3 -1
  57. data/webpack/ForemanInventoryUpload/Components/InventorySettings/InventorySettings.scss +0 -4
  58. data/webpack/ForemanInventoryUpload/Components/PageHeader/PageTitle.js +12 -0
  59. data/webpack/ForemanInventoryUpload/Components/PageHeader/__tests__/__snapshots__/PageTitle.test.js.snap +10 -0
  60. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/CloudPingModal/index.js +144 -0
  61. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/CloudPingModal/index.scss +5 -0
  62. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/PageDescription/PageDescription.js +2 -2
  63. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/components/Modal.js +1 -1
  64. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/components/Toast.js +2 -2
  65. data/webpack/ForemanInventoryUpload/Components/StatusChart/StatusChart.js +4 -3
  66. data/webpack/ForemanInventoryUpload/ForemanInventoryConstants.js +2 -0
  67. data/webpack/ForemanInventoryUpload/SubscriptionsPageExtension/InventoryAutoUpload/InventoryAutoUpload.js +3 -1
  68. data/webpack/InsightsCloudSync/Components/InsightsHeader/InsightsHeader.scss +5 -1
  69. data/webpack/InsightsCloudSync/Components/InsightsHeader/index.js +6 -6
  70. data/webpack/InsightsCloudSync/Components/InsightsSettings/InsightsSettings.js +9 -5
  71. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/__snapshots__/InsightsSettings.test.js.snap +6 -6
  72. data/webpack/InsightsCloudSync/Components/InsightsSettings/insightsSettings.scss +1 -14
  73. data/webpack/InsightsCloudSync/Components/InsightsTable/InsightsTable.js +4 -22
  74. data/webpack/InsightsCloudSync/Components/InsightsTable/InsightsTableConstants.js +25 -4
  75. data/webpack/InsightsCloudSync/Components/InsightsTable/InsightsTableSelectors.js +0 -3
  76. data/webpack/InsightsCloudSync/Components/InsightsTable/Pagination.js +51 -0
  77. data/webpack/InsightsCloudSync/Components/InsightsTable/SelectAllAlert.js +1 -1
  78. data/webpack/InsightsCloudSync/Components/InsightsTable/__tests__/__snapshots__/InsightsTable.test.js.snap +3 -68
  79. data/webpack/InsightsCloudSync/Components/InsightsTable/table.scss +10 -0
  80. data/webpack/InsightsCloudSync/Components/RemediationModal/RemediationModal.js +11 -10
  81. data/webpack/InsightsCloudSync/Components/RemediationModal/RemediationModal.scss +14 -0
  82. data/webpack/InsightsCloudSync/Components/RemediationModal/index.js +0 -2
  83. data/webpack/InsightsCloudSync/Components/ToolbarDropdown.js +32 -0
  84. data/webpack/InsightsCloudSync/Components/__tests__/__snapshots__/InsightsHeader.test.js.snap +5 -5
  85. data/webpack/InsightsCloudSync/InsightsCloudSync.js +19 -13
  86. data/webpack/InsightsCloudSync/InsightsCloudSync.scss +82 -2
  87. data/webpack/InsightsCloudSync/__snapshots__/InsightsCloudSync.test.js.snap +16 -6
  88. data/webpack/InsightsHostDetailsTab/InsightsTab.js +3 -2
  89. data/webpack/InsightsHostDetailsTab/InsightsTab.scss +4 -4
  90. data/webpack/InsightsHostDetailsTab/components/ListItem/ListItem.js +9 -7
  91. data/webpack/common/Switcher/HelpLabel.js +1 -1
  92. data/webpack/common/Switcher/SwitcherPF4.js +1 -1
  93. data/webpack/common/Switcher/SwitcherPF4.scss +6 -7
  94. data/webpack/common/Switcher/__tests__/__snapshots__/HelpLabel.test.js.snap +1 -1
  95. data/webpack/common/Switcher/__tests__/__snapshots__/SwitcherPF4.test.js.snap +1 -1
  96. metadata +18 -25
  97. data/app/subscribers/foreman_rh_cloud/insights_subscriber.rb +0 -9
  98. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/InsightsSyncSwitcher.fixtures.js +0 -1
  99. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/InsightsSyncSwitcher.js +0 -45
  100. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/__tests__/InsightsSyncSwitcher.test.js +0 -17
  101. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/__tests__/__snapshots__/InsightsSyncSwitcher.test.js.snap +0 -38
  102. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/index.js +0 -1
  103. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/insightsSyncSwitcher.scss +0 -3
  104. data/webpack/InsightsCloudSync/Components/RemediationModal/RemediateButton.js +0 -59
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b73f3b045ed5bcbba051801155232d62a0884b30da8e461328a17e509fe0f0ec
4
- data.tar.gz: 2cc1a0c73e193de7d26b368e9a78760ee302f78ecafeef6c27e18165293d0d2d
3
+ metadata.gz: 713d1737fd81e7a54efa8a300fe4c0765c1d2a31b796218bcc1f447b473921af
4
+ data.tar.gz: a47efbe51980f47c71e57af619f73a08d214f7af3bb84632946189a1aabe81f3
5
5
  SHA512:
6
- metadata.gz: 2eb0bb9cdb4d2aefa66acec328c98467a7db33de69e0256f966cca0f929756fb9100a5880d8d9a03f358cfafaf6e5aa32cf9896125c0eab8e3de9b9ebbb09269
7
- data.tar.gz: 12e435965a84de5c538e98463fcdacbacd70eefd692822782cdb5ec4ed1e9f91e6d31f65466cffaa4b415c4491ff62e393a1e2f716f4542b03e5911fe6a34b97
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
@@ -0,0 +1,26 @@
1
+ module ForemanInventoryUpload
2
+ class CloudStatusController < ::ApplicationController
3
+ def index
4
+ organizations = User.current.my_organizations
5
+
6
+ ping_service = ForemanRhCloud::CloudPingService.new(organizations, logger)
7
+ ping_result = ping_service.ping
8
+ ping_result[:cert_auth] = ping_result[:cert_auth].map do |org, status_hash|
9
+ status_hash.merge(
10
+ {
11
+ org_id: org.id,
12
+ org_name: org.name,
13
+ }
14
+ )
15
+ end
16
+
17
+ render json: {
18
+ ping: ping_result,
19
+ }, status: :ok
20
+ end
21
+
22
+ def logger
23
+ Foreman::Logging.logger('app')
24
+ end
25
+ end
26
+ end
@@ -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
@@ -49,13 +57,19 @@ module InsightsCloud::Api
49
57
  private
50
58
 
51
59
  def ensure_telemetry_enabled_for_consumer
52
- render_message 'Telemetry is not enabled for your organization', :status => 403 unless telemetry_config
60
+ unless (config = telemetry_config(@host))
61
+ logger.debug("Rejected telemetry forwarding for host #{@host.name}, insights param is set to: #{config}")
62
+ render_message 'Telemetry is not enabled for this host', :status => 403
63
+ end
64
+ config
53
65
  end
54
66
 
55
- def telemetry_config
56
- ::RedhatAccess::TelemetryConfiguration.find_or_create_by(:organization_id => @organization.id) do |conf|
57
- conf.enable_telemetry = true
67
+ def telemetry_config(host)
68
+ param_value = nil
69
+ User.as_anonymous_admin do
70
+ param_value = host.host_param(InsightsCloud.enable_client_param)
58
71
  end
72
+ param_value
59
73
  end
60
74
 
61
75
  def cert_uuid
@@ -76,9 +90,11 @@ module InsightsCloud::Api
76
90
  return unless request.path == '/redhat_access/r/insights/platform/ingress/v1/upload' ||
77
91
  request.path.include?('/redhat_access/r/insights/uploads/')
78
92
 
79
- data = @cloud_response.code.to_s.start_with?('2')
80
- host_status = @host.get_status(InsightsClientReportStatus)
81
- host_status.update(reported_at: Time.now.utc, status: host_status.to_status(data: data))
93
+ return unless @cloud_response.code.to_s.start_with?('2')
94
+
95
+ # create insights status if it wasn't there in the first place and refresh its reporting date
96
+ @host.get_status(InsightsClientReportStatus).refresh!
97
+ @host.refresh_global_status!
82
98
  end
83
99
  end
84
100
  end
@@ -9,7 +9,6 @@ module InsightsCloud
9
9
  hasToken: !Setting[:rh_cloud_token].empty?,
10
10
  hits: hits.map { |hit| hit.attributes.merge(hostname: hit.host&.name, has_playbook: hit.has_playbook?) },
11
11
  itemCount: hits.count,
12
- isExperimentalMode: Setting[:lab_features],
13
12
  }, status: :ok
14
13
  end
15
14
 
@@ -1,14 +1,11 @@
1
1
  class InsightsClientReportStatus < HostStatus::Status
2
2
  REPORT_INTERVAL = 48.hours
3
3
 
4
- REPORTING = 0 # host_registration_insights = true & getting data
5
- NO_REPORT = 1 # host_registration_insights = true & not getting data
6
- NOT_MANAGED = 2 # host_registration_insights = false
7
- NOT_MANAGED_WITH_DATA = 3 # host_registration_insights = false & getting data
4
+ REPORTING = 0
5
+ NO_REPORT = 1
8
6
 
9
7
  scope :stale, -> { where.not(reported_at: (Time.now - REPORT_INTERVAL)..Time.now) }
10
8
  scope :reporting, -> { where(status: REPORTING) }
11
- scope :not_managed_with_data, -> { where(status: NOT_MANAGED_WITH_DATA) }
12
9
 
13
10
  def self.status_name
14
11
  N_('Insights')
@@ -20,10 +17,6 @@ class InsightsClientReportStatus < HostStatus::Status
20
17
  N_('Reporting')
21
18
  when NO_REPORT
22
19
  N_('Not reporting')
23
- when NOT_MANAGED
24
- N_('Not reporting (not set by registration)')
25
- when NOT_MANAGED_WITH_DATA
26
- N_('Reporting (not set by registration)')
27
20
  end
28
21
  end
29
22
 
@@ -33,20 +26,16 @@ class InsightsClientReportStatus < HostStatus::Status
33
26
  ::HostStatus::Global::OK
34
27
  when NO_REPORT
35
28
  ::HostStatus::Global::ERROR
36
- when NOT_MANAGED
37
- ::HostStatus::Global::OK
38
- when NOT_MANAGED_WITH_DATA
39
- ::HostStatus::Global::WARN
40
29
  end
41
30
  end
42
31
 
43
- def to_status(data: false)
44
- if insights_param
45
- return REPORTING if data
46
- return in_interval? ? REPORTING : NO_REPORT
47
- end
32
+ def to_status
33
+ in_interval? ? REPORTING : NO_REPORT
34
+ end
48
35
 
49
- data ? NOT_MANAGED_WITH_DATA : NOT_MANAGED
36
+ # prevent creation of the status on global refresh, but show it if the record already exists
37
+ def relevant?(_options = {})
38
+ persisted?
50
39
  end
51
40
 
52
41
  private
@@ -55,8 +44,4 @@ class InsightsClientReportStatus < HostStatus::Status
55
44
  return false unless reported_at
56
45
  (Time.now.utc - reported_at).to_i < REPORT_INTERVAL.to_i
57
46
  end
58
-
59
- def insights_param
60
- host.host_params_hash.dig('host_registration_insights', :value)
61
- end
62
47
  end
@@ -4,6 +4,10 @@ module ForemanRhCloud
4
4
 
5
5
  include CloudRequest
6
6
 
7
+ def cloud_auth_available?
8
+ Setting[:rh_cloud_token].present?
9
+ end
10
+
7
11
  def rh_credentials
8
12
  @rh_credentials ||= query_refresh_token
9
13
  end
@@ -0,0 +1,83 @@
1
+ require 'rest-client'
2
+
3
+ module ForemanRhCloud
4
+ class CloudPingService
5
+ class TokenPing
6
+ include ForemanRhCloud::CloudAuth
7
+
8
+ attr_accessor :logger
9
+
10
+ def initialize(logger)
11
+ @logger = logger
12
+ end
13
+
14
+ def ping
15
+ execute_cloud_request(
16
+ method: :get,
17
+ url: ForemanRhCloud.base_url + "/api/inventory/v1/hosts?per_page=1",
18
+ headers: {
19
+ content_type: :json,
20
+ }
21
+ )
22
+ rescue StandardError => ex
23
+ ex
24
+ end
25
+ end
26
+
27
+ class CertPing
28
+ include ForemanRhCloud::CloudRequest
29
+ include InsightsCloud::CandlepinCache
30
+
31
+ attr_accessor :logger
32
+
33
+ def initialize(org, logger)
34
+ @org = org
35
+ @logger = logger
36
+ end
37
+
38
+ def ping
39
+ certs = candlepin_id_cert(@org)
40
+ return StandardError.new('certificate missing') unless certs
41
+
42
+ execute_cloud_request(
43
+ method: :get,
44
+ url: ForemanRhCloud.cert_base_url + "/api/apicast-tests/ping",
45
+ headers: {
46
+ content_type: :json,
47
+ },
48
+ ssl_client_cert: OpenSSL::X509::Certificate.new(certs[:cert]),
49
+ ssl_client_key: OpenSSL::PKey::RSA.new(certs[:key])
50
+ )
51
+ rescue StandardError => ex
52
+ ex
53
+ end
54
+ end
55
+
56
+ def initialize(organizations, logger)
57
+ @organizations = organizations
58
+ @logger = logger
59
+ end
60
+
61
+ def ping
62
+ token_response = TokenPing.new(@logger).ping
63
+ {
64
+ token_auth: {
65
+ success: token_response.is_a?(RestClient::Response),
66
+ error: (token_response.is_a?(Exception) ? token_response.inspect : nil),
67
+ },
68
+ cert_auth: Hash[
69
+ @organizations.map do |org|
70
+ cert_response = CertPing.new(org, @logger).ping
71
+ [
72
+ org,
73
+ {
74
+ success: cert_response.is_a?(RestClient::Response),
75
+ error: (cert_response.is_a?(Exception) ? cert_response.inspect : nil),
76
+ },
77
+ ]
78
+ end
79
+ ],
80
+ }
81
+ end
82
+ end
83
+ 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,12 +64,18 @@ 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'),
68
76
  ssl_client_cert: OpenSSL::X509::Certificate.new(certs[:cert]),
69
77
  ssl_client_key: OpenSSL::PKey::RSA.new(certs[:key]),
70
- ssl_ca_file: Class.new.include(RedhatAccess::Telemetry::LookUps).new.get_default_ssl_ca_file,
78
+ ssl_ca_file: ForemanRhCloud.legacy_insights_ca,
71
79
  }
72
80
  end
73
81
  end
@@ -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
- 'Foreman'
99
+ BranchInfo.new.core_app_name
88
100
  end
89
101
 
90
102
  def core_app_version
91
- Foreman::Version.new
103
+ BranchInfo.new.core_app_version
92
104
  end
93
105
 
94
106
  def http_user_agent(original_request)
@@ -0,0 +1,17 @@
1
+ module ForemanRhCloud
2
+ class InsightsStatusCleaner
3
+ def clean(host_search)
4
+ host_ids = Host.search_for(host_search).pluck(:id)
5
+
6
+ # delete all insights status records for the hosts
7
+ deleted_count = InsightsClientReportStatus.where(host_id: host_ids).delete_all
8
+
9
+ # refresh global status
10
+ Host.where(id: host_ids).preload(:host_statuses).find_in_batches do |hosts|
11
+ hosts.each { |host| host.refresh_global_status! }
12
+ end
13
+
14
+ deleted_count
15
+ end
16
+ end
17
+ end
@@ -12,6 +12,11 @@ module ForemanRhCloud
12
12
  end
13
13
 
14
14
  def create_playbook
15
+ unless cloud_auth_available?
16
+ logger.debug('Cloud authentication is not available, cannot continue')
17
+ return
18
+ end
19
+
15
20
  response = query_playbook
16
21
 
17
22
  logger.debug("Got playbook response: #{response.body}")
@@ -4,7 +4,6 @@ PATH
4
4
  foreman_rh_cloud (3.0.15)
5
5
  foreman_ansible
6
6
  katello
7
- redhat_access
8
7
 
9
8
  PATH
10
9
  remote: ../katello
@@ -41,66 +40,66 @@ PATH
41
40
  GEM
42
41
  remote: https://rubygems.org/
43
42
  specs:
44
- actioncable (6.0.3.4)
45
- actionpack (= 6.0.3.4)
43
+ actioncable (6.0.3.6)
44
+ actionpack (= 6.0.3.6)
46
45
  nio4r (~> 2.0)
47
46
  websocket-driver (>= 0.6.1)
48
- actionmailbox (6.0.3.4)
49
- actionpack (= 6.0.3.4)
50
- activejob (= 6.0.3.4)
51
- activerecord (= 6.0.3.4)
52
- activestorage (= 6.0.3.4)
53
- activesupport (= 6.0.3.4)
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)
54
53
  mail (>= 2.7.1)
55
- actionmailer (6.0.3.4)
56
- actionpack (= 6.0.3.4)
57
- actionview (= 6.0.3.4)
58
- activejob (= 6.0.3.4)
54
+ actionmailer (6.0.3.6)
55
+ actionpack (= 6.0.3.6)
56
+ actionview (= 6.0.3.6)
57
+ activejob (= 6.0.3.6)
59
58
  mail (~> 2.5, >= 2.5.4)
60
59
  rails-dom-testing (~> 2.0)
61
- actionpack (6.0.3.4)
62
- actionview (= 6.0.3.4)
63
- activesupport (= 6.0.3.4)
60
+ actionpack (6.0.3.6)
61
+ actionview (= 6.0.3.6)
62
+ activesupport (= 6.0.3.6)
64
63
  rack (~> 2.0, >= 2.0.8)
65
64
  rack-test (>= 0.6.3)
66
65
  rails-dom-testing (~> 2.0)
67
66
  rails-html-sanitizer (~> 1.0, >= 1.2.0)
68
- actiontext (6.0.3.4)
69
- actionpack (= 6.0.3.4)
70
- activerecord (= 6.0.3.4)
71
- activestorage (= 6.0.3.4)
72
- activesupport (= 6.0.3.4)
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)
73
72
  nokogiri (>= 1.8.5)
74
- actionview (6.0.3.4)
75
- activesupport (= 6.0.3.4)
73
+ actionview (6.0.3.6)
74
+ activesupport (= 6.0.3.6)
76
75
  builder (~> 3.1)
77
76
  erubi (~> 1.4)
78
77
  rails-dom-testing (~> 2.0)
79
78
  rails-html-sanitizer (~> 1.1, >= 1.2.0)
80
- activejob (6.0.3.4)
81
- activesupport (= 6.0.3.4)
79
+ activejob (6.0.3.6)
80
+ activesupport (= 6.0.3.6)
82
81
  globalid (>= 0.3.6)
83
- activemodel (6.0.3.4)
84
- activesupport (= 6.0.3.4)
85
- activerecord (6.0.3.4)
86
- activemodel (= 6.0.3.4)
87
- activesupport (= 6.0.3.4)
88
- activerecord-import (1.0.7)
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)
89
88
  activerecord (>= 3.2)
90
89
  activerecord-nulldb-adapter (0.7.0)
91
90
  activerecord (>= 5.2.0, < 6.3)
92
- activerecord-session_store (1.1.3)
93
- actionpack (>= 4.0)
94
- activerecord (>= 4.0)
91
+ activerecord-session_store (2.0.0)
92
+ actionpack (>= 5.2.4.1)
93
+ activerecord (>= 5.2.4.1)
95
94
  multi_json (~> 1.11, >= 1.11.2)
96
- rack (>= 1.5.2, < 3)
97
- railties (>= 4.0)
98
- activestorage (6.0.3.4)
99
- actionpack (= 6.0.3.4)
100
- activejob (= 6.0.3.4)
101
- activerecord (= 6.0.3.4)
102
- marcel (~> 0.3.1)
103
- activesupport (6.0.3.4)
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)
104
103
  concurrent-ruby (~> 1.0, >= 1.0.2)
105
104
  i18n (>= 0.7, < 2)
106
105
  minitest (~> 5.1)
@@ -109,7 +108,7 @@ GEM
109
108
  addressable (2.7.0)
110
109
  public_suffix (>= 2.0.2, < 5.0)
111
110
  algebrick (0.7.5)
112
- amazing_print (1.2.2)
111
+ amazing_print (1.3.0)
113
112
  ancestry (3.2.1)
114
113
  activerecord (>= 4.2.0)
115
114
  anemone (0.7.2)
@@ -136,13 +135,13 @@ GEM
136
135
  benchmark-ips (2.8.4)
137
136
  binding_of_caller (1.0.0)
138
137
  debug_inspector (>= 0.0.1)
139
- bootsnap (1.7.1)
138
+ bootsnap (1.7.3)
140
139
  msgpack (~> 1.0)
141
140
  bootstrap-sass (3.4.1)
142
141
  autoprefixer-rails (>= 5.2.1)
143
142
  sassc (>= 2.0.0)
144
143
  builder (3.2.4)
145
- bullet (6.1.3)
144
+ bullet (6.1.4)
146
145
  activesupport (>= 3.0.0)
147
146
  uniform_notifier (~> 1.11)
148
147
  byebug (11.1.3)
@@ -168,7 +167,7 @@ GEM
168
167
  coffee-script-source
169
168
  execjs
170
169
  coffee-script-source (1.12.2)
171
- concurrent-ruby (1.1.8)
170
+ concurrent-ruby (1.1.9)
172
171
  concurrent-ruby-edge (0.6.0)
173
172
  concurrent-ruby (~> 1.1.6)
174
173
  connection_pool (2.2.3)
@@ -180,12 +179,12 @@ GEM
180
179
  daemons (1.3.1)
181
180
  database_cleaner (1.99.0)
182
181
  deacon (1.0.0)
183
- debug_inspector (1.0.0)
182
+ debug_inspector (1.1.0)
184
183
  declarative (0.0.20)
185
184
  declarative-option (0.1.0)
186
- deep_cloneable (3.0.0)
185
+ deep_cloneable (3.1.0)
187
186
  activerecord (>= 3.1.0, < 7)
188
- deface (1.6.1)
187
+ deface (1.8.1)
189
188
  nokogiri (>= 1.6)
190
189
  polyglot
191
190
  rails (>= 5.2)
@@ -338,7 +337,7 @@ GEM
338
337
  http-cookie (1.0.3)
339
338
  domain_name (~> 0.5)
340
339
  httpclient (2.8.3)
341
- i18n (1.8.8)
340
+ i18n (1.8.10)
342
341
  concurrent-ruby (~> 1.0)
343
342
  immigrant (0.3.6)
344
343
  activerecord (>= 3.0)
@@ -369,16 +368,14 @@ GEM
369
368
  nokogiri (>= 1.5.9)
370
369
  mail (2.7.1)
371
370
  mini_mime (>= 0.1.1)
372
- marcel (0.3.3)
373
- mimemagic (~> 0.3.2)
371
+ marcel (1.0.0)
374
372
  maruku (0.7.3)
375
373
  memoist (0.16.2)
376
374
  method_source (1.0.0)
377
375
  mime-types (3.3.1)
378
376
  mime-types-data (~> 3.2015)
379
- mime-types-data (3.2020.1104)
380
- mimemagic (0.3.5)
381
- mini_mime (1.0.2)
377
+ mime-types-data (3.2021.0225)
378
+ mini_mime (1.0.3)
382
379
  mini_portile2 (2.5.0)
383
380
  minitest (5.10.3)
384
381
  minitest-reporters (1.4.3)
@@ -404,8 +401,8 @@ GEM
404
401
  net-ssh (>= 2.6.5, < 7.0.0)
405
402
  net-ssh (4.2.0)
406
403
  netrc (0.11.0)
407
- nio4r (2.5.5)
408
- nokogiri (1.11.1)
404
+ nio4r (2.5.7)
405
+ nokogiri (1.11.2)
409
406
  mini_portile2 (~> 2.5.0)
410
407
  racc (~> 1.4)
411
408
  oauth (0.5.5)
@@ -415,7 +412,7 @@ GEM
415
412
  json (>= 1, < 3)
416
413
  paint (2.2.1)
417
414
  parallel (1.20.1)
418
- parallel_tests (3.4.0)
415
+ parallel_tests (3.6.0)
419
416
  parallel
420
417
  parse-cron (0.1.4)
421
418
  parser (3.0.0.0)
@@ -492,20 +489,20 @@ GEM
492
489
  rack
493
490
  rack-test (1.1.0)
494
491
  rack (>= 1.0, < 3)
495
- rails (6.0.3.4)
496
- actioncable (= 6.0.3.4)
497
- actionmailbox (= 6.0.3.4)
498
- actionmailer (= 6.0.3.4)
499
- actionpack (= 6.0.3.4)
500
- actiontext (= 6.0.3.4)
501
- actionview (= 6.0.3.4)
502
- activejob (= 6.0.3.4)
503
- activemodel (= 6.0.3.4)
504
- activerecord (= 6.0.3.4)
505
- activestorage (= 6.0.3.4)
506
- activesupport (= 6.0.3.4)
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)
507
504
  bundler (>= 1.3.0)
508
- railties (= 6.0.3.4)
505
+ railties (= 6.0.3.6)
509
506
  sprockets-rails (>= 2.0.0)
510
507
  rails-controller-testing (1.0.5)
511
508
  actionpack (>= 5.0.1.rc1)
@@ -519,9 +516,9 @@ GEM
519
516
  rails-i18n (6.0.0)
520
517
  i18n (>= 0.7, < 2)
521
518
  railties (>= 6.0.0, < 7)
522
- railties (6.0.3.4)
523
- actionpack (= 6.0.3.4)
524
- activesupport (= 6.0.3.4)
519
+ railties (6.0.3.6)
520
+ actionpack (= 6.0.3.6)
521
+ activesupport (= 6.0.3.6)
525
522
  method_source
526
523
  rake (>= 0.8.7)
527
524
  thor (>= 0.20.3, < 2.0)
@@ -541,13 +538,6 @@ GEM
541
538
  rdoc (6.3.0)
542
539
  record_tag_helper (1.0.1)
543
540
  actionview (>= 5)
544
- redhat_access (2.2.18)
545
- angular-rails-templates (>= 0.0.4)
546
- foreman-tasks
547
- katello
548
- redhat_access_lib (>= 1.1.5)
549
- redhat_access_lib (1.1.5)
550
- rest-client (>= 1.6.3)
551
541
  redis (4.1.4)
552
542
  regexp_parser (1.8.2)
553
543
  representable (3.0.4)
@@ -628,8 +618,8 @@ GEM
628
618
  tilt
629
619
  scoped_search (4.1.9)
630
620
  activerecord (>= 4.2.0)
631
- sd_notify (0.1.0)
632
- secure_headers (6.3.1)
621
+ sd_notify (0.1.1)
622
+ secure_headers (6.3.2)
633
623
  selenium-webdriver (3.142.7)
634
624
  childprocess (>= 0.5, < 4.0)
635
625
  rubyzip (>= 1.2.2)
@@ -716,7 +706,7 @@ PLATFORMS
716
706
 
717
707
  DEPENDENCIES
718
708
  activerecord-nulldb-adapter
719
- activerecord-session_store (>= 1.1.0, < 2)
709
+ activerecord-session_store (>= 2.0.0, < 3)
720
710
  amazing_print (~> 1.1)
721
711
  ancestry (>= 3.0.7, < 4, != 3.2.0)
722
712
  apipie-dsl (>= 2.2.6)