foreman_rh_cloud 3.0.16 → 3.0.20

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 (248) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +17 -2
  3. data/app/controllers/concerns/insights_cloud/candlepin_cache.rb +28 -0
  4. data/app/controllers/concerns/insights_cloud/client_authentication.rb +23 -0
  5. data/app/controllers/foreman_inventory_upload/accounts_controller.rb +3 -15
  6. data/app/controllers/foreman_inventory_upload/tasks_controller.rb +14 -3
  7. data/app/controllers/foreman_inventory_upload/uploads_controller.rb +1 -56
  8. data/app/controllers/foreman_inventory_upload/uploads_settings_controller.rb +34 -0
  9. data/app/controllers/insights_cloud/api/machine_telemetries_controller.rb +73 -0
  10. data/app/controllers/insights_cloud/hits_controller.rb +40 -3
  11. data/app/controllers/insights_cloud/settings_controller.rb +1 -1
  12. data/app/controllers/insights_cloud/tasks_controller.rb +5 -1
  13. data/app/models/insights_hit.rb +16 -1
  14. data/app/models/insights_resolution.rb +3 -0
  15. data/app/models/insights_rule.rb +3 -0
  16. data/app/models/inventory_sync/inventory_status.rb +6 -0
  17. data/app/models/setting/rh_cloud.rb +16 -6
  18. data/app/services/foreman_rh_cloud/branch_info.rb +46 -0
  19. data/app/services/foreman_rh_cloud/cloud_connector.rb +12 -7
  20. data/app/services/foreman_rh_cloud/cloud_request_forwarder.rb +115 -0
  21. data/app/services/foreman_rh_cloud/remediations_retriever.rb +78 -0
  22. data/app/services/foreman_rh_cloud/template_renderer_helper.rb +22 -0
  23. data/app/views/job_templates/rh_cloud_remediations.erb +14 -0
  24. data/config/routes.rb +14 -6
  25. data/db/migrate/20210214000001_create_rules_and_resolutions.foreman_rh_cloud.rb +24 -0
  26. data/db/migrate/20210214000002_add_rule_id_to_hits.foreman_rh_cloud.rb +5 -0
  27. data/db/migrate/20210307000001_add_unique_to_insights_facet.foreman_rh_cloud.rb +11 -0
  28. data/db/migrate/20210404000001_change_resolutions.foreman_rh_cloud.rb +10 -0
  29. data/db/seeds.d/50_job_templates.rb +14 -0
  30. data/lib/foreman_inventory_upload.rb +7 -1
  31. data/lib/foreman_inventory_upload/generators/json_stream.rb +1 -1
  32. data/lib/foreman_inventory_upload/generators/queries.rb +1 -1
  33. data/lib/foreman_inventory_upload/generators/slice.rb +17 -24
  34. data/lib/foreman_inventory_upload/generators/tags.rb +59 -0
  35. data/lib/foreman_inventory_upload/scripts/uploader.sh.erb +5 -1
  36. data/lib/foreman_rh_cloud.rb +13 -0
  37. data/lib/foreman_rh_cloud/engine.rb +14 -1
  38. data/lib/foreman_rh_cloud/version.rb +1 -1
  39. data/lib/insights_cloud.rb +16 -0
  40. data/lib/insights_cloud/async/insights_full_sync.rb +57 -22
  41. data/lib/insights_cloud/async/insights_resolutions_sync.rb +69 -0
  42. data/lib/insights_cloud/async/insights_rules_sync.rb +76 -0
  43. data/lib/insights_cloud/async/insights_scheduled_sync.rb +1 -1
  44. data/lib/insights_cloud/async/rules_result.rb +13 -0
  45. data/lib/inventory_sync/async/host_result.rb +11 -6
  46. data/lib/inventory_sync/async/inventory_full_sync.rb +24 -41
  47. data/lib/inventory_sync/async/inventory_hosts_sync.rb +34 -0
  48. data/lib/inventory_sync/async/query_inventory_job.rb +54 -0
  49. data/lib/tasks/insights.rake +1 -1
  50. data/lib/tasks/rh_cloud_inventory.rake +1 -1
  51. data/package.json +1 -1
  52. data/test/controllers/accounts_controller_test.rb +1 -5
  53. data/test/controllers/insights_cloud/api/machine_telemetries_controller_test.rb +119 -0
  54. data/test/controllers/uploads_controller_test.rb +0 -13
  55. data/test/controllers/uploads_settings_controller_test.rb +31 -0
  56. data/test/factories/insights_factories.rb +24 -1
  57. data/test/factories/inventory_upload_factories.rb +12 -0
  58. data/test/jobs/insights_full_sync_test.rb +36 -11
  59. data/test/jobs/insights_resolutions_sync_test.rb +74 -0
  60. data/test/jobs/insights_rules_sync_test.rb +200 -0
  61. data/test/jobs/inventory_full_sync_test.rb +182 -12
  62. data/test/test_plugin_helper.rb +13 -0
  63. data/test/unit/services/foreman_rh_cloud/branch_info_test.rb +60 -0
  64. data/test/unit/services/foreman_rh_cloud/cloud_request_forwarder_test.rb +141 -0
  65. data/test/unit/services/foreman_rh_cloud/remediations_retriever_test.rb +49 -0
  66. data/test/unit/services/foreman_rh_cloud/template_renderer_helper_test.rb +28 -0
  67. data/test/unit/slice_generator_test.rb +36 -5
  68. data/test/unit/tags_generator_test.rb +60 -0
  69. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountList.fixtures.js +4 -19
  70. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountList.js +7 -7
  71. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountListHelper.js +6 -6
  72. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountListReducer.js +0 -34
  73. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountListSelectors.js +0 -14
  74. data/webpack/ForemanInventoryUpload/Components/AccountList/Components/EmptyResults/emptyResults.scss +6 -4
  75. data/webpack/ForemanInventoryUpload/Components/AccountList/Components/EmptyState/emptyState.scss +6 -4
  76. data/webpack/ForemanInventoryUpload/Components/AccountList/Components/ErrorState/errorState.scss +14 -12
  77. data/webpack/ForemanInventoryUpload/Components/AccountList/Components/ListItem/ListItem.fixtures.js +10 -1
  78. data/webpack/ForemanInventoryUpload/Components/AccountList/Components/ListItem/ListItem.js +7 -7
  79. data/webpack/ForemanInventoryUpload/Components/AccountList/Components/ListItem/__tests__/__snapshots__/ListItem.test.js.snap +12 -9
  80. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListHelper.test.js +3 -3
  81. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListReducer.test.js +0 -30
  82. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListSelectors.test.js +1 -23
  83. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/__snapshots__/AccountList.test.js.snap +6 -6
  84. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/__snapshots__/AccountListActions.test.js.snap +3 -8
  85. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/__snapshots__/AccountListReducer.test.js.snap +3 -35
  86. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/__snapshots__/AccountListSelectors.test.js.snap +6 -18
  87. data/webpack/ForemanInventoryUpload/Components/AccountList/accountList.scss +24 -22
  88. data/webpack/ForemanInventoryUpload/Components/Dashboard/Dashboard.fixtures.js +1 -1
  89. data/webpack/ForemanInventoryUpload/Components/Dashboard/Dashboard.js +1 -1
  90. data/webpack/ForemanInventoryUpload/Components/Dashboard/DashboardActions.js +1 -1
  91. data/webpack/ForemanInventoryUpload/Components/Dashboard/__tests__/DashboardActions.test.js +4 -4
  92. data/webpack/ForemanInventoryUpload/Components/FileDownload/FileDownload.js +2 -1
  93. data/webpack/ForemanInventoryUpload/Components/FileDownload/fileDownload.scss +4 -2
  94. data/webpack/ForemanInventoryUpload/Components/FullScreenModal/FullScreenModal.js +2 -1
  95. data/webpack/ForemanInventoryUpload/Components/FullScreenModal/fullScreenModal.scss +16 -14
  96. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/Components/ClearButton/ClearButton.js +2 -1
  97. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/InventoryFilter.fixtures.js +2 -1
  98. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/InventoryFilter.js +30 -16
  99. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/InventoryFilterReducer.js +1 -24
  100. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/InventoryFilter.test.js +8 -2
  101. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/InventoryFilterReducer.test.js +1 -17
  102. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/__snapshots__/InventoryFilter.test.js.snap +4 -9
  103. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/__snapshots__/InventoryFilterReducer.test.js.snap +0 -12
  104. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/__snapshots__/integration.test.js.snap +2 -3
  105. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/integration.test.js +1 -1
  106. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/index.js +2 -0
  107. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/inventoryFilter.scss +1 -1
  108. data/webpack/ForemanInventoryUpload/Components/InventorySettings/AdvancedSetting/AdvancedSettingActions.js +7 -0
  109. data/webpack/ForemanInventoryUpload/Components/InventorySettings/AdvancedSetting/AdvancedSettingsConstants.js +28 -0
  110. data/webpack/ForemanInventoryUpload/Components/InventorySettings/AdvancedSetting/__tests__/AdvancedSettingActions.test.js +9 -0
  111. data/webpack/ForemanInventoryUpload/Components/InventorySettings/AdvancedSetting/__tests__/__snapshots__/AdvancedSettingActions.test.js.snap +18 -0
  112. data/webpack/ForemanInventoryUpload/Components/InventorySettings/AdvancedSetting/index.js +29 -0
  113. data/webpack/ForemanInventoryUpload/Components/InventorySettings/InventorySettings.js +7 -8
  114. data/webpack/ForemanInventoryUpload/Components/InventorySettings/InventorySettings.scss +15 -9
  115. data/webpack/ForemanInventoryUpload/Components/InventorySettings/InventorySettingsActions.js +23 -0
  116. data/webpack/ForemanInventoryUpload/Components/InventorySettings/InventorySettingsConstants.js +9 -0
  117. data/webpack/ForemanInventoryUpload/Components/InventorySettings/InventorySettingsSelectors.js +19 -0
  118. data/webpack/ForemanInventoryUpload/Components/InventorySettings/__tests__/InventorySettingsActions.test.js +14 -0
  119. data/webpack/ForemanInventoryUpload/Components/InventorySettings/__tests__/__snapshots__/InventorySettings.test.js.snap +16 -4
  120. data/webpack/ForemanInventoryUpload/Components/InventorySettings/__tests__/__snapshots__/InventorySettingsActions.test.js.snap +26 -0
  121. data/webpack/ForemanInventoryUpload/Components/InventorySettings/index.js +16 -1
  122. data/webpack/ForemanInventoryUpload/Components/NavContainer/NavContainer.fixtures.js +1 -1
  123. data/webpack/ForemanInventoryUpload/Components/NavContainer/navContainer.scss +7 -5
  124. data/webpack/ForemanInventoryUpload/Components/PageHeader/PageHeader.js +2 -0
  125. data/webpack/ForemanInventoryUpload/Components/PageHeader/PageHeader.scss +13 -1
  126. data/webpack/ForemanInventoryUpload/Components/PageHeader/__tests__/__snapshots__/PageHeader.test.js.snap +2 -1
  127. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/PageDescription/PageDescription.js +15 -2
  128. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/PageDescription/__tests__/__snapshots__/PageDescription.test.js.snap +13 -2
  129. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SettingsWarning/SettingsWarning.js +64 -0
  130. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SettingsWarning/SettingsWarning.test.js +18 -0
  131. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SettingsWarning/__snapshots__/SettingsWarning.test.js.snap +30 -0
  132. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SettingsWarning/index.js +25 -0
  133. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButton.js +2 -2
  134. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonActions.js +81 -46
  135. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonConstants.js +3 -3
  136. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonSelectors.js +6 -12
  137. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButton.test.js +2 -2
  138. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonFixtures.js +1 -9
  139. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonSelectors.test.js +18 -27
  140. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButtonSelectors.test.js.snap +1 -16
  141. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/integrations.test.js.snap +58 -0
  142. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/integrations.test.js +51 -0
  143. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/components/Modal.js +1 -1
  144. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/components/modal.scss +1 -1
  145. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/index.js +3 -6
  146. data/webpack/ForemanInventoryUpload/Components/ReportGenerate/ReportGenerate.fixtures.js +1 -1
  147. data/webpack/ForemanInventoryUpload/Components/ReportGenerate/ReportGenerate.js +1 -1
  148. data/webpack/ForemanInventoryUpload/Components/ReportUpload/ReportUpload.fixtures.js +1 -1
  149. data/webpack/ForemanInventoryUpload/Components/ReportUpload/ReportUpload.js +1 -1
  150. data/webpack/ForemanInventoryUpload/Components/ScheduledRun/index.js +1 -1
  151. data/webpack/ForemanInventoryUpload/Components/ScheduledRun/scheduledRun.scss +8 -6
  152. data/webpack/ForemanInventoryUpload/Components/StatusChart/statusChart.scss +9 -7
  153. data/webpack/ForemanInventoryUpload/Components/TabBody/tabBody.scss +4 -2
  154. data/webpack/ForemanInventoryUpload/Components/TabContainer/tabContainer.scss +7 -5
  155. data/webpack/ForemanInventoryUpload/Components/TabHeader/TabHeader.js +2 -1
  156. data/webpack/ForemanInventoryUpload/Components/TabHeader/tabHeader.scss +15 -13
  157. data/webpack/ForemanInventoryUpload/Components/Terminal/terminal.scss +27 -25
  158. data/webpack/ForemanInventoryUpload/ForemanInventoryUpload.js +1 -1
  159. data/webpack/ForemanInventoryUpload/ForemanInventoryUploadReducers.js +0 -2
  160. data/webpack/ForemanInventoryUpload/SubscriptionsPageExtension/InventoryAutoUpload/InventoryAutoUpload.js +13 -8
  161. data/webpack/ForemanInventoryUpload/SubscriptionsPageExtension/InventoryAutoUpload/__tests__/InventoryAutoUpload.test.js +3 -3
  162. data/webpack/ForemanInventoryUpload/SubscriptionsPageExtension/InventoryAutoUpload/components/AdvancedSettings/AdvancedSettings.js +21 -9
  163. data/webpack/ForemanInventoryUpload/SubscriptionsPageExtension/InventoryAutoUpload/components/AdvancedSettings/index.js +3 -8
  164. data/webpack/ForemanInventoryUpload/SubscriptionsPageExtension/InventoryAutoUpload/index.js +6 -4
  165. data/webpack/ForemanInventoryUpload/__tests__/__snapshots__/ForemanInventoryUpload.test.js.snap +1 -1
  166. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/InsightsSettings.test.js +1 -1
  167. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/__tests__/InsightsSyncSwitcher.test.js +1 -1
  168. data/webpack/InsightsCloudSync/Components/InsightsTable/InsightsTable.js +10 -6
  169. data/webpack/InsightsCloudSync/Components/InsightsTable/InsightsTableActions.js +55 -30
  170. data/webpack/InsightsCloudSync/Components/InsightsTable/InsightsTableConstants.js +10 -9
  171. data/webpack/InsightsCloudSync/Components/InsightsTable/InsightsTableHelpers.js +14 -6
  172. data/webpack/InsightsCloudSync/Components/InsightsTable/InsightsTableSelectors.js +7 -0
  173. data/webpack/InsightsCloudSync/Components/InsightsTable/SelectAllAlert.js +4 -10
  174. data/webpack/InsightsCloudSync/Components/InsightsTable/__tests__/InsightsTableActions.test.js +48 -0
  175. data/webpack/InsightsCloudSync/Components/InsightsTable/__tests__/__snapshots__/InsightsTable.test.js.snap +13 -24
  176. data/webpack/InsightsCloudSync/Components/InsightsTable/__tests__/__snapshots__/InsightsTableActions.test.js.snap +132 -0
  177. data/webpack/InsightsCloudSync/Components/InsightsTable/__tests__/__snapshots__/InsightsTableSelectors.test.js.snap +1 -0
  178. data/webpack/InsightsCloudSync/Components/InsightsTable/__tests__/fixtures.js +2 -2
  179. data/webpack/InsightsCloudSync/Components/InsightsTable/table.scss +10 -0
  180. data/webpack/InsightsCloudSync/Components/RemediationModal/RemediateButton.js +59 -0
  181. data/webpack/InsightsCloudSync/Components/RemediationModal/RemediationActions.js +12 -0
  182. data/webpack/InsightsCloudSync/Components/RemediationModal/RemediationHelpers.js +43 -0
  183. data/webpack/InsightsCloudSync/Components/RemediationModal/RemediationModal.js +101 -0
  184. data/webpack/InsightsCloudSync/Components/RemediationModal/RemediationModal.scss +9 -0
  185. data/webpack/InsightsCloudSync/Components/RemediationModal/RemediationModalFooter.js +43 -0
  186. data/webpack/InsightsCloudSync/Components/RemediationModal/RemediationTableConstants.js +38 -0
  187. data/webpack/InsightsCloudSync/Components/RemediationModal/Resolutions.js +55 -0
  188. data/webpack/InsightsCloudSync/Components/RemediationModal/index.js +34 -0
  189. data/webpack/InsightsCloudSync/InsightsCloudSync.js +23 -16
  190. data/webpack/InsightsCloudSync/InsightsCloudSync.scss +5 -0
  191. data/webpack/InsightsCloudSync/InsightsCloudSync.test.js +1 -1
  192. data/webpack/InsightsCloudSync/InsightsCloudSyncActions.js +23 -20
  193. data/webpack/InsightsCloudSync/InsightsCloudSyncConstants.js +1 -1
  194. data/webpack/InsightsCloudSync/__snapshots__/InsightsCloudSync.test.js.snap +39 -36
  195. data/webpack/InsightsCloudSync/__tests__/InsightsCloudSyncActions.test.js +9 -0
  196. data/webpack/InsightsCloudSync/__tests__/__snapshots__/InsightsCloudSyncActions.test.js.snap +11 -0
  197. data/webpack/InsightsHostDetailsTab/InsightsTab.js +2 -1
  198. data/webpack/__mocks__/foremanReact/components/Layout/LayoutSelectors.js +1 -0
  199. data/webpack/__mocks__/foremanReact/redux/API/APISelectors.js +1 -1
  200. data/webpack/__mocks__/foremanReact/redux/API/index.js +1 -0
  201. data/webpack/__mocks__/foremanReact/redux/middlewares/IntervalMiddleware.js +4 -0
  202. data/webpack/common/Switcher/SwitcherPF4.scss +1 -1
  203. data/webpack/{InsightsCloudSync/Components/InsightsTable/components → common/table}/EmptyState.js +0 -0
  204. data/webpack/common/table/helpers.js +7 -0
  205. metadata +101 -56
  206. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/AutoUploadSwitcher.fixtures.js +0 -3
  207. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/AutoUploadSwitcher.js +0 -29
  208. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/AutoUploadSwitcherActions.js +0 -29
  209. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/AutoUploadSwitcherConstants.js +0 -1
  210. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/__tests__/AutoUploadSwitcher.test.js +0 -14
  211. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/__tests__/AutoUploadSwitcherActions.test.js +0 -24
  212. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/__tests__/__snapshots__/AutoUploadSwitcher.test.js.snap +0 -15
  213. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/__tests__/__snapshots__/AutoUploadSwitcherActions.test.js.snap +0 -31
  214. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/index.js +0 -17
  215. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/ExcludePackagesSwitcher.fixtures.js +0 -1
  216. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/ExcludePackagesSwitcher.js +0 -27
  217. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/ExcludePackagesSwitcherActions.js +0 -29
  218. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/ExcludePackagesSwitcherConstants.js +0 -1
  219. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/ExcludePackagesSwitcher.test.js +0 -13
  220. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/ExcludePackagesSwitcherActions.test.js +0 -21
  221. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/__snapshots__/ExcludePackagesSwitcher.test.js.snap +0 -15
  222. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/__snapshots__/ExcludePackagesSwitcherActions.test.js.snap +0 -31
  223. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/__snapshots__/integration.test.js.snap +0 -46
  224. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/integration.test.js +0 -36
  225. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/index.js +0 -20
  226. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcher.fixtures.js +0 -2
  227. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcher.js +0 -27
  228. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcherActions.js +0 -29
  229. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcherConstants.js +0 -1
  230. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/__tests__/HostObfuscationSwitcher.test.js +0 -14
  231. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/__tests__/HostObfuscationSwitcherActions.test.js +0 -24
  232. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/__tests__/__snapshots__/HostObfuscationSwitcher.test.js.snap +0 -15
  233. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/__tests__/__snapshots__/HostObfuscationSwitcherActions.test.js.snap +0 -31
  234. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/index.js +0 -20
  235. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/IpsObfuscationSwitcher.fixtures.js +0 -1
  236. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/IpsObfuscationSwitcher.js +0 -27
  237. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/IpsObfuscationSwitcherActions.js +0 -29
  238. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/IpsObfuscationSwitcherConstants.js +0 -1
  239. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/__tests__/IpsObfuscationSwitcher.test.js +0 -13
  240. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/__tests__/IpsObfuscationSwitcherActions.test.js +0 -21
  241. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/__tests__/__snapshots__/IpsObfuscationSwitcher.test.js.snap +0 -15
  242. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/__tests__/__snapshots__/IpsObfuscationSwitcherActions.test.js.snap +0 -31
  243. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/index.js +0 -20
  244. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonReducer.js +0 -36
  245. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonActions.test.js +0 -31
  246. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonReducer.test.js +0 -26
  247. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButtonActions.test.js.snap +0 -98
  248. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButtonReducer.test.js.snap +0 -18
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 40911c61287fcace17eb79713f616515ca463a0c671f2a663b5dca8c4587c0ca
4
- data.tar.gz: 5db731e3f022086fc55b9f6dded6917ff4d459c0565aa48fb4742cdcb2adbb0a
3
+ metadata.gz: 1a6bf66d7fd1c5302e88b9cd6f28f36c36d9ba8ecfcba3f32e4076c5ba856a05
4
+ data.tar.gz: d9d67e5ec55ac92e3101544c9e2d7f8f3d8e40112927c70efc23ddb117e8f96b
5
5
  SHA512:
