foreman_rh_cloud 4.0.24 → 4.0.26

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -0,0 +1,74 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ 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
41
+ Kg6Ay0rrsi4nw1JHue2GvdjdfVOaWSWC
42
+ -----END CERTIFICATE-----
43
+ -----BEGIN CERTIFICATE-----
44
+ MIIFfTCCA2WgAwIBAgIJAJGKz8qFAAADMA0GCSqGSIb3DQEBBQUAMIGwMQswCQYD
45
+ VQQGEwJVUzEXMBUGA1UECAwOTm9ydGggQ2Fyb2xpbmExEDAOBgNVBAcMB1JhbGVp
46
+ Z2gxFjAUBgNVBAoMDVJlZCBIYXQsIEluYy4xGDAWBgNVBAsMD1JlZCBIYXQgTmV0
47
+ d29yazEeMBwGA1UEAwwVRW50aXRsZW1lbnQgTWFzdGVyIENBMSQwIgYJKoZIhvcN
48
+ AQkBFhVjYS1zdXBwb3J0QHJlZGhhdC5jb20wHhcNMTUwNTA1MTMwMzQ4WhcNMjUw
49
+ NTAyMTMwMzQ4WjCBiTELMAkGA1UEBhMCVVMxFzAVBgNVBAgTDk5PUlRIIENBUk9M
50
+ SU5BMRAwDgYDVQQHEwdSYWxlaWdoMRAwDgYDVQQKEwdSZWQgSGF0MRgwFgYDVQQL
51
+ Ew9SZWQgSGF0IE5ldHdvcmsxIzAhBgNVBAMTGmNlcnQtYXBpLmFjY2Vzcy5yZWRo
52
+ YXQuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9hTNMtZMa7Kg
53
+ Jlux6pnuUinP0Rv0aiiPFr7qNHFore4loGrPlpzUvQbUByy3xm7lhf4R4qbINCls
54
+ veWg6HDidvQr174RXb5YLMXuBrYAiPWQTrRRLNuvXFHKzREghRWTv48IXTIDEo0G
55
+ fZJUO+myY2RfwqugZKic5dR6ZakHSSpQO70O6H5R0eHlKa13k4eEpG2fVY/xqFto
56
+ WkfZyEmSacZpqxp7gIjZqreLc4MFwpiVjGFrK3Jk+Px1Z6J94LTLx2SxrYzWIeUs
57
+ 5j+lceQOvpV4/pkClnRCW1pkCKTccjFKQkpNPGwdIusRXUGl9IYc20Fa/7g9iUQc
58
+ 5fXu9EAzfwIDAQABo4G+MIG7MAkGA1UdEwQCMAAwEQYJYIZIAYb4QgEBBAQDAgZA
59
+ MAsGA1UdDwQEAwIF4DATBgNVHSUEDDAKBggrBgEFBQcDATA5BglghkgBhvhCAQ0E
60
+ LBYqTWFuYWdlZCBieSBSZWQgSGF0IChjYS1zdXBwb3J0QHJlZGhhdC5jb20pMB0G
61
+ A1UdDgQWBBRfgCjd8aXf0U4VX8DKTVIn+paGBzAfBgNVHSMEGDAWgBSIS6ZFxEbs
62
+ j9bPpvYazyY8kMx/FzANBgkqhkiG9w0BAQUFAAOCAgEAlC+r6UEEp5BUkI0Rj2T+
63
+ 1PH7oUCaGQeQoyVbGddz/WUcBk/lMMtyCEoxU+3tTwNWmCWWjYXtjoL9MlSAC/q+
64
+ NZfBi1iq0uuSus9JI/Uu8aRhoxTK56qGRed/JNixOHEmFn891cahIPpF0exWwtYD
65
+ ThwXo7Z6PI7t8EMKdSrGTOowp58yho8xYFL/Z7JmjL55Pf85GIrdiniNZd4i178J
66
+ 07R9zsiLvdXq9mT33iJwkm+uhO+FA9d8OE3ji21pBbGUAQSWOdkemvUCsy8zANW9
67
+ fT+dBrMr5Buk7eaBBJ2PxECNiWLCRQJWmyff1O5zMT0daS2lBdEGUNhBZ0hnX13Q
68
+ kabUp0bxRrNRq+WkomP7onZhfZS6SjKm0UmwoV6o3V1ED6y7muQNRmgDpA5PcbvO
69
+ gl7OexNL4zcpyfMdAmTYf5yTRSvB42Yg5hVfuzPEnOIqupwES3mWkEHRlqbMUkHw
70
+ qIQAxIwQqZd5PdPpElQ/6j/ZT9DwW/I6zgndX2rsS0oGYcwFTkSj0/rKKkC13hk7
71
+ LchXMZu5ckdustM79U6OZIBairrJaL2OpR08un2nwIjgEGqhVFYc44UK1VpkE8mr
72
+ qvqJS6OHVlTlKcEDnhVkPS3i5qjuS/PtSq0CwH8bzYKFJayLDY/z36Zv6PdttzmU
73
+ Yb1NSDcJejHJ80pMINutyYQ=
74
+ -----END CERTIFICATE-----
data/config/routes.rb CHANGED
@@ -11,6 +11,8 @@ Rails.application.routes.draw do
11
11
  post 'cloud_connector', to: 'uploads#enable_cloud_connector'
