katello 4.1.4 → 4.2.0.rc1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of katello might be problematic. Click here for more details.

Files changed (240) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/katello/api/rhsm/candlepin_proxies_controller.rb +2 -2
  3. data/app/controllers/katello/api/v2/content_credentials_controller.rb +3 -3
  4. data/app/controllers/katello/api/v2/content_uploads_controller.rb +3 -1
  5. data/app/controllers/katello/api/v2/content_view_components_controller.rb +33 -1
  6. data/app/controllers/katello/api/v2/content_views_controller.rb +12 -0
  7. data/app/controllers/katello/api/v2/host_errata_controller.rb +1 -1
  8. data/app/controllers/katello/api/v2/products_bulk_actions_controller.rb +1 -2
  9. data/app/controllers/katello/api/v2/products_controller.rb +4 -4
  10. data/app/controllers/katello/api/v2/repositories_bulk_actions_controller.rb +3 -11
  11. data/app/controllers/katello/api/v2/repositories_controller.rb +68 -47
  12. data/app/controllers/katello/api/v2/upstream_subscriptions_controller.rb +0 -28
  13. data/app/controllers/katello/concerns/api/v2/registration_commands_controller_extensions.rb +26 -5
  14. data/app/controllers/katello/concerns/api/v2/registration_controller_extensions.rb +26 -1
  15. data/app/lib/actions/candlepin/environment/destroy.rb +2 -0
  16. data/app/lib/actions/katello/agent_action.rb +2 -2
  17. data/app/lib/actions/katello/capsule_content/sync_capsule.rb +3 -2
  18. data/app/lib/actions/katello/{gpg_key → content_credential}/update.rb +1 -1
  19. data/app/lib/actions/katello/content_view/publish.rb +6 -1
  20. data/app/lib/actions/katello/content_view_version/create_repos.rb +1 -1
  21. data/app/lib/actions/katello/content_view_version/incremental_update.rb +0 -47
  22. data/app/lib/actions/katello/orphan_cleanup/remove_orphans.rb +1 -1
  23. data/app/lib/actions/katello/repository/clone_contents.rb +1 -7
  24. data/app/lib/actions/katello/repository/clone_to_environment.rb +1 -7
  25. data/app/lib/actions/katello/repository/create.rb +4 -8
  26. data/app/lib/actions/katello/repository/create_root.rb +1 -1
  27. data/app/lib/actions/katello/repository/destroy.rb +1 -3
  28. data/app/lib/actions/katello/repository/import_upload.rb +3 -2
  29. data/app/lib/actions/katello/repository/instance_update.rb +1 -1
  30. data/app/lib/actions/katello/repository/metadata_generate.rb +2 -8
  31. data/app/lib/actions/katello/repository/multi_clone_contents.rb +0 -1
  32. data/app/lib/actions/katello/repository/refresh_repository.rb +1 -4
  33. data/app/lib/actions/katello/repository/remove_content.rb +6 -4
  34. data/app/lib/actions/katello/repository/sync.rb +5 -25
  35. data/app/lib/actions/katello/repository/update.rb +1 -2
  36. data/app/lib/actions/katello/repository/update_http_proxy_details.rb +2 -5
  37. data/app/lib/actions/katello/repository/update_redhat_repository.rb +1 -1
  38. data/app/lib/actions/katello/repository/upload_files.rb +8 -3
  39. data/app/lib/actions/katello/repository/upload_package_group.rb +2 -11
  40. data/app/lib/actions/katello/repository/verify_checksum.rb +0 -1
  41. data/app/lib/actions/katello/repository_set/enable_repository.rb +1 -1
  42. data/app/lib/actions/pulp3/orchestration/repository/create.rb +2 -2
  43. data/app/lib/actions/pulp3/repository/create.rb +3 -4
  44. data/app/lib/actions/pulp3/repository/create_remote.rb +1 -6
  45. data/app/lib/actions/pulp3/repository/repair.rb +4 -0
  46. data/app/lib/katello/errors.rb +1 -0
  47. data/app/lib/katello/http_resource.rb +26 -73
  48. data/app/lib/katello/qpid/connection.rb +1 -3
  49. data/app/lib/katello/resources/candlepin/consumer.rb +1 -1
  50. data/app/lib/katello/resources/candlepin/environment.rb +2 -0
  51. data/app/lib/katello/resources/registry.rb +7 -20
  52. data/app/lib/katello/util/http_proxy.rb +0 -3
  53. data/app/lib/katello/validators/gpg_key_content_validator.rb +1 -1
  54. data/app/models/katello/authorization/{gpg_key.rb → content_credential.rb} +1 -1
  55. data/app/models/katello/authorization/product.rb +0 -4
  56. data/app/models/katello/concerns/host_managed_extensions.rb +2 -16
  57. data/app/models/katello/concerns/organization_extensions.rb +1 -1
  58. data/app/models/katello/concerns/pulp_database_unit.rb +13 -5
  59. data/app/models/katello/concerns/smart_proxy_extensions.rb +45 -41
  60. data/app/models/katello/{gpg_key.rb → content_credential.rb} +4 -4
  61. data/app/models/katello/content_view.rb +6 -1
  62. data/app/models/katello/generic_content_unit.rb +16 -0
  63. data/app/models/katello/glue/pulp/repos.rb +9 -25
  64. data/app/models/katello/kt_environment.rb +1 -1
  65. data/app/models/katello/product.rb +4 -4
  66. data/app/models/katello/repository.rb +13 -7
  67. data/app/models/katello/repository_generic_content_unit.rb +7 -0
  68. data/app/models/katello/root_repository.rb +38 -7
  69. data/app/models/setting/content.rb +5 -0
  70. data/app/services/cert/certs.rb +16 -8
  71. data/app/services/katello/applicability/applicable_content_helper.rb +1 -2
  72. data/app/services/katello/candlepin/consumer.rb +6 -0
  73. data/app/services/katello/component_view_presenter.rb +27 -0
  74. data/app/services/katello/pulp/repository.rb +1 -1
  75. data/app/services/katello/pulp/server.rb +2 -2
  76. data/app/services/katello/pulp3/api/core.rb +4 -0
  77. data/app/services/katello/pulp3/api/generic.rb +68 -0
  78. data/app/services/katello/pulp3/generic_content_unit.rb +29 -0
  79. data/app/services/katello/pulp3/pulp_content_unit.rb +5 -1
  80. data/app/services/katello/pulp3/repository/generic.rb +94 -0
  81. data/app/services/katello/pulp3/repository/yum.rb +4 -5
  82. data/app/services/katello/pulp3/repository.rb +27 -12
  83. data/app/services/katello/pulp3/repository_mirror.rb +2 -2
  84. data/app/services/katello/pulp3/smart_proxy_repository.rb +4 -4
  85. data/app/services/katello/registration_manager.rb +18 -7
  86. data/app/services/katello/repository_type.rb +59 -1
  87. data/app/services/katello/repository_type_manager.rb +116 -24
  88. data/app/views/katello/api/v2/content_views/base.json.rabl +4 -4
  89. data/app/views/katello/api/v2/repositories/show.json.rabl +1 -0
  90. data/app/views/smart_proxies/plugins/_pulpcore.html.erb +2 -5
  91. data/app/views/smart_proxies/pulp_status.html.erb +0 -7
  92. data/config/katello.yaml.example +0 -21
  93. data/config/routes/api/v2.rb +2 -1
  94. data/db/functions/deb_version_cmp_v01.sql +200 -0
  95. data/db/migrate/20171110082124_add_ssl_certs_to_products_and_repos.rb +5 -1
  96. data/db/migrate/20200402130013_add_repsoitory_docker_meta_tag_f_key.rb +3 -1
  97. data/db/migrate/20210624221630_katello_generic_content.rb +22 -0
  98. data/db/migrate/20210625095042_add_retain_package_versions_count.rb +9 -0
  99. data/db/migrate/20210628182553_add_generic_remote_options_to_root_repository.rb +5 -0
  100. data/db/migrate/20210714140440_remove_repo_export_permission.rb +5 -0
  101. data/db/migrate/20210721163730_change_gpg_keys_to_content_credentials.rb +8 -0
  102. data/db/migrate/20210728130748_create_function_deb_version_cmp.rb +12 -0
  103. data/db/seeds.d/111-upgrade_tasks.rb +1 -2
  104. data/engines/bastion/app/views/bastion/layouts/assets.html.erb +1 -1
  105. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/capsule-content/capsule-content.controller.js +7 -5
  106. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-errata-modal.html +4 -1
  107. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-details.html +1 -1
  108. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/apply-errata.controller.js +1 -1
  109. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/views/apply-errata-confirm.html +2 -1
  110. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +25 -33
  111. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/bulk/views/products-bulk-advanced-sync-modal.html +1 -1
  112. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/product-repositories.controller.js +1 -6
  113. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-info.controller.js +10 -2
  114. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-info.filter.js +9 -0
  115. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details.controller.js +0 -2
  116. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-advanced-sync-options.html +1 -25
  117. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-details.html +1 -1
  118. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +31 -13
  119. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/views/new-repository.html +11 -3
  120. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/views/product-repositories.html +0 -6
  121. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/tasks/aggregate-task.factory.js +3 -3
  122. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/tasks/task.factory.js +1 -1
  123. data/lib/katello/engine.rb +2 -4
  124. data/lib/katello/permission_creator.rb +6 -12
  125. data/lib/katello/plugin.rb +76 -80
  126. data/lib/katello/repository_types/python.rb +37 -0
  127. data/lib/katello/tasks/reimport.rake +0 -9
  128. data/lib/katello/tasks/repository.rake +3 -4
  129. data/lib/katello/version.rb +1 -1
  130. data/locale/action_names.rb +28 -29
  131. data/locale/bn/katello.po +699 -221
  132. data/locale/cs/katello.po +167 -59
  133. data/locale/de/katello.po +585 -352
  134. data/locale/en/katello.po +167 -59
  135. data/locale/es/katello.po +1388 -1189
  136. data/locale/fr/katello.po +1740 -1494
  137. data/locale/gu/katello.po +896 -416
  138. data/locale/hi/katello.po +892 -415
  139. data/locale/it/katello.po +371 -170
  140. data/locale/ja/katello.po +1657 -1439
  141. data/locale/katello.pot +933 -736
  142. data/locale/kn/katello.po +894 -416
  143. data/locale/ko/katello.po +515 -317
  144. data/locale/mr/katello.po +857 -415
  145. data/locale/or/katello.po +894 -416
  146. data/locale/pa/katello.po +874 -411
  147. data/locale/pt/katello.po +347 -154
  148. data/locale/pt_BR/katello.po +1398 -1215
  149. data/locale/ru/katello.po +671 -463
  150. data/locale/ta/katello.po +697 -221
  151. data/locale/te/katello.po +891 -415
  152. data/locale/zh_CN/katello.po +2029 -1845
  153. data/locale/zh_TW/katello.po +735 -407
  154. data/package.json +3 -1
  155. data/webpack/components/EditableTextInput/EditableTextInput.js +3 -3
  156. data/webpack/components/RoutedTabs/RoutedTabs.js +7 -8
  157. data/webpack/components/Table/TableWrapper.js +19 -11
  158. data/webpack/components/Table/helpers.js +1 -1
  159. data/webpack/components/extensions/HostDetails/Tabs/ContentTab.js +42 -0
  160. data/webpack/components/extensions/HostDetails/Tabs/SubscriptionTab.js +12 -0
  161. data/webpack/components/extensions/RegistrationCommands/__tests__/__snapshots__/ActivationKeys.test.js.snap +4 -0
  162. data/webpack/components/extensions/RegistrationCommands/fields/ActivationKeys.js +1 -1
  163. data/webpack/components/extensions/RegistrationCommands/index.js +1 -2
  164. data/webpack/components/pf3Table/formatters/selectionHeaderCellFormatter.js +2 -1
  165. data/webpack/fills_index.js +4 -1
  166. data/webpack/redux/actions/RedHatRepositories/helpers.js +2 -4
  167. data/webpack/redux/reducers/RedHatRepositories/enabled.js +4 -1
  168. data/webpack/scenes/ContentViews/ContentViewsActions.js +16 -1
  169. data/webpack/scenes/ContentViews/ContentViewsConstants.js +15 -0
  170. data/webpack/scenes/ContentViews/ContentViewsPage.js +12 -22
  171. data/webpack/scenes/ContentViews/Copy/CopyContentViewForm.js +4 -3
  172. data/webpack/scenes/ContentViews/Create/CreateContentViewForm.js +25 -14
  173. data/webpack/scenes/ContentViews/Create/CreateContentViewModal.js +4 -2
  174. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewAddModal.js +153 -0
  175. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentVersion.js +21 -10
  176. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ContentViewComponents.js +157 -19
  177. data/webpack/scenes/ContentViews/Details/ComponentContentViews/__tests__/contentViewComponents.fixtures.json +100 -108
  178. data/webpack/scenes/ContentViews/Details/ComponentContentViews/__tests__/contentViewComponents.test.js +140 -16
  179. data/webpack/scenes/ContentViews/Details/ComponentContentViews/__tests__/publishedContentViewDetails.fixtures.json +367 -0
  180. data/webpack/scenes/ContentViews/Details/ContentViewDetailActions.js +59 -6
  181. data/webpack/scenes/ContentViews/Details/ContentViewDetailSelectors.js +43 -0
  182. data/webpack/scenes/ContentViews/Details/ContentViewDetails.js +44 -13
  183. data/webpack/scenes/ContentViews/Details/Filters/Add/CVFilterAddModal.js +161 -0
  184. data/webpack/scenes/ContentViews/Details/Filters/Add/__tests__/cvFilterAdd.test.js +54 -0
  185. data/webpack/scenes/ContentViews/Details/Filters/Add/__tests__/cvFilterCreateResult.fixtures.json +124 -0
  186. data/webpack/scenes/ContentViews/Details/Filters/CVPackageGroupFilterContent.js +8 -6
  187. data/webpack/scenes/ContentViews/Details/Filters/CVRpmFilterContent.js +7 -6
  188. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilterDetails.js +4 -3
  189. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilters.js +71 -12
  190. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.test.js +77 -0
  191. data/webpack/scenes/ContentViews/Details/Histories/ContentViewHistories.js +13 -12
  192. data/webpack/scenes/ContentViews/Details/Histories/__tests__/contentViewHistory.test.js +2 -2
  193. data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +17 -14
  194. data/webpack/scenes/ContentViews/Details/Repositories/LastSync.js +3 -3
  195. data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewAddRemove.test.js +2 -2
  196. data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewDetailRepos.test.js +6 -2
  197. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersions.js +61 -20
  198. data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewTaskInProgressResponse.fixtures.json +71 -0
  199. data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewTaskResponse.fixtures.json +75 -0
  200. data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewVersions.test.js +86 -1
  201. data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewVersionsWithTask.fixtures.json +713 -0
  202. data/webpack/scenes/ContentViews/Details/__tests__/contentViewDetail.test.js +3 -0
  203. data/webpack/scenes/ContentViews/Publish/CVPublishFinish.js +184 -0
  204. data/webpack/scenes/ContentViews/Publish/CVPublishForm.js +104 -0
  205. data/webpack/scenes/ContentViews/Publish/CVPublishReview.js +71 -0
  206. data/webpack/scenes/ContentViews/Publish/ContentViewPublishSelectors.js +17 -0
  207. data/webpack/scenes/ContentViews/Publish/PublishContentViewWizard.js +145 -0
  208. data/webpack/scenes/ContentViews/Publish/__tests__/environmentPaths.fixtures.json +352 -0
  209. data/webpack/scenes/ContentViews/Publish/__tests__/publishContentView.test.js +184 -0
  210. data/webpack/scenes/ContentViews/Publish/__tests__/publishResponse.fixture.json +69 -0
  211. data/webpack/scenes/ContentViews/Publish/cvPublishForm.scss +3 -0
  212. data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +75 -48
  213. data/webpack/scenes/ContentViews/Table/tableDataGenerator.js +15 -2
  214. data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +6 -10
  215. data/webpack/scenes/ContentViews/components/EnvironmentLabels.js +22 -10
  216. data/webpack/scenes/ContentViews/components/EnvironmentPaths/EnvironmentPathActions.js +12 -0
  217. data/webpack/scenes/ContentViews/components/EnvironmentPaths/EnvironmentPathConstants.js +2 -0
  218. data/webpack/scenes/ContentViews/components/EnvironmentPaths/EnvironmentPathSelectors.js +16 -0
  219. data/webpack/scenes/ContentViews/components/EnvironmentPaths/EnvironmentPaths.js +72 -0
  220. data/webpack/scenes/ContentViews/components/EnvironmentPaths/EnvironmentPaths.scss +8 -0
  221. data/webpack/scenes/ContentViews/components/TaskPresenter/TaskPresenter.js +85 -0
  222. data/webpack/scenes/SmartProxy/SmartProxyContentTable.js +9 -8
  223. data/webpack/scenes/Subscriptions/SubscriptionsPage.js +4 -25
  224. data/webpack/scenes/Subscriptions/__tests__/SubscriptionsPage.test.js +0 -3
  225. data/webpack/scenes/Subscriptions/__tests__/__snapshots__/SubscriptionsPage.test.js.snap +3 -3
  226. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/SubscriptionsTableSchema.js +4 -2
  227. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/__tests__/__snapshots__/SubscriptionsTable.test.js.snap +24 -0
  228. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/components/Table.js +4 -1
  229. data/webpack/scenes/Subscriptions/index.js +1 -4
  230. metadata +74 -39
  231. data/app/lib/actions/candlepin/environment/create.rb +0 -21
  232. data/app/lib/actions/foreman/environment/destroy.rb +0 -23
  233. data/app/lib/actions/katello/content_view/environment_create.rb +0 -21
  234. data/app/lib/actions/katello/repository/export.rb +0 -85
  235. data/app/lib/actions/katello/repository/purge_empty_content.rb +0 -16
  236. data/app/lib/actions/katello/repository/upload_errata.rb +0 -38
  237. data/app/lib/katello/util/proxy_uri.rb +0 -64
  238. data/app/models/katello/rhsm_fact_importer.rb +0 -20
  239. data/app/models/katello/rhsm_fact_name.rb +0 -17
  240. data/app/models/katello/rhsm_fact_parser.rb +0 -120