6
- metadata.gz: 06c1ac8778b2c119f3594cfec3afec6662b4ab6925a7b591d88cfa3fb80b76f390d38e5e152249f253095a71ca7484e8fe715906294729d71045bcc5d35022d0
7
- data.tar.gz: c629a9b8b860600b1c0a180ebf2d057cc3201a3596fa32bbcf650661e4612fdd5612dba787b32ba70cf8b546662af68d49e98e4edd4e77f49deb22b9d681a408
6
+ metadata.gz: c241a52fe6d3f028777c0c70cea3cc68a2008cf2392d4dd9608b5332614638dce68baade016fddd46985ddcf6cddfa9638d28a86c6f645147ed52a304063a4a4
7
+ data.tar.gz: f32f203c82ddc7d4964155ac0afcfa18fc6cd6501df8a9bff9197e6fc03590cd5c71720fb8c512c64c920b503ed01d7a6118f2633e64f36f5a05ffd222af4197
data/README.md CHANGED
@@ -52,7 +52,7 @@ From command-line:
52
52
 
53
53
  # all organizations
54
54
  /usr/sbin/foreman-rake rh_cloud_insights:sync
55
-
55
+
56
56
  # specific organization with id 1
57
57
  export organization_id=1
58
58
  /usr/sbin/foreman-rake rh_cloud_insights:sync