12
12
 
13
13
  resources :tasks, only: [:create, :show]
14
+
15
+ get 'status', to: 'cloud_status#index'
14
16
  end
15
17
 
16
18
  namespace :insights_cloud do
@@ -37,7 +39,7 @@ Rails.application.routes.draw do
37
39
  end
38
40
 
39
41
  scope '/r/insights' do
40
- match '/*path', :constraints => lambda { |req| !req.path.include?('view/api') }, to: 'machine_telemetries#forward_request', via: [:get, :post, :delete,:put, :patch]
42
+ match '(/*path)(/)', :constraints => lambda { |req| !req.path.include?('view/api') }, to: 'machine_telemetries#forward_request', via: [:get, :post, :delete,:put, :patch]
41
43
  end
42
44
  end
43
45
 
@@ -0,0 +1,6 @@
1
+ class RemoveOldInsightsStatuses < ActiveRecord::Migration[5.2]
2
+ def up
3
+ InsightsClientReportStatus.where(status: 2).update_all(status: InsightsClientReportStatus::NO_REPORT)
4
+ InsightsClientReportStatus.where(status: 3).update_all(status: InsightsClientReportStatus::REPORTING)
5
+ end
6
+ end
@@ -45,26 +45,10 @@ module ForemanInventoryUpload
45
45
  )
46
46
  end
47
47
 
48
- def self.for_report(portal_user)
49
- org_ids = organizations_for_user(portal_user).pluck(:id)
50
- for_org(org_ids)
51
- end
52
-
53
48
  def self.for_org(organization_id, use_batches: true)
54
49
  base_query = for_slice(Host.unscoped.where(organization_id: organization_id))
55
50
  use_batches ? base_query.in_batches(of: ForemanInventoryUpload.slice_size) : base_query
56
51
  end
57
-
58
- def self.organizations_for_user(portal_user)
59
- Organization
60
- .joins(:telemetry_configuration)
61
- .where(
62
- redhat_access_telemetry_configurations: {
63
- portal_user: portal_user,
64
- enable_telemetry: true,
65
- }
66
- )
67
- end
68
52
  end
69
53
  end
70
54
  end
@@ -19,7 +19,9 @@ module ForemanInventoryUpload
19
19
  def generate_parameters
20
20
  return [] unless Setting[:include_parameter_tags]
21
21
 
22
- (@host.host_inherited_params_objects || []).map { |item| [item.name, item.value] }
22
+ (@host.host_inherited_params_objects || [])
23
+ .map { |item| [item.name, item.value] }
24
+ .select { |_name, value| value.present? || value.is_a?(FalseClass) }
23
25
  end