@@ -111,8 +111,6 @@
111
111
  if (repo.$resolved && product.$resolved) {
112
112
  if (repo.promoted) {
113
113
  readOnlyReason = 'published';
114
- } else if (repo['product_type'] === "redhat") {
115
- readOnlyReason = 'redhat';
116
114
  } else if ($scope.denied('deletable', repo)) {
117
115
  readOnlyReason = 'permissions';
118
116
  }
@@ -27,28 +27,4 @@
27
27
  <li translate>One or more RPMs are not showing up in the local repository even though they exist in the upstream repository.</li>
28
28
  </ul>
29
29
  </div>
30
- </div>
31
-
32
- <div class="radio">
33
- <label>
34
- <input type="radio" ng-model="syncType" value="validateContents" />
35
- <span translate>
36
- Validate Content Sync
37
- </span>
38
- </label>
39
- <div class="help-block">
40
- <span translate>
41
- Performs a complete sync, verifying the checksum of all packages afterwards. Any missing or corrupt package will be re-downloaded. This option will take the longest amount of time. Choose this option if:
42
- </span>
43
- <ul class="list-aligned">
44
- <li translate>Specific packages are throwing a 404 from the package-manager.</li>
45
- <li translate>Packages are corrupt, often leading to an error "Package does not match intended download" or "Hash Sum mismatch".</li>
46
- </ul>
47
- <span ng-show="repository.download_policy === 'on_demand' && repository.content_type === 'yum'">
48
- <i class="fa fa-warning"></i>
49
- <span translate>
50
- When validating content, repositories using the "On Demand" download policy will download all packages within the repository.
51
- </span>
52
- </span>
53
- </div>
54
- </div>
30
+ </div>
@@ -32,7 +32,7 @@
32
32
  </a>
33
33
  </li>
34
34
 
35
- <li role="menuitem" ng-hide="hideSyncButton(repository, true)" ng-class="{disabled: disableSyncLink()}">
35
+ <li role="menuitem" ng-hide="hideSyncButton(repository, false)" ng-class="{disabled: disableSyncLink()}">
36
36
  <a ng-click="verifyChecksum(repository)" disable-link="disableSyncLink()" translate>
37
37
  Verify Content Checksum
38
38
  </a>
@@ -109,19 +109,29 @@
109
109
  readonly="denied('edit_products', product)"
110
110
  edit-trigger="uploadedFile">
111
111
  </dd>
112
- </span>
113
-
114
- <dt ng-show="repository.content_type == 'ansible_collection'" translate>Auth URL</dt>
115
- <dd bst-edit-text="repository.ansible_collection_auth_url"
116
- on-save="save(repository)"
117
- readonly="product.redhat || denied('edit_products', product)">
118
- </dd>
119
112
 
120
- <dt ng-show="repository.content_type == 'ansible_collection'" translate>Auth Token</dt>
121
- <dd bst-edit-text="repository.ansible_collection_auth_token"
122
- on-save="save(repository)"
123
- readonly="product.redhat || denied('edit_products', product)">
124
- </dd>
113
+ <dt translate>Ansible Collection Authorization</dt>
114
+ <dd bst-edit-custom="repository.ansible_collection_auth_exists"
115
+ readonly="denied('edit_products', product)"
116
+ on-save="save(repository, true)"
117
+ formatter="ansibleAuthFilter"
118
+ formatter-options="repository"
119
+ deletable="repository.ansible_collection_auth_exists"
120
+ on-delete="clearAnsibleCollectionAuth()">
121
+ <div translate>Auth URL</div>
122
+ <input id="ansible_collection_auth_url"
123
+ name="ansible_collection_auth_url"
124
+ type="url"
125
+ autocomplete="off"
126
+ ng-model="repository.ansible_collection_auth_url"/>
127
+ <div translate>Auth Token</div>
128
+ <input id="ansible_collection_auth_token"
129
+ name="ansible_collection_auth_token"
130
+ type="password"
131
+ autocomplete="off"
132
+ ng-model="repository.ansible_collection_auth_token"/>
133
+ </dd>
134
+ </span>
125
135
 
126
136
  <dt translate>Verify SSL</dt>
127
137
  <dd bst-edit-checkbox="repository.verify_ssl_on_sync"
@@ -172,6 +182,14 @@
172
182
  </dd>
173
183
  </span>
174
184
 
185
+ <span ng-show="repository.content_type === 'yum' && repository.mirror_on_sync === false">
186
+ <dt translate>Retain package versions</dt>
187
+ <dd bst-edit-number="repository.retain_package_versions_count"
188
+ on-save="save(repository)"
189
+ readonly="denied('edit_products', product)">
190
+ </dd>
191
+ </span>
192
+
175
193
  <span>
176
194
  <dt translate>HTTP Proxy</dt>
177
195
  <dd bst-edit-custom="repository.http_proxy_policy"
@@ -222,7 +240,7 @@
222
240
  <dt translate>Publish via HTTPS</dt>
223
241
  <dd translate>Yes</dd>
224
242
 
225
- <span ng-hide="repository.content_type === 'ostree' || repository.content_type === 'docker'">
243
+ <span ng-hide="repository.content_type === 'ostree' || repository.content_type === 'docker' || repository.content_type === 'ansible_collection'">
226
244
  <dt translate>Publish via HTTP</dt>
227
245
  <dd bst-edit-checkbox="repository.unprotected"
228
246
  formatter="booleanToYesNo"
@@ -242,6 +242,14 @@
242
242
  </p>
243
243
  </div>
244
244
 
245
+ <div bst-form-group label="{{ 'Retain package versions' | translate }}" ng-if="(repository.content_type === 'yum' && repository.mirror_on_sync === false)">
246
+ <input id="retain_package_versions_count" name="retain_package_versions_count" ng-model="repository.retain_package_versions_count" type="number"/>
247
+
248
+ <p class="help-block">
249
+ <span translate>The maximum number of versions of each package to keep.</span><br />
250
+ </p>
251
+ </div>
252
+
245
253
  <div bst-form-group label="{{ 'HTTP Proxy Policy' | translate }}">
246
254
  <select required
247
255
  id="http_proxy_policy"
@@ -266,8 +274,8 @@
266
274
  </span>
267
275
  </div>
268
276
 
269
- <div ng-show="repository.content_type === 'yum' || repository.content_type === 'deb' || repository.content_type === 'file'">
270
- <h4 ng-show="repository.content_type !== undefined" translate> Published Repository Information </h4>
277
+ <div ng-show="repository.content_type !== undefined">
278
+ <h4 translate> Published Repository Information </h4>
271
279
 
272
280
  <div bst-form-group label="{{ 'Checksum' | translate }}" ng-show="repository.content_type === 'yum'">
273
281
  <select id="checksum_type"
@@ -280,7 +288,7 @@
280
288
  </p>
281
289
  </div>
282
290
 
283
- <div class="checkbox">
291
+ <div class="checkbox" ng-hide="repository.content_type === 'ostree' || repository.content_type === 'docker' || repository.content_type === 'ansible_collection'">
284
292
  <label>
285
293
  <input id="unprotected" name="unprotected" ng-model="repository.unprotected" type="checkbox"/>
286
294
  <span translate>Publish via HTTP</span>
@@ -50,12 +50,6 @@
50
50
  tooltip-placement="left"
51
51
  tooltip-append-to-body="true">
52
52
  </i>
53
- <i class="fa fa-question-sign" ng-switch-when="redhat"
54
- uib-tooltip="{{ 'You cannot remove these repositories because they belong to a Red Hat product.' | translate }}"
55
- tooltip-animation="false"
56
- tooltip-placement="left"
57
- tooltip-append-to-body="true">
58
- </i>
59
53
  </span>
60
54
  </div>
61
55
 
@@ -23,9 +23,9 @@ angular.module('Bastion.tasks').factory('AggregateTask',
23
23
  var taskMap = {},
24
24
  taskSearches = {},
25
25
  taskRepresentation = {
26
- state: undefined,
27
- result: undefined,
28
- progressbar: {}
26
+ state: 'stopped',
27
+ result: 'success',
28
+ progressbar: {type: 'success', value: 0}
29
29
  };
30
30
 
31
31
  var unregisterSearch = function (taskId) {
@@ -161,7 +161,7 @@ angular.module('Bastion.tasks').factory('Task',
161
161
  * @param {Function} callback function to reflect the
162
162
  * results. If searchParams.type === 'task', the
163
163
  * function is called with a single task, otherwise
164
- * it's passed with array of tasks sattisfying the
164
+ * it's passed with array of tasks satisfying the
165
165
  * conditions.
166
166
  *
167
167
  * @return {Number} the autogenerated id of the condition
@@ -183,8 +183,6 @@ module Katello
183
183
  ::HostsController.include Katello::Concerns::HostsControllerExtensions
184
184
  ::SmartProxiesController.include Katello::Concerns::SmartProxiesControllerExtensions
185
185
  ::SmartProxiesController.include Katello::Concerns::SmartProxiesControllerExtensions
186
- ::Foreman::Plugin.fact_importer_registry.register(Katello::RhsmFactName::FACT_TYPE, Katello::RhsmFactImporter)
187
- ::FactParser.register_fact_parser(Katello::RhsmFactName::FACT_TYPE, Katello::RhsmFactParser)
188
186
  ::RegistrationCommandsController.prepend Katello::Concerns::RegistrationCommandsControllerExtensions
189
187
 
190
188
  #Helper Extensions
@@ -248,7 +246,7 @@ module Katello
248
246
 
249
247
  # check whether foreman_remote_execution to integrate is available in the system
250
248
  def self.with_remote_execution?
251
- (RemoteExecutionFeature rescue false) ? true : false
249
+ Foreman::Plugin.installed?("foreman_remote_execution")
252
250
  end
253
251
 
254
252
  def self.with_katello_agent?
@@ -260,6 +258,6 @@ module Katello
260
258
  end
261
259
 
262
260
  def self.with_ansible?
263
- (ForemanAnsible rescue false) ? true : false
261
+ Foreman::Plugin.installed?("foreman_ansible")
264
262
  end
265
263
  end
@@ -75,7 +75,7 @@ module Katello
75
75
  'katello/api/v2/content_view_histories' => [:index, :auto_complete_search],
76
76
  'katello/api/v2/content_view_repositories' => [:show_all],
77
77
  'katello/api/v2/content_view_versions' => [:index, :show, :auto_complete_search],
78
- 'katello/api/v2/content_view_components' => [:index, :show],
78
+ 'katello/api/v2/content_view_components' => [:index, :show, :show_all],
79
79
  'katello/api/v2/packages' => [:index],
80
80
  'katello/api/v2/package_groups' => [:index, :show, :auto_complete_search, :compare],
81
81
  'katello/api/v2/errata' => [:index, :show, :auto_complete_search, :compare],
@@ -113,7 +113,7 @@ module Katello
113
113
  :resource_type => 'Katello::ContentView'
114
114
  @plugin.permission :edit_content_views,
115
115
  {
116
- 'katello/api/v2/content_views' => [:update],
116
+ 'katello/api/v2/content_views' => [:update, :remove_filters],
117
117
  'katello/api/v2/content_view_versions' => [:update],
118
118
  'katello/api/v2/content_view_filters' => [:create, :update, :destroy],
119
119
  'katello/api/v2/content_view_filter_rules' => [:create, :update, :destroy],
@@ -151,27 +151,27 @@ module Katello
151
151
  'katello/api/v2/content_credentials' => [:index, :show, :content, :auto_complete_search],
152
152
  'katello/api/v2/gpg_keys' => [:index, :show, :content, :auto_complete_search]
153
153
  },
154
- :resource_type => 'Katello::GpgKey',
154
+ :resource_type => 'Katello::ContentCredential',
155
155
  :finder_scope => :readable
156
156
  @plugin.permission :create_content_credentials,
157
157
  {
158
158
  'katello/api/v2/content_credentials' => [:create],
159
159
  'katello/api/v2/gpg_keys' => [:create]
160
160
  },
161
- :resource_type => 'Katello::GpgKey'
161
+ :resource_type => 'Katello::ContentCredential'
162
162
  @plugin.permission :edit_content_credentials,
163
163
  {
164
164
  'katello/api/v2/content_credentials' => [:update, :set_content],
165
165
  'katello/api/v2/gpg_keys' => [:update, :set_content]
166
166
  },
167
- :resource_type => 'Katello::GpgKey',
167
+ :resource_type => 'Katello::ContentCredential',
168
168
  :finder_scope => :editable
169
169
  @plugin.permission :destroy_content_credentials,
170
170
  {
171
171
  'katello/api/v2/content_credentials' => [:destroy],
172
172
  'katello/api/v2/gpg_keys' => [:destroy]
173
173
  },
174
- :resource_type => 'Katello::GpgKey',
174
+ :resource_type => 'Katello::ContentCredential',
175
175
  :finder_scope => :deletable
176
176
  end
177
177
 
@@ -317,12 +317,6 @@ module Katello
317
317
  },
318
318
  :resource_type => 'Katello::Product',
319
319
  :finder_scope => :syncable
320
- @plugin.permission :export_products,
321
- {
322
- 'katello/api/v2/repositories' => [:export]
323
- },
324
- :resource_type => 'Katello::Product',
325
- :finder_scope => :exportable
326
320
  end
327
321
 
328
322
  def subscription_permissions
@@ -3,7 +3,7 @@ require 'katello/repository_types.rb'
3
3
  require 'katello/host_status_manager.rb'
4
4
  # rubocop:disable Metrics/BlockLength
5
5
  Foreman::Plugin.register :katello do
6
- requires_foreman '>= 2.4'
6
+ requires_foreman '>= 2.6'
7
7
 
8
8
  sub_menu :top_menu, :content_menu, :caption => N_('Content'),
9
9
  :icon => 'fa fa-book', :after => :monitor_menu do
@@ -91,89 +91,85 @@ Foreman::Plugin.register :katello do
91
91
 
92
92
  divider :top_menu, :caption => N_('Content Types'), :parent => :content_menu
93
93
 
94
- if ::Katello::RepositoryTypeManager.enabled?(::Katello::Repository::DEB_TYPE)
95
- menu :top_menu,
96
- :debs,
97
- :caption => N_('Deb Packages'),
98
- :url => '/debs',
99
- :url_hash => {:controller => 'katello/api/v2/debs',
100
- :action => 'index'},
101
- :engine => Katello::Engine,
102
- :turbolinks => false
103
- end
94
+ menu :top_menu,
95
+ :debs,
96
+ :caption => N_('Deb Packages'),
97
+ :url => '/debs',
98
+ :url_hash => {:controller => 'katello/api/v2/debs',
99
+ :action => 'index'},
100
+ :engine => Katello::Engine,
101
+ :turbolinks => false,
102
+ :if => lambda { ::Katello::RepositoryTypeManager.enabled?(::Katello::Repository::DEB_TYPE) }
104
103
 
105
- if ::Katello::RepositoryTypeManager.enabled?(::Katello::Repository::DOCKER_TYPE)
106
- menu :top_menu,
107
- :docker_tags,
108
- :caption => N_('Container Image Tags'),
109
- :url => '/docker_tags',
110
- :url_hash => {:controller => 'katello/api/v2/docker_tags',
111
- :action => 'index'},
112
- :engine => Katello::Engine,
113
- :turbolinks => false
114
- end
104
+ menu :top_menu,
105
+ :docker_tags,
106
+ :caption => N_('Container Image Tags'),
107
+ :url => '/docker_tags',
108
+ :url_hash => {:controller => 'katello/api/v2/docker_tags',
109
+ :action => 'index'},
110
+ :engine => Katello::Engine,
111
+ :turbolinks => false,
112
+ :if => lambda { ::Katello::RepositoryTypeManager.enabled?(::Katello::Repository::DOCKER_TYPE) }
115
113
 
116
- if ::Katello::RepositoryTypeManager.enabled?(::Katello::Repository::FILE_TYPE)
117
- menu :top_menu,
118
- :files,
119
- :caption => N_('Files'),
120
- :url => '/files',
121
- :url_hash => {:controller => 'katello/api/v2/file_units',
122
- :action => 'index'},
123
- :engine => Katello::Engine,
124
- :turbolinks => false
125
- end
114
+ menu :top_menu,
115
+ :files,
116
+ :caption => N_('Files'),
117
+ :url => '/files',
118
+ :url_hash => {:controller => 'katello/api/v2/file_units',
119
+ :action => 'index'},
120
+ :engine => Katello::Engine,
121
+ :turbolinks => false,
122
+ :if => lambda { ::Katello::RepositoryTypeManager.enabled?(::Katello::Repository::FILE_TYPE) }
126
123
 
127
- if ::Katello::RepositoryTypeManager.enabled?(::Katello::Repository::OSTREE_TYPE)
128
- menu :top_menu,
129
- :ostree_branches,
130
- :caption => N_('OSTree Branches'),
131
- :url => '/ostree_branches',
132
- :url_hash => {:controller => 'katello/api/v2/ostree_branches',
133
- :action => 'index'},
134
- :engine => Katello::Engine,
135
- :turbolinks => false
136
- end
124
+ menu :top_menu,
125
+ :ostree_branches,
126
+ :caption => N_('OSTree Branches'),
127
+ :url => '/ostree_branches',
128
+ :url_hash => {:controller => 'katello/api/v2/ostree_branches',
129
+ :action => 'index'},
130
+ :engine => Katello::Engine,
131
+ :turbolinks => false,
132
+ :if => lambda { ::Katello::RepositoryTypeManager.enabled?(::Katello::Repository::OSTREE_TYPE) }
137
133
 
138
- if ::Katello::RepositoryTypeManager.enabled?(::Katello::Repository::YUM_TYPE)
139
- menu :top_menu,
140
- :packages,
141
- :caption => N_('Packages'),
142
- :url => '/packages',
143
- :url_hash => {:controller => 'katello/api/v2/packages',
144
- :action => 'index'},
145
- :engine => Katello::Engine,
146
- :turbolinks => false
147
-
148
- menu :top_menu,
149
- :errata,
150
- :caption => N_('Errata'),
151
- :url => '/errata',
152
- :url_hash => {:controller => 'katello/api/v2/errata',
153
- :action => 'index'},
154
- :engine => Katello::Engine,
155
- :turbolinks => false
156
-
157
- menu :top_menu,
158
- :module_streams,
159
- :caption => N_('Module Streams'),
160
- :url => '/module_streams',
161
- :url_hash => {:controller => 'katello/api/v2/module_streams',
162
- :action => 'index'},
163
- :engine => Katello::Engine,
164
- :turbolinks => false
165
- end
134
+ menu :top_menu,
135
+ :packages,
136
+ :caption => N_('Packages'),
137
+ :url => '/packages',
138
+ :url_hash => {:controller => 'katello/api/v2/packages',
139
+ :action => 'index'},
140
+ :engine => Katello::Engine,
141
+ :turbolinks => false,
142
+ :if => lambda { ::Katello::RepositoryTypeManager.enabled?(::Katello::Repository::YUM_TYPE) }
166
143
 
167
- if ::Katello::RepositoryTypeManager.enabled?(::Katello::Repository::ANSIBLE_COLLECTION_TYPE)
168
- menu :top_menu,
169
- :ansible_collections,
170
- :caption => N_('Ansible Collections'),
171
- :url => '/ansible_collections',
172
- :url_hash => {:controller => 'katello/api/v2/ansible_collections',
173
- :action => 'index'},
174
- :engine => Katello::Engine,
175
- :turbolinks => false
176
- end
144
+ menu :top_menu,
145
+ :errata,
146
+ :caption => N_('Errata'),
147
+ :url => '/errata',
148
+ :url_hash => {:controller => 'katello/api/v2/errata',
149
+ :action => 'index'},
150
+ :engine => Katello::Engine,
151
+ :turbolinks => false,
152
+ :if => lambda { ::Katello::RepositoryTypeManager.enabled?(::Katello::Repository::YUM_TYPE) }
153
+
154
+ menu :top_menu,
155
+ :module_streams,
156
+ :caption => N_('Module Streams'),
157
+ :url => '/module_streams',
158
+ :url_hash => {:controller => 'katello/api/v2/module_streams',
159
+ :action => 'index'},
160
+ :engine => Katello::Engine,
161
+ :turbolinks => false,
162
+ :if => lambda { ::Katello::RepositoryTypeManager.enabled?(::Katello::Repository::YUM_TYPE) }
163
+
164
+ menu :top_menu,
165
+ :ansible_collections,
166
+ :caption => N_('Ansible Collections'),
167
+ :url => '/ansible_collections',
168
+ :url_hash => {:controller => 'katello/api/v2/ansible_collections',
169
+ :action => 'index'},
170
+ :engine => Katello::Engine,
171
+ :turbolinks => false,
172
+ :if => lambda { ::Katello::RepositoryTypeManager.enabled?(::Katello::Repository::ANSIBLE_COLLECTION_TYPE) }
177
173
  end
178
174
 
179
175
  menu :top_menu,
@@ -201,7 +197,7 @@ Foreman::Plugin.register :katello do
201
197
  menu :labs_menu,
202
198
  :content_publication,
203
199
  :url => '/labs/content_views',
204
- :url_hash => {:controller => 'katello/react',
200
+ :url_hash => {:controller => 'katello/api/v2/content_views',
205
201
  :action => 'index'},
206
202
  :caption => N_('Content Views'),
207
203
  :parent => :lab_features_menu,
@@ -0,0 +1,37 @@
1
+ require 'pulp_python_client'
2
+
3
+ Katello::RepositoryTypeManager.register('python') do
4
+ allow_creation_by_user true
5
+ pulp3_service_class Katello::Pulp3::Repository::Generic
6
+ pulp3_api_class Katello::Pulp3::Api::Generic
7
+ pulp3_plugin 'python'
8
+ partial_repo_path '' #TODO: add partial repo path
9
+
10
+ repositories_api_class PulpPythonClient::RepositoriesPythonApi
11
+ api_class PulpPythonClient::ApiClient
12
+ configuration_class PulpPythonClient::Configuration
13
+ remotes_api_class PulpPythonClient::RemotesPythonApi
14
+ distributions_api_class PulpPythonClient::DistributionsPypiApi
15
+ repository_versions_api_class PulpPythonClient::RepositoriesPythonVersionsApi
16
+ remote_class PulpPythonClient::PythonPythonRemote
17
+ repo_sync_url_class PulpPythonClient::RepositorySyncURL
18
+ client_module_class PulpPythonClient
19
+ distribution_class PulpPythonClient::PythonPythonDistribution
20
+ publication_class PulpPythonClient::PythonPythonPublication
21
+ publications_api_class PulpPythonClient::PublicationsPypiApi
22
+
23
+ generic_remote_option :includes, type: Array, description: "A list containing project specifiers for Python packages to include."
24
+ generic_remote_option :excludes, type: Array, description: "A list containing project specifiers for Python packages to exclude."
25
+ generic_remote_option :package_types, type: Array, description: "A list of package types to sync for Python content. Leave blank to get every package type."
26
+
27
+ model_name lambda { |pulp_unit| pulp_unit["name"] }
28
+ model_version lambda { |pulp_unit| pulp_unit["version"] }
29
+
30
+ generic_content_type 'python_package',
31
+ model_class: Katello::GenericContentUnit,
32
+ pulp3_api: PulpPythonClient::ContentPackagesApi,
33
+ pulp3_model: PulpPythonClient::PythonPythonPackageContent,
34
+ pulp3_service_class: Katello::Pulp3::GenericContentUnit,
35
+ removable: true,
36
+ uploadable: true
37
+ end
@@ -22,15 +22,6 @@ namespace :katello do
22
22
  Katello::Content
23
23
  ]
24
24
 
25
- Katello::RepositoryTypeManager.repository_types.each_value do |repo_type|
26
- indexable_types = repo_type.content_types_to_index
27
- if SmartProxy.pulp_primary.pulp3_repository_type_support?(repo_type)
28
- puts "\e[33mIgnoring types: #{indexable_types&.map { |type| type.model_class.name }}\e[0m\n"
29
- else
30
- models += indexable_types&.map(&:model_class)
31
- end
32
- end
33
-
34
25
  models.each do |model|
35
26
  print "Importing #{model.name}\n"
36
27
  model.import_all
@@ -114,21 +114,20 @@ namespace :katello do
114
114
  def repo_exists?(repo)
115
115
  if SmartProxy.pulp_primary!.pulp3_support?(repo)
116
116
  backend_service = repo.backend_service(SmartProxy.pulp_primary!)
117
- return false unless backend_service&.repository_reference&.repository_href
118
117
  backend_service.api.repositories_api.read(backend_service.repository_reference.repository_href)
119
118
  else
120
119
  Katello.pulp_server.extensions.repository.retrieve(repo.pulp_id)
121
120
  end
122
121
  true
123
- rescue StandardError => e
124
- return false if e.code == 404
122
+ rescue RestClient::ResourceNotFound, PulpRpmClient::ApiError
123
+ false
125
124
  end
126
125
 
127
126
  def handle_missing_repo(repo)
128
127
  puts "Repository #{repo.id} Missing"
129
128
  if repo.content_view.default?
130
129
  puts "Recreating #{repo.id}"
131
- ForemanTasks.sync_task(::Actions::Katello::Repository::Create, repo, force_repo_create: true) if commit?
130
+ ForemanTasks.sync_task(::Actions::Katello::Repository::Create, repo) if commit?
132
131
  else
133
132
  puts "Deleting #{repo.id}"
134
133
  ForemanTasks.sync_task(::Actions::Katello::Repository::Destroy, repo) if commit?
@@ -1,3 +1,3 @@
1
1
  module Katello
2
- VERSION = "4.1.4".freeze
2
+ VERSION = "4.2.0.rc1".freeze
3
3
  end