@@ -61,6 +61,22 @@ From command-line:
61
61
 
62
62
  *Todo list here*
63
63
 
64
+ ## Design
65
+
66
+ ### Endpoints
67
+
68
+ | purpose | url | ENV setting for the **bold** part
69
+ | ------------------------------| -------| -----------
70
+ | Inventory uploads | **https://cert.cloud.redhat.com/api/ingress/v1/upload** | SATELLITE_INVENTORY_UPLOAD_URL
71
+ | Query inventory hosts list | **https://cloud.redhat.com** /api/inventory/v1/hosts?tags= | SATELLITE_RH_CLOUD_URL
72
+ | Query insights hits | **https://cloud.redhat.com** /api/insights/v1/export/hits/ | SATELLITE_RH_CLOUD_URL
73
+ | Query insights rules | **https://cloud.redhat.com** /api/insights/v1/rule/?impacting=true&rule_status=enabled&has_playbook=true&limit=&offset= | SATELLITE_RH_CLOUD_URL
74
+ | Query insights resolutions | **https://cloud.redhat.com** /api/remediations/v1/resolutions| SATELLITE_RH_CLOUD_URL
75
+ | Forward insights-client `/static` requests | **https://cloud.redhat.com** /api/static | SATELLITE_RH_CLOUD_URL
76
+ | Forward insights-client legacy `/platform` requests | **https://cert.cloud.redhat.com** /api | SATELLITE_CERT_RH_CLOUD_URL
77
+ | Forward insights-client legacy `/redhat_access/r/insights` requests | **https://cert-api.access.redhat.com** /r/insights | SATELLITE_LEGACY_INSIGHTS_URL
78
+
79
+
64
80
  ## Contributing