24
26
 
25
27
  private
@@ -1,5 +1,4 @@
1
1
  require 'katello'
2
- require 'redhat_access'
3
2
  require 'foreman_ansible'
4
3
 
5
4
  module ForemanRhCloud
@@ -43,6 +42,8 @@ module ForemanRhCloud
43
42
  Foreman::Plugin.register :foreman_rh_cloud do
44
43
  requires_foreman '>= 2.3'
45
44
 
45
+ apipie_documented_controllers ["#{ForemanRhCloud::Engine.root}/app/controllers/api/v2/**/*.rb"]
46
+
46
47
  # Add permissions
47
48
  security_block :foreman_rh_cloud do
48
49
  permission(
@@ -93,8 +94,6 @@ module ForemanRhCloud
93
94
  register_custom_status InventorySync::InventoryStatus
94
95
  register_custom_status InsightsClientReportStatus
95
96
 
96
- subscribe 'host_created.event.foreman', ForemanRhCloud::InsightsSubscriber
97
-
98
97
  describe_host do
99
98
  overview_buttons_provider :insights_host_overview_buttons
100
99
  end
@@ -1,3 +1,3 @@
1
1
  module ForemanRhCloud
2
- VERSION = '4.0.24'.freeze
2
+ VERSION = '4.0.26'.freeze
3
3
  end
@@ -100,4 +100,8 @@ module ForemanRhCloud
100
100
  def self.foreman_host
101
101
  @foreman_host ||= ::Host.unscoped.friendly.find(ENV['SATELLITE_RH_CLOUD_FOREMAN_HOST'] || ::SmartProxy.default_capsule.name)
102
102
  end
103
+
104
+ def self.legacy_insights_ca
105
+ "#{ForemanRhCloud::Engine.root}/config/rh_cert-api_chain.pem"
106
+ end
103
107
  end
@@ -4,14 +4,24 @@ module InsightsCloud
4
4
  include ::Actions::RecurringAction
5
5
 
6
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)
7
+ host_ids = InsightsClientReportStatus.stale.reporting.pluck(:host_id)
8
+
9
+ # update all stale records
10
+ InsightsClientReportStatus.where(host_id: host_ids).update_all(status: InsightsClientReportStatus::NO_REPORT)
11
+
12
+ # refresh global status
13
+ Host.where(id: host_ids).preload(:host_statuses).find_in_batches do |hosts|
14
+ hosts.each { |host| host.refresh_global_status! }
15
+ end
10
16
  end
11
17
 
12
18
  def logger
13
19
  action_logger
14
20
  end
21
+
22
+ def rescue_strategy_for_self
23
+ Dynflow::Action::Rescue::Fail
24
+ end
15
25
  end
16
26
  end
17
27
  end
@@ -6,6 +6,11 @@ module InsightsCloud
6
6
  include ::ForemanRhCloud::CloudAuth
7
7
 
8
8
  def plan
9
+ unless cloud_auth_available?
10
+ logger.debug('Cloud authentication is not available, skipping insights sync')
11
+ return
12
+ end
13
+
9
14
  sequence do
10
15
  # This can be turned off when we enable automatic status syncs
11
16
  # This step will query cloud inventory to retrieve inventory uuids for each host
@@ -113,6 +118,10 @@ module InsightsCloud
113
118
 
114
119
  match || { id: nil }
115
120
  end
121
+
122
+ def rescue_strategy_for_self
123
+ Dynflow::Action::Rescue::Fail
124
+ end
116
125
  end
117
126
  end
118
127
  end
@@ -53,6 +53,10 @@ module InsightsCloud
53
53
  }
54
54
  )
55
55
  end
56
+
57
+ def rescue_strategy_for_self
58
+ Dynflow::Action::Rescue::Fail
59
+ end
56
60
  end
57
61
  end
