foreman_rh_cloud 3.0.16 → 3.0.20

Sign up to get free protection for your applications and to get access to all the features.
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