65
81
 
66
82
  Fork and send a Pull Request. Thanks!
@@ -81,4 +97,3 @@ GNU General Public License for more details.
81
97
 
82
98
  You should have received a copy of the GNU General Public License
83
99
  along with this program. If not, see <http://www.gnu.org/licenses/>.
84
-
@@ -0,0 +1,28 @@
1
+ module InsightsCloud
2
+ module CandlepinCache
3
+ extend ActiveSupport::Concern
4
+
5
+ def upstream_owner(org)
6
+ # We use a cache because owner_details is a call to Candlepin
7
+ Rails.cache.fetch("rh_cloud_upstream_owner_#{org.id}", expires_in: 1.minute) do
8
+ org.owner_details['upstreamConsumer']
9
+ end
10
+ end
11
+
12
+ def cp_owner_id(org)
13
+ owner = upstream_owner(org)
14
+ owner['uuid'] if owner
15
+ end
16
+
17
+ def candlepin_id_cert(org)
18
+ owner = upstream_owner(org)
19
+ return unless owner
20
+ id_cert = {
21
+ cert: owner.dig('idCert', 'cert'),
22
+ key: owner.dig('idCert', 'key'),
23
+ }
24
+ return unless id_cert.values.all?
25
+ id_cert
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,23 @@
1
+ module InsightsCloud
2
+ module ClientAuthentication
3
+ extend ActiveSupport::Concern
4
+
5
+ include ::Katello::Authentication::ClientAuthentication
6
+
7
+ def authorize
8
+ client_authorized? || super
9
+ end
10
+
11
+ def client_authorized?
12
+ authenticate_client && valid_machine_user?
13
+ end
14
+
15
+ def valid_machine_user?
16
+ subscribed_host_by_uuid(User.current.uuid).present?
17
+ end
18
+
19
+ def subscribed_host_by_uuid(uuid)
20
+ @host = Host.unscoped.joins(:subscription_facet).where(:katello_subscription_facets => {:uuid => uuid }).first
21
+ end
22
+ end
23
+ end
@@ -10,36 +10,24 @@ module ForemanInventoryUpload
10
10
  upload_report_status = status_for(id, ForemanInventoryUpload::Async::UploadReportJob)