58
62
  end
@@ -7,11 +7,21 @@ module InsightsCloud
7
7
 
8
8
  RULE_ID_REGEX = /[^:]*:(?<id>.*)/
9
9
 
10
+ def plan
11
+ unless cloud_auth_available?
12
+ logger.debug('Cloud authentication is not available, skipping resolutions sync')
13
+ return
14
+ end
15
+
16
+ plan_self
17
+ end
18
+
10
19
  def run
11
20
  InsightsResolution.transaction do
12
21
  InsightsResolution.delete_all
13
- api_response = query_insights_resolutions(relevant_rules)
14
- write_resolutions(api_response)
22
+ rule_ids = relevant_rules
23
+ api_response = query_insights_resolutions(rule_ids) unless rule_ids.empty?
24
+ write_resolutions(api_response) if api_response
15
25
  end
16
26
  end
17
27
 
@@ -61,6 +71,10 @@ module InsightsCloud
61
71
  def to_rule_id(resolution_rule_id)
62
72
  RULE_ID_REGEX.match(resolution_rule_id).named_captures.fetch('id', resolution_rule_id)
63
73
  end
74
+
75
+ def rescue_strategy_for_self
76
+ Dynflow::Action::Rescue::Fail
77
+ end
64
78
  end
65
79
  end
66
80
  end
@@ -6,8 +6,17 @@ module InsightsCloud
6
6
  include ::ForemanRhCloud::CloudAuth
7
7
 
8
8
  def plan
9
- plan_self
10
- plan_resolutions
9
+ unless cloud_auth_available?
10
+ logger.debug('Cloud authentication is not available, skipping rules sync')
11
+ return
12
+ end
13
+
14
+ # since the tasks are not connected, we need to force sequence execution here
15
+ # to make sure we don't run resolutions until we synced all our rules
16
+ sequence do
17
+ plan_self
18
+ plan_resolutions
19
+ end
11
20
  end
12
21
 
13
22
  def plan_resolutions
@@ -66,6 +75,10 @@ module InsightsCloud
66
75
  rating: rule_hash['rating'],
67
76
  }
68
77
  end
78
+
79
+ def rescue_strategy_for_self
80
+ Dynflow::Action::Rescue::Fail
81
+ end
69
82
  end
70
83
  end
71
84
  end
@@ -28,4 +28,8 @@ module InsightsCloud
28
28
  def self.remediation_rule_id(rule_id)
29
29
  "advisor:#{rule_id}"
30
30
  end
31
+
32
+ def self.enable_client_param
33
+ 'host_registration_insights'
34
+ end
31
35
  end
@@ -5,6 +5,11 @@ module InventorySync
5
5
  set_callback :step, :around, :update_statuses_batch
6
6
 
7
7
  def plan(organization)
8
+ unless cloud_auth_available?
9
+ logger.debug('Cloud authentication is not available, skipping inventory hosts sync')
10
+ return
11
+ end
12
+
8
13
  plan_self(organization_id: organization.id)
9
14
  end
10
15
 
@@ -34,6 +39,10 @@ module InventorySync
34
39
  host_statuses[:sync] += results.touched.size
35
40
  end
36
41
 
42
+ def rescue_strategy_for_self
43
+ Dynflow::Action::Rescue::Fail
44
+ end
45
+
37
46
  private
38
47
 
39
48
  def update_hosts_status(status_hashes, touched)
@@ -5,6 +5,11 @@ module InventorySync
5
5
  set_callback :step, :around, :create_facets
6
6
 
7
7
  def plan
8
+ unless cloud_auth_available?
9
+ logger.debug('Cloud authentication is not available, skipping inventory hosts sync')
10
+ return
11
+ end
12
+
8
13
  # by default the tasks will be executed concurrently
9
14
  plan_self
10
15
  plan_self_host_sync
@@ -23,6 +28,10 @@ module InventorySync
23
28
  results
24
29
  end
25
30
 