11
11
 
12
12
  [
13
- id,
13
+ label,
14
14
  {
15
15
  generate_report_status: generate_report_status,
16
16
  upload_report_status: upload_report_status,
17
- label: label,
17
+ id: id,
18
18
  },
19
19
  ]
20
20
  end
21
21
  ]
22
22
 
23
23
  render json: {
24
- autoUploadEnabled: Setting[:allow_auto_inventory_upload],
25
- hostObfuscationEnabled: Setting[:obfuscate_inventory_hostnames],
26
- ipsObfuscationEnabled: Setting[:obfuscate_inventory_ips],
27
- cloudToken: Setting[:rh_cloud_token],
28
- excludePackages: Setting[:exclude_installed_packages],
29
24
  accounts: accounts,
30
- CloudConnectorStatus: cloud_connector_status,
25
+ CloudConnectorStatus: ForemanInventoryUpload::UploadsSettingsController.cloud_connector_status,
31
26
  }, status: :ok
32
27
  end
33
28
 
34
29
  private
35
30
 
36
- def cloud_connector_status
37
- cloud_connector = ForemanRhCloud::CloudConnector.new
38
- job = cloud_connector&.latest_job
39
- return nil unless job
40
- { id: job.id, task: ForemanTasks::Task.where(:id => job.task_id).first }
41
- end
42
-
43
31
  def status_for(label, job_class)
44
32
  label = job_class.output_label(label)
45
33
  ForemanInventoryUpload::Async::ProgressOutput.get(label)&.status
@@ -13,12 +13,23 @@ module ForemanInventoryUpload
13
13
  message: N_('Nothing to sync, there are no hosts with subscription for this organization.'),
14
14
  }, status: :method_not_allowed
15
15
  else
16
- host_statuses = InventorySync::Async::InventoryFullSync.perform_now(selected_org)
16
+ task = ForemanTasks.async_task(InventorySync::Async::InventoryFullSync, selected_org)
17
17
  end
18
+ return render json: { message: N_('there was an issue triggering the task') }, status: :internal_server_error unless task
18
19
 
19
20
  render json: {
20
- syncHosts: host_statuses[:sync],
21
- disconnectHosts: host_statuses[:disconnect],
21
+ task: task,
22
+ }, status: :ok
23
+ end
24
+
25
+ def show
26
+ task = ForemanTasks::Task.find_by(id: params[:id])
27
+ return render json: { message: N_('No task was found') }, status: :internal_server_error unless task
28
+
29
+ render json: {
30
+ endedAt: task.ended_at,
31
+ output: task.output,
32
+ result: task.result,
22
33
  }, status: :ok
23
34
  end
24
35
  end
@@ -14,67 +14,12 @@ module ForemanInventoryUpload
14
14
  files = Dir["{#{ForemanInventoryUpload.uploads_file_path(filename)},#{ForemanInventoryUpload.done_file_path(filename)}}"]
15
15
 
16
16
  return send_file files.first, disposition: 'attachment', filename: filename unless files.empty?