31
+ def rescue_strategy_for_self
32
+ Dynflow::Action::Rescue::Fail
33
+ end
34
+
26
35
  private
27
36
 
28
37
  def add_missing_insights_facets(uuids_hash)
@@ -24,6 +24,10 @@ module InventorySync
24
24
  def logger
25
25
  action_logger
26
26
  end
27
+
28
+ def rescue_strategy_for_self
29
+ Dynflow::Action::Rescue::Fail
30
+ end
27
31
  end
28
32
  end
29
33
  end
@@ -3,6 +3,15 @@ module InventorySync
3
3
  class InventorySelfHostSync < QueryInventoryJob
4
4
  set_callback :step, :around, :create_facets
5
5
 
6
+ def plan
7
+ unless cloud_auth_available?
8
+ logger.debug('Cloud authentication is not available, skipping self host sync')
9
+ return
10
+ end
11
+
12
+ plan_self
13
+ end
14
+
6
15
  def create_facets
7
16
  # get the results from the event
8
17
  results = yield
@@ -11,6 +20,10 @@ module InventorySync
11
20
  results
12
21
  end
13
22
 
23
+ def rescue_strategy_for_self
24
+ Dynflow::Action::Rescue::Fail
25
+ end
26
+
14
27
  private
15
28
 
16
29
  def add_missing_insights_facet(uuids_hash)
@@ -50,6 +50,10 @@ module InventorySync
50
50
  def request_url
51
51
  ForemanInventoryUpload.inventory_export_url
52
52
  end
53
+
54
+ def rescue_strategy_for_self
55
+ Dynflow::Action::Rescue::Fail
56
+ end
53
57
  end
54
58
  end
55
59
  end
@@ -4,4 +4,19 @@ namespace :rh_cloud_insights do
4
4
  ForemanTasks.sync_task(InsightsCloud::Async::InsightsFullSync)
5
5
  puts "Synchronized Insights hosts hits data"
6
6
  end
7
+
8
+ desc "Remove insights client report statuses by searching on host criteria"
9
+ task clean_statuses: [:environment] do
10
+ hosts_search = ENV['SEARCH']
11
+
12
+ if hosts_search.empty?
13
+ puts 'Must specify SEARCH= criteria for hosts search'
14
+ next
15
+ end
16
+
17
+ cleaner = ForemanRhCloud::InsightsStatusCleaner.new
18
+ deleted_count = cleaner.clean(hosts_search)
19
+
20
+ puts "Deleted #{deleted_count} insights statuses"
21
+ end
7
22
  end
@@ -19,7 +19,6 @@ namespace :rh_cloud_inventory do
19
19
  end
20
20
  desc 'Generate inventory report to be sent to Red Hat cloud'
21
21
  task generate: :environment do
22
- portal_user = ENV['portal_user']
23
22
  organizations = [ENV['organization_id']]
24
23
  base_folder = ENV['target'] || Dir.pwd
25
24
 
@@ -29,18 +28,12 @@ namespace :rh_cloud_inventory do
29
28
  puts "Using #{base_folder} for the output"
30
29
  end
31
30
 
32
- if portal_user.empty? && organizations.empty?
33
- puts "Must specify either portal_user or organization_id"
31
+ if organizations.empty?
32
+ puts "Must specify organization_id"
34
33
  return
35
34
  end
36
35
 
37
36
  User.as_anonymous_admin do
38
- if portal_user
39
- puts "Generating report for all organizations associated with #{portal_user}"
40
- base_folder = File.join(base_folder, portal_user)
41
- organizations = ForemanInventoryUpload::Generators::Queries.organizations_for_user(portal_user).pluck(:id)
42
- end
43
-
44
37
  organizations.each do |organization|
45
38
  target = File.join(base_folder, ForemanInventoryUpload.facts_archive_name(organization))
46
39
  archived_report_generator = ForemanInventoryUpload::Generators::ArchivedReport.new(target, Logger.new(STDOUT))