17
- throw_flash_error "File doesn't exist"
18
- end
19
-
20
- def throw_flash_error(message)
21
- process_error(
22
- :redirect => foreman_inventory_upload_index_path,
23
- :error_msg => message
24
- )
17
+ raise ::Foreman::Exception.new("The report file doesn't exist")
25
18
  end
26
19
 
27
20
  def enable_cloud_connector
28
21
  cloud_connector = ForemanRhCloud::CloudConnector.new
29
22
  render json: cloud_connector.install.to_json
30
23
  end
31
-
32
- def auto_upload
33
- Setting[:allow_auto_inventory_upload] = auto_upload_params
34
- render_setting(:autoUploadEnabled, :allow_auto_inventory_upload)
35
- end
36
-
37
- def show_auto_upload
38
- render_setting(:autoUploadEnabled, :allow_auto_inventory_upload)
39
- end
40
-
41
- def auto_upload_params
42
- ActiveModel::Type::Boolean.new.cast(params.require(:value))
43
- end
44
-
45
- def host_obfuscation
46
- Setting[:obfuscate_inventory_hostnames] = host_obfuscation_params
47
- render_setting(:hostObfuscationEnabled, :obfuscate_inventory_hostnames)
48
- end
49
-
50
- def host_obfuscation_params
51
- ActiveModel::Type::Boolean.new.cast(params.require(:value))
52
- end
53
-
54
- def installed_packages_inclusion
55
- Setting[:exclude_installed_packages] = host_obfuscation_params
56
- render_setting(:excludePackages, :exclude_installed_packages)
57
- end
58
-
59
- def installed_packages_inclusion_params
60
- ActiveModel::Type::Boolean.new.cast(params.require(:value))
61
- end
62
-
63
- def ips_obfuscation
64
- Setting[:obfuscate_inventory_ips] = ips_obfuscation_params
65
- render_setting(:ipsObfuscationEnabled, :obfuscate_inventory_ips)
66
- end
67
-
68
- def ips_obfuscation_params
69
- ActiveModel::Type::Boolean.new.cast(params.require(:value))
70
- end
71
-
72
- private
73
-
74
- def render_setting(node_name, setting)
75
- render json: {
76
- node_name => Setting[setting],
77
- }
78
- end
79
24
  end
80
25
  end
@@ -0,0 +1,34 @@
1
+ module ForemanInventoryUpload
2
+ class UploadsSettingsController < ::ApplicationController
3
+ def index
4
+ render json: {
5
+ autoUploadEnabled: Setting[:allow_auto_inventory_upload],
6
+ hostObfuscationEnabled: Setting[:obfuscate_inventory_hostnames],
7
+ ipsObfuscationEnabled: Setting[:obfuscate_inventory_ips],
8
+ excludePackagesEnabled: Setting[:exclude_installed_packages],
9
+ CloudConnectorStatus: ForemanInventoryUpload::UploadsSettingsController.cloud_connector_status,
10
+ cloudToken: !Setting[:rh_cloud_token].empty?,
11
+ lastSyncTask: last_successful_inventory_sync_task,
12
+ }, status: :ok
13
+ end
14
+
15
+ def set_advanced_setting
16
+ Setting[params.require(:setting)] = ActiveModel::Type::Boolean.new.cast(params.require(:value))
17
+ index
18
+ end
19
+
20
+ def self.cloud_connector_status
21
+ cloud_connector = ForemanRhCloud::CloudConnector.new
22
+ job = cloud_connector&.latest_job
23
+ return nil unless job
24
+ { id: job.id, task: ForemanTasks::Task.where(:id => job.task_id).first }
25
+ end
26
+
27
+ def last_successful_inventory_sync_task
28
+ task = ForemanTasks::Task.where(label: 'InventorySync::Async::InventoryFullSync', result: 'success')
29
+ .reorder('ended_at desc').first
30
+ return nil unless task
31
+ { output: task.output, endedAt: task.ended_at }
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,73 @@
1
+ module InsightsCloud::Api
2
+ class MachineTelemetriesController < ::Api::V2::BaseController
3
+ layout false
4
+
5
+ include ::InsightsCloud::ClientAuthentication
6
+ include ::InsightsCloud::CandlepinCache
7
+
8
+ before_action :cert_uuid, :ensure_org, :ensure_branch_id, :only => [:forward_request, :branch_info]
9
+ before_action :ensure_telemetry_enabled_for_consumer, :only => [:forward_request]
10
+
11
+ skip_after_action :log_response_body, :only => [:forward_request]
12
+ skip_before_action :check_media_type, :only => [:forward_request]
13
+
14
+ # The method that "proxies" requests over to Cloud
15
+ def forward_request
16
+ certs = candlepin_id_cert @organization
17
+ cloud_response = ::ForemanRhCloud::CloudRequestForwarder.new.forward_request(request, controller_name, @branch_id, certs)
18
+
19
+ if cloud_response.code == 401
20
+ return render json: {
21
+ :message => 'Authentication to the Insights Service failed.',
22
+ :headers => {},
23
+ }, status: :bad_gateway
24
+ end
25
+
26
+ if cloud_response.headers[:content_disposition]
27
+ return send_data cloud_response, disposition: cloud_response.headers[:content_disposition], type: cloud_response.headers[:content_type]
28
+ end
29
+
30
+ assign_header(response, cloud_response, :x_resource_count, true)
31
+ assign_header(response, cloud_response, :x_rh_insights_request_id, false)
32
+
33
+ render json: cloud_response, status: cloud_response.code
34
+ end
35
+
36
+ def branch_info
37
+ render :json => ForemanRhCloud::BranchInfo.new.generate(@uuid, @host, @branch_id, request.host).to_json
38
+ end
39
+
40
+ def assign_header(res, cloud_res, header, transform)
41
+ header_content = cloud_res.headers[header]
42
+ return unless header_content
43
+ new_header = transform ? header.to_s.tr('_', '-') : header.to_s
44
+ res.headers[new_header] = header_content
45
+ end
46
+
47
+ private
48
+
49
+ def ensure_telemetry_enabled_for_consumer
50
+ render_message 'Telemetry is not enabled for your organization', :status => 403 unless telemetry_config
51
+ end
52
+
53
+ def telemetry_config
54
+ ::RedhatAccess::TelemetryConfiguration.find_or_create_by(:organization_id => @organization.id) do |conf|
55
+ conf.enable_telemetry = true
56
+ end
57
+ end
58
+
59
+ def cert_uuid
60
+ @uuid ||= User.current.login
61
+ end
62
+
63
+ def ensure_org
64
+ @organization = @host.organization
65
+ return render_message 'Organization not found or invalid', :status => 400 unless @organization
66
+ end
67
+
68
+ def ensure_branch_id
69
+ @branch_id = cp_owner_id(@organization)
70
+ return render_message "Branch ID not found for organization #{@organization.title}", :status => 400 unless @branch_id
71
+ end
72
+ end
73
+ end
@@ -3,12 +3,13 @@ module InsightsCloud
3
3
  include Foreman::Controller::AutoCompleteSearch
4
4
 
5
5
  def index
6
- hits = resource_base_search_and_page.preload(:host)
6
+ hits = resource_base_search_and_page.where(host: Host.authorized).preload(:host, :rule)
7
7
 
8
8
  render json: {
9
- hasToken: Setting[:rh_cloud_token].length > 1,
10
- hits: hits.map { |hit| hit.attributes.merge(hostname: hit.host&.name) },
9
+ hasToken: !Setting[:rh_cloud_token].empty?,
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],
12
13
  }, status: :ok
13
14
  end
14
15
 
@@ -20,6 +21,21 @@ module InsightsCloud
20
21
  }, status: :ok
21
22
  end
22
23
 
24
+ def resolutions
25
+ if remediation_all_selected_param
26
+ hits = InsightsHit.with_playbook.search_for(params[:query])
27
+ else
28
+ hits = resource_base_search_and_page.where(id: remediation_ids_param)
29
+ end
30
+
31
+ hits.preload(:host, rule: :resolutions)
32
+
33
+ render json: {
34
+ hits: hits.map { |hit| hit.attributes.merge(hostname: hit.host&.name, resolutions: hit.rule.resolutions.map(&:attributes), reboot: hit.rule.reboot_required) },
35
+ itemCount: hits.count,
36
+ }, status: :ok
37
+ end
38
+
23
39
  def model_of_controller
24
40
  ::InsightsHit
25
41
  end
@@ -32,10 +48,31 @@ module InsightsCloud
32
48
  :insights_hits
33
49
  end
34
50
 
51
+ def action_permission
52
+ case params[:action]
53
+ when 'resolutions'
54
+ 'view'
55
+ else
56
+ super
57
+ end
58
+ end
59
+
35
60
  private
36
61
 
37
62
  def host_id_param
38
63
  params.require(:host_id)
39
64
  end
65
+
66
+ def remediation_request_params
67
+ params.permit(remediations: [:hit_id, :remediation_id]).require(:remediations)
68
+ end
69
+
70
+ def remediation_ids_param
71
+ params.require(:ids).map(&:to_i)
72
+ end
73
+
74
+ def remediation_all_selected_param
75
+ ActiveModel::Type::Boolean.new.cast(params[:isAllSelected])
76
+ end
40
77
  end
41
78
  end
@@ -13,7 +13,7 @@ module InsightsCloud
13
13
  token = Setting::RhCloud.find_by_name("rh_cloud_token")
14
14
  token.value = params.require(:value)
15
15
  token.save!
16
- InsightsCloud::Async::InsightsFullSync.perform_now
16
+ ForemanTasks.sync_task(InsightsCloud::Async::InsightsFullSync)
17
17
  redirect_to(:controller => "hits", :action => 'index')
18
18
  end
19
19
 
@@ -1,7 +1,11 @@
1
1
  module InsightsCloud
2
2
  class TasksController < ::ApplicationController
3
3
  def create
4
- InsightsCloud::Async::InsightsFullSync.perform_now
4
+ task = ForemanTasks.async_task(InsightsCloud::Async::InsightsFullSync)
5
+
6
+ render json: {
7
+ task: task,
8
+ }, status: :ok
5
9
  end
6
10
  end
7
11
  end