katello 3.9.1 → 3.10.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 (229) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/katello/hosts/host_and_hostgroup_edit.js +28 -12
  3. data/app/controllers/katello/api/rhsm/candlepin_dynflow_proxy_controller.rb +12 -3
  4. data/app/controllers/katello/api/rhsm/candlepin_proxies_controller.rb +4 -13
  5. data/app/controllers/katello/api/v2/content_credentials_controller.rb +1 -1
  6. data/app/controllers/katello/api/v2/content_view_filter_rules_controller.rb +1 -1
  7. data/app/controllers/katello/api/v2/content_view_versions_controller.rb +6 -4
  8. data/app/controllers/katello/api/v2/content_views_controller.rb +8 -3
  9. data/app/controllers/katello/api/v2/gpg_keys_controller.rb +2 -1
  10. data/app/controllers/katello/api/v2/host_module_streams_controller.rb +39 -0
  11. data/app/controllers/katello/api/v2/hosts_bulk_actions_controller.rb +20 -11
  12. data/app/controllers/katello/api/v2/module_streams_controller.rb +2 -1
  13. data/app/controllers/katello/api/v2/repository_sets_controller.rb +17 -8
  14. data/app/controllers/katello/application_controller.rb +0 -2
  15. data/app/controllers/katello/concerns/hosts_controller_extensions.rb +5 -2
  16. data/app/lib/actions/candlepin/consumer/attach_subscription.rb +0 -2
  17. data/app/lib/actions/candlepin/consumer/remove_subscription.rb +0 -2
  18. data/app/lib/actions/katello/capsule_content/create_repos.rb +1 -25
  19. data/app/lib/actions/katello/capsule_content/sync.rb +1 -1
  20. data/app/lib/actions/katello/content_view/promote.rb +2 -5
  21. data/app/lib/actions/katello/content_view/promote_to_environment.rb +2 -5
  22. data/app/lib/actions/katello/content_view/publish.rb +1 -4
  23. data/app/lib/actions/katello/content_view_puppet_environment/create.rb +6 -10
  24. data/app/lib/actions/katello/content_view_version/export.rb +0 -2
  25. data/app/lib/actions/katello/content_view_version/incremental_update.rb +19 -1
  26. data/app/lib/actions/katello/environment/publish_repositories.rb +2 -1
  27. data/app/lib/actions/katello/gpg_key/update.rb +17 -0
  28. data/app/lib/actions/katello/host/attach_subscriptions.rb +0 -2
  29. data/app/lib/actions/katello/host/erratum/install.rb +6 -0
  30. data/app/lib/actions/katello/host/generate_applicability.rb +0 -2
  31. data/app/lib/actions/katello/host/hypervisors_update.rb +11 -6
  32. data/app/lib/actions/katello/host/package/install.rb +6 -0
  33. data/app/lib/actions/katello/host/package/remove.rb +6 -0
  34. data/app/lib/actions/katello/host/package/update.rb +7 -1
  35. data/app/lib/actions/katello/host/package_group/install.rb +6 -0
  36. data/app/lib/actions/katello/host/package_group/remove.rb +6 -0
  37. data/app/lib/actions/katello/host/recalculate_errata_status.rb +0 -2
  38. data/app/lib/actions/katello/host/remove_subscriptions.rb +0 -2
  39. data/app/lib/actions/katello/host/update.rb +1 -0
  40. data/app/lib/actions/katello/host/update_content_overrides.rb +0 -2
  41. data/app/lib/actions/katello/host/upload_package_profile.rb +13 -12
  42. data/app/lib/actions/katello/host/upload_profiles.rb +70 -0
  43. data/app/lib/actions/katello/product/reindex_subscriptions.rb +0 -2
  44. data/app/lib/actions/katello/product/repositories_certs_reset.rb +4 -4
  45. data/app/lib/actions/katello/product/repositories_gpg_reset.rb +2 -2
  46. data/app/lib/actions/katello/repository/check_matching_content.rb +18 -6
  47. data/app/lib/actions/katello/repository/clone_deb_content.rb +1 -1
  48. data/app/lib/actions/katello/repository/clone_to_environment.rb +3 -5
  49. data/app/lib/actions/katello/repository/clone_to_version.rb +2 -3
  50. data/app/lib/actions/katello/repository/clone_yum_content.rb +1 -2
  51. data/app/lib/actions/katello/repository/clone_yum_metadata.rb +2 -2
  52. data/app/lib/actions/katello/repository/create.rb +1 -31
  53. data/app/lib/actions/katello/repository/destroy.rb +1 -2
  54. data/app/lib/actions/katello/repository/export.rb +0 -2
  55. data/app/lib/actions/katello/repository/fetch_pxe_files.rb +0 -2
  56. data/app/lib/actions/katello/repository/filtered_index_content.rb +0 -2
  57. data/app/lib/actions/katello/repository/finish_upload.rb +0 -2
  58. data/app/lib/actions/katello/repository/import_upload.rb +0 -2
  59. data/app/lib/actions/katello/repository/index_content.rb +0 -1
  60. data/app/lib/actions/katello/repository/index_package_groups.rb +0 -2
  61. data/app/lib/actions/katello/repository/instance_update.rb +21 -0
  62. data/app/lib/actions/katello/repository/remove_content.rb +0 -2
  63. data/app/lib/actions/katello/repository/sync.rb +0 -1
  64. data/app/lib/actions/katello/repository/update.rb +0 -2
  65. data/app/lib/actions/katello/upstream_subscriptions/bind_entitlement.rb +0 -2
  66. data/app/lib/actions/katello/upstream_subscriptions/bind_entitlements.rb +0 -2
  67. data/app/lib/actions/katello/upstream_subscriptions/remove_entitlement.rb +0 -1
  68. data/app/lib/actions/katello/upstream_subscriptions/remove_entitlements.rb +0 -2
  69. data/app/lib/actions/katello/upstream_subscriptions/update_entitlement.rb +0 -1
  70. data/app/lib/actions/katello/upstream_subscriptions/update_entitlements.rb +0 -2
  71. data/app/lib/actions/pulp/abstract.rb +13 -14
  72. data/app/lib/actions/pulp/repository/create.rb +13 -211
  73. data/app/lib/actions/pulp/repository/create_in_plan.rb +4 -18
  74. data/app/lib/actions/pulp/repository/refresh.rb +7 -70
  75. data/app/lib/actions/pulp/repository/sync.rb +1 -2
  76. data/app/lib/katello/capsule_content.rb +3 -3
  77. data/app/lib/katello/resources/candlepin/consumer.rb +1 -1
  78. data/app/lib/katello/resources/candlepin/product.rb +1 -1
  79. data/app/lib/katello/validators/hostgroup_kickstart_repository_validator.rb +1 -1
  80. data/app/models/katello/available_module_stream.rb +11 -0
  81. data/app/models/katello/concerns/content_facet_host_extensions.rb +1 -0
  82. data/app/models/katello/concerns/host_managed_extensions.rb +56 -0
  83. data/app/models/katello/concerns/hostgroup_extensions.rb +17 -0
  84. data/app/models/katello/concerns/redhat_extensions.rb +20 -6
  85. data/app/models/katello/concerns/search_by_repository_name.rb +0 -1
  86. data/app/models/katello/concerns/smart_proxy_extensions.rb +26 -12
  87. data/app/models/katello/content_facet_applicable_module_stream.rb +7 -0
  88. data/app/models/katello/content_view_puppet_environment.rb +14 -35
  89. data/app/models/katello/erratum.rb +54 -24
  90. data/app/models/katello/erratum_package.rb +6 -0
  91. data/app/models/katello/glue/pulp/repo.rb +5 -228
  92. data/app/models/katello/gpg_key.rb +1 -0
  93. data/app/models/katello/host/content_facet.rb +38 -83
  94. data/app/models/katello/host_available_module_stream.rb +47 -0
  95. data/app/models/katello/module_stream.rb +18 -0
  96. data/app/models/katello/module_stream_erratum_package.rb +6 -0
  97. data/app/models/katello/product.rb +0 -2
  98. data/app/models/katello/product_content.rb +1 -0
  99. data/app/models/katello/repository.rb +15 -6
  100. data/app/models/katello/root_repository.rb +1 -1
  101. data/app/models/katello/rpm.rb +5 -17
  102. data/app/services/katello/applicable_content_helper.rb +111 -0
  103. data/app/services/katello/managed_content_medium_provider.rb +7 -0
  104. data/app/services/katello/pulp/consumer.rb +13 -7
  105. data/app/services/katello/pulp/repository.rb +157 -4
  106. data/app/services/katello/pulp/repository/deb.rb +47 -0
  107. data/app/services/katello/pulp/repository/docker.rb +43 -0
  108. data/app/services/katello/pulp/repository/file.rb +31 -0
  109. data/app/services/katello/pulp/repository/ostree.rb +40 -0
  110. data/app/services/katello/pulp/repository/puppet.rb +43 -0
  111. data/app/services/katello/pulp/repository/yum.rb +61 -0
  112. data/app/services/katello/repository_type.rb +1 -1
  113. data/app/views/katello/api/v2/content_facet/base.json.rabl +1 -0
  114. data/app/views/katello/api/v2/content_view_versions/base.json.rabl +0 -1
  115. data/app/views/katello/api/v2/errata/_counts.json.rabl +0 -1
  116. data/app/views/katello/api/v2/errata/show.json.rabl +9 -3
  117. data/app/views/katello/api/v2/host_collections/delta_activation_keys.rabl +0 -1
  118. data/app/views/katello/api/v2/host_module_streams/base.json.rabl +8 -0
  119. data/app/views/katello/api/v2/host_module_streams/index.json.rabl +7 -0
  120. data/app/views/katello/api/v2/packages/backend.json.rabl +0 -1
  121. data/app/views/katello/api/v2/repositories/show.json.rabl +6 -6
  122. data/app/views/katello/layouts/react.html.erb +2 -2
  123. data/app/views/overrides/activation_keys/_host_synced_content_select.html.erb +0 -1
  124. data/config/routes/api/rhsm.rb +1 -0
  125. data/config/routes/overrides.rb +4 -0
  126. data/db/migrate/20181008201422_add_modules_to_errata_packages.rb +29 -0
  127. data/db/migrate/20181017181806_available_module_streams.rb +34 -0
  128. data/db/migrate/20181027014323_add_applicable_modules.rb +24 -0
  129. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/common/module-stream-actions.service.js +2 -1
  130. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/details/views/content-credential-info.html +1 -1
  131. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/new/views/new-content-credential.html +1 -0
  132. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-host-bulk-module-streams-modal.html +2 -2
  133. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-errata-modal.html +37 -22
  134. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-hosts.controller.js +4 -1
  135. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-module-streams.controller.js +27 -7
  136. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-module-streams.html +29 -0
  137. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/errata-details.html +15 -1
  138. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/content-hosts.html +1 -1
  139. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-promotion.controller.js +0 -1
  140. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-publish.controller.js +1 -2
  141. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-versions.controller.js +3 -1
  142. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/histories/content-view-history.controller.js +1 -1
  143. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-promotion.html +0 -15
  144. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-publish.html +0 -14
  145. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/details/erratum.controller.js +19 -0
  146. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/details/views/erratum-info.html +0 -12
  147. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/details/views/erratum-packages.html +36 -0
  148. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/details/views/erratum.html +7 -0
  149. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/errata.routes.js +9 -0
  150. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/hosts/host-module-streams.factory.js +18 -0
  151. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +4 -2
  152. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/views/new-repository.html +2 -2
  153. data/engines/bastion_katello/app/assets/stylesheets/bastion_katello/bastion_katello.scss +13 -0
  154. data/lib/katello/permissions/host_permissions.rb +3 -0
  155. data/lib/katello/repository_types/deb.rb +3 -1
  156. data/lib/katello/repository_types/docker.rb +3 -1
  157. data/lib/katello/repository_types/file.rb +1 -0
  158. data/lib/katello/repository_types/ostree.rb +3 -1
  159. data/lib/katello/repository_types/puppet.rb +3 -1
  160. data/lib/katello/repository_types/yum.rb +3 -1
  161. data/lib/katello/tasks/delete_orphaned_content.rake +1 -1
  162. data/lib/katello/tasks/reset.rake +1 -0
  163. data/lib/katello/tasks/test.rake +14 -0
  164. data/lib/katello/tasks/unify_hosts.rake +2 -0
  165. data/lib/katello/tasks/virt_who_report.rake +2 -1
  166. data/lib/katello/version.rb +1 -1
  167. data/locale/Makefile +52 -17
  168. data/locale/update-i18n +22 -0
  169. data/package.json +11 -1
  170. data/webpack/__mocks__/foremanReact/components/common/EmptyState.js +8 -0
  171. data/webpack/move_to_foreman/components/common/table/components/Table.js +2 -1
  172. data/webpack/move_to_pf/react-bootstrap-select/index.js +4 -2
  173. data/webpack/move_to_pf/test-utils/testHelpers.js +9 -0
  174. data/webpack/redux/OrganizationProducts/OrganizationProductsActions.js +24 -0
  175. data/webpack/redux/OrganizationProducts/OrganizationProductsConstants.js +5 -0
  176. data/webpack/redux/OrganizationProducts/OrganizationProductsReducer.js +38 -0
  177. data/webpack/redux/OrganizationProducts/OrganizationProductsSelectors.js +7 -0
  178. data/webpack/redux/OrganizationProducts/__tests__/OrganizationProductsActions.test.js +47 -0
  179. data/webpack/redux/OrganizationProducts/__tests__/OrganizationProductsReducer.test.js +33 -0
  180. data/webpack/redux/OrganizationProducts/__tests__/OrganizationProductsSelectors.test.js +19 -0
  181. data/webpack/redux/OrganizationProducts/__tests__/__snapshots__/OrganizationProductsActions.test.js.snap +49 -0
  182. data/webpack/redux/OrganizationProducts/__tests__/__snapshots__/OrganizationProductsReducer.test.js.snap +36 -0
  183. data/webpack/redux/OrganizationProducts/__tests__/__snapshots__/OrganizationProductsSelectors.test.js.snap +9 -0
  184. data/webpack/redux/OrganizationProducts/index.js +13 -0
  185. data/webpack/redux/actions/RedHatRepositories/enabled.js +7 -1
  186. data/webpack/redux/actions/RedHatRepositories/helpers.js +4 -0
  187. data/webpack/redux/actions/RedHatRepositories/sets.js +2 -0
  188. data/webpack/redux/reducers/RedHatRepositories/enabled.fixtures.js +8 -2
  189. data/webpack/redux/reducers/RedHatRepositories/enabled.js +1 -1
  190. data/webpack/redux/reducers/RedHatRepositories/sets.fixtures.js +12 -3
  191. data/webpack/redux/reducers/index.js +2 -0
  192. data/webpack/scenes/RedHatRepositories/components/SearchBar.js +68 -33
  193. data/webpack/scenes/RedHatRepositories/index.js +13 -2
  194. data/webpack/scenes/RedHatRepositories/index.scss +26 -0
  195. data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.js +1 -1
  196. data/webpack/scenes/Subscriptions/Manifest/__tests__/__snapshots__/ManageManifestModal.test.js.snap +1 -1
  197. data/webpack/scenes/Subscriptions/SubscriptionActions.js +18 -2
  198. data/webpack/scenes/Subscriptions/SubscriptionConstants.js +8 -0
  199. data/webpack/scenes/Subscriptions/SubscriptionHelpers.js +15 -0
  200. data/webpack/scenes/Subscriptions/SubscriptionReducer.js +22 -14
  201. data/webpack/scenes/Subscriptions/SubscriptionsPage.js +39 -90
  202. data/webpack/scenes/Subscriptions/SubscriptionsSelectors.js +14 -0
  203. data/webpack/scenes/Subscriptions/UpstreamSubscriptions/UpstreamSubscriptionsPage.js +1 -3
  204. data/webpack/scenes/Subscriptions/UpstreamSubscriptions/__tests__/__snapshots__/UpstreamSubscriptionsPage.test.js.snap +0 -1
  205. data/webpack/scenes/Subscriptions/__tests__/SubscriptionHelpers.test.js +84 -0
  206. data/webpack/scenes/Subscriptions/__tests__/SubscriptionsActions.test.js +26 -1
  207. data/webpack/scenes/Subscriptions/__tests__/SubscriptionsPage.test.js +5 -0
  208. data/webpack/scenes/Subscriptions/__tests__/SubscriptionsReducer.test.js +177 -75
  209. data/webpack/scenes/Subscriptions/__tests__/SubscriptionsSelectors.test.js +29 -0
  210. data/webpack/scenes/Subscriptions/__tests__/__snapshots__/SubscriptionHelpers.test.js.snap +31 -0
  211. data/webpack/scenes/Subscriptions/__tests__/__snapshots__/SubscriptionsActions.test.js.snap +32 -0
  212. data/webpack/scenes/Subscriptions/__tests__/__snapshots__/SubscriptionsPage.test.js.snap +18 -96
  213. data/webpack/scenes/Subscriptions/__tests__/__snapshots__/SubscriptionsReducer.test.js.snap +511 -0
  214. data/webpack/scenes/Subscriptions/__tests__/__snapshots__/SubscriptionsSelectors.test.js.snap +26 -0
  215. data/webpack/scenes/Subscriptions/__tests__/subscriptions.fixtures.js +6 -1
  216. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/__tests__/__snapshots__/SubscriptionsTable.test.js.snap +3 -21
  217. data/webpack/scenes/Subscriptions/components/SubscriptionsToolbar/SubscriptionsToolbar.js +113 -0
  218. data/webpack/scenes/Subscriptions/components/SubscriptionsToolbar/SubscriptionsToolbar.test.js +47 -0
  219. data/webpack/scenes/Subscriptions/components/SubscriptionsToolbar/__snapshots__/SubscriptionsToolbar.test.js.snap +504 -0
  220. data/webpack/scenes/Subscriptions/components/SubscriptionsToolbar/index.js +1 -0
  221. data/webpack/scenes/Subscriptions/index.js +15 -4
  222. metadata +59 -14
  223. data/app/lib/actions/pulp/repository/associate_distributor.rb +0 -20
  224. data/app/lib/actions/pulp/repository/associate_importer.rb +0 -23
  225. data/app/lib/actions/pulp/repository/delete_distributor.rb +0 -18
  226. data/app/lib/actions/pulp/repository/refresh_distributor.rb +0 -19
  227. data/app/lib/actions/pulp/repository/update_importer.rb +0 -33
  228. data/app/lib/katello/bulk_actions.rb +0 -63
  229. data/webpack/move_to_foreman/components/common/EmptyState/index.js +0 -68
@@ -0,0 +1,34 @@
1
+ class AvailableModuleStreams < ActiveRecord::Migration[5.2]
2
+ def up
3
+ create_table :katello_available_module_streams do |t|
4
+ t.string :name
5
+ t.string :stream
6
+ end
7
+
8
+ create_table :katello_host_available_module_streams do |t|
9
+ t.references :host, :null => false, :index => true
10
+ t.references :available_module_stream, :null => false, :index => false
11
+ t.text :installed_profiles
12
+ t.string :status
13
+ end
14
+
15
+ add_index :katello_available_module_streams, [:name, :stream], :unique => true, :name => :katello_available_module_streams_name_stream
16
+
17
+ add_foreign_key :katello_host_available_module_streams, :hosts,
18
+ :name => :katello_hems_host_id_fk, :column => :host_id
19
+
20
+ add_foreign_key :katello_host_available_module_streams, :katello_available_module_streams,
21
+ :name => :katello_hems_available_module_stream_id_fk, :column => :available_module_stream_id
22
+
23
+ add_index :katello_host_available_module_streams, :available_module_stream_id,
24
+ name: :index_katello_hems_available_module_stream_id
25
+ end
26
+
27
+ def down
28
+ remove_foreign_key :katello_host_available_module_streams, name: :katello_hems_host_id_fk
29
+ remove_foreign_key :katello_host_available_module_streams, name: :katello_hems_available_module_stream_id_fk
30
+
31
+ drop_table :katello_host_available_module_streams
32
+ drop_table :katello_available_module_streams
33
+ end
34
+ end
@@ -0,0 +1,24 @@
1
+ class AddApplicableModules < ActiveRecord::Migration[5.2]
2
+ def change
3
+ create_table "katello_content_facet_applicable_module_streams" do |t|
4
+ t.references 'content_facet', :null => false, :index => { :name => :katello_cfams_cf_idx }
5
+ t.references 'module_stream', :null => false, :index => { :name => :katello_cfams_ms_idx }
6
+ end
7
+
8
+ add_foreign_key :katello_content_facet_applicable_module_streams,
9
+ :katello_module_streams,
10
+ column: :module_stream_id,
11
+ name: :katello_cfams_mod_stream_id_fk
12
+
13
+ add_foreign_key :katello_content_facet_applicable_module_streams,
14
+ :katello_content_facets,
15
+ column: :content_facet_id,
16
+ name: :katello_cfams_cf_fk
17
+
18
+ add_index "katello_content_facet_applicable_module_streams", ["module_stream_id", "content_facet_id"],
19
+ :name => "katello_content_facet_module_stream_rid_cfid", :unique => true
20
+
21
+ add_column :katello_content_facets, :applicable_module_stream_count, :integer, :null => false, :default => 0
22
+ add_column :katello_content_facets, :upgradable_module_stream_count, :integer, :null => false, :default => 0
23
+ end
24
+ end
@@ -16,7 +16,8 @@
16
16
  { action: 'disable', description: translate("Disable")},
17
17
  { action: 'install', description: translate("Install")},
18
18
  { action: 'update', description: translate("Update")},
19
- { action: 'remove', description: translate("Remove")}
19
+ { action: 'remove', description: translate("Remove")},
20
+ { action: 'reset', description: translate("Reset")}
20
21
  ];
21
22
  };
22
23
  }
@@ -12,7 +12,7 @@
12
12
  <dd>{{ contentCredential.content_type | contentTypeFilter }}</dd>
13
13
 
14
14
  <dt translate>Content</dt>
15
- <dd bst-edit-custom="contentCredential.content"
15
+ <dd style="font-family: monospace" bst-edit-custom="contentCredential.content"
16
16
  readonly="denied('edit_content_credentials', contentCredential)"
17
17
  on-save="save(contentCredential)">
18
18
  <form role="form"
@@ -33,6 +33,7 @@
33
33
  ng-model="contentCredential.pastedContent"
34
34
  tabindex="1"
35
35
  class="form-control"
36
+ style="font-family: monospace"
36
37
  rows="15"
37
38
  placeholder="{{ 'Paste contents of Content Credential' | translate }}">
38
39
  </textarea>
@@ -9,7 +9,7 @@
9
9
  <input type="hidden" name="remote_action" ng-value="moduleStreamActionFormValues.remoteAction"/>
10
10
  <input type="hidden" name="module_stream_action" ng-value="moduleStreamActionFormValues.moduleStreamAction"/>
11
11
  <input type="hidden" name="module_spec" ng-value="moduleStreamActionFormValues.moduleSpec"/>
12
- <input type="hidden" name="scoped_search" ng-value="errataActionFormValues.search"/>
12
+ <input type="hidden" name="scoped_search" ng-value="moduleStreamActionFormValues.search"/>
13
13
  <input type="hidden" name="host_ids" ng-value="moduleStreamActionFormValues.hostIds"/>
14
14
  <input type="hidden" name="customize" ng-value="moduleStreamActionFormValues.customize"/>
15
15
  <input type="hidden" name="authenticity_token" ng-value="moduleStreamActionFormValues.authenticityToken"/>
@@ -67,4 +67,4 @@
67
67
  <div data-block="modal-footer">
68
68
  <button class="btn btn-default" ng-click="cancel()" translate>Cancel</button>
69
69
  </div>
70
- </div>
70
+ </div>
@@ -120,55 +120,70 @@
120
120
  <section>
121
121
 
122
122
  <div class="detail">
123
- <span class="info-label" translate>Type</span>
123
+ <span class="info-label" translate><b>Type</b></span>
124
124
  <span class="info-value">{{ erratum.type }}</span>
125
125
  </div>
126
126
  <div class="detail">
127
- <span class="info-label" translate>Title</span>
127
+ <span class="info-label" translate><b>Title</b></span>
128
128
  <span class="info-value">{{ erratum.title }}</span>
129
129
  </div>
130
130
  <div class="detail">
131
- <span class="info-label" translate>Issued</span>
131
+ <span class="info-label" translate><b>Issued</b></span>
132
132
  <span class="info-value">{{ erratum.issued }}</span>
133
133
  </div>
134
134
  <div class="detail">
135
- <span class="info-label" translate>Updated</span>
135
+ <span class="info-label" translate><b>Updated</b></span>
136
136
  <span class="info-value">{{ erratum.updated }}</span>
137
137
  </div>
138
138
  <div class="detail">
139
- <span class="info-label" translate>Reboot Suggested</span>
139
+ <span class="info-label" translate><b>Reboot Suggested</b></span>
140
140
  <span class="info-value">{{ erratum.reboot_suggested }}</span>
141
141
  </div>
142
142
 
143
143
  <div class="detail">
144
- <span class="info-label" translate>Description</span>
144
+ <span class="info-label" translate><b>Description</b></span>
145
145
  <span class="info-value">
146
- <p ng-repeat="paragraph in erratum.description.split('\n\n')">
147
- {{ paragraph }}
148
- </p>
149
- </span>
146
+ <p ng-repeat="paragraph in erratum.description.split('\n\n')">
147
+ {{ paragraph }}
148
+ </p>
149
+ </span>
150
150
  </div>
151
151
 
152
152
  <div class="detail">
153
- <span class="info-label" translate>Solution</span>
153
+ <span class="info-label" translate><b>Solution</b></span>
154
154
  <span class="info-value">
155
- <p ng-repeat="paragraph in erratum.solution.split('\n\n')">
156
- {{ paragraph }}
157
- </p>
158
- </span>
155
+ <p ng-repeat="paragraph in erratum.solution.split('\n\n')">
156
+ {{ paragraph }}
157
+ </p>
158
+ </span>
159
159
  </div>
160
160
 
161
161
  <div class="detail">
162
- <span class="info-label" translate>Packages</span>
162
+ <span class="info-label" translate><b>Packages</b></span>
163
163
  <span class="info-value">
164
- <ul>
165
- <li ng-repeat="package in erratum.packages">
166
- {{ package }}
167
- </li>
168
- </ul>
169
- </span>
164
+ <ul>
165
+ <li ng-repeat="package in erratum.packages">
166
+ {{ package }}
167
+ </li>
168
+ </ul>
169
+ </span>
170
170
  </div>
171
171
 
172
+ <div class="detail">
173
+ <span class="info-label" translate><b>Module Streams</b></span>
174
+ <span class="info-value">
175
+ <ul>
176
+ <li ng-repeat="moduleStream in erratum.module_streams">
177
+ {{ moduleStream.name + ":" + moduleStream.stream }}
178
+ <ul>
179
+ <li ng-repeat="package in moduleStream.packages">
180
+ {{ package }}
181
+ </li>
182
+ </ul>
183
+ </li>
184
+ </ul>
185
+ </span>
186
+ </div>
172
187
  </section>
173
188
  </div>
174
189
  </div>
@@ -37,7 +37,10 @@ angular.module('Bastion.content-hosts').controller('ContentHostsController',
37
37
  'sort_order': 'ASC'
38
38
  };
39
39
 
40
- $scope.csvQuery = $httpParamSerializer(params);
40
+ $scope.csvQuery = function () {
41
+ return $httpParamSerializer(params);
42
+ };
43
+
41
44
  nutupane = new Nutupane(Host, params);
42
45
  $scope.controllerName = 'hosts';
43
46
  nutupane.masterOnly = true;
@@ -5,24 +5,24 @@
5
5
  * @requires $scope
6
6
  * @resource $timeout
7
7
  * @resource $window
8
- * @requires ModuleStream
8
+ * @requires HostModuleStream
9
9
  * @requires Nutupane
10
10
  * @requires ModuleStreamActions
11
+ * @requires translate
11
12
  *
12
13
  * @description
13
14
  * Provides the functionality for the content host module streams list and actions.
14
15
  */
15
16
  angular.module('Bastion.content-hosts').controller('ContentHostModuleStreamsController',
16
- ['$scope', '$timeout', '$window', 'ModuleStream', 'Nutupane', 'BastionConfig', 'ModuleStreamActions',
17
- function ($scope, $timeout, $window, ModuleStream, Nutupane, BastionConfig, ModuleStreamActions) {
17
+ ['$scope', '$timeout', '$window', 'HostModuleStream', 'Nutupane', 'BastionConfig', 'ModuleStreamActions', 'translate',
18
+ function ($scope, $timeout, $window, HostModuleStream, Nutupane, BastionConfig, ModuleStreamActions, translate) {
18
19
  $scope.moduleStreamActions = ModuleStreamActions.getActions();
19
20
 
20
21
  $scope.working = false;
21
22
 
22
- $scope.moduleStreamsNutupane = new Nutupane(ModuleStream, {
23
- 'host_ids': [$scope.$stateParams.hostId],
24
- 'name_stream_only': '1'
25
- });
23
+ $scope.nutupaneParams = { id: $scope.$stateParams.hostId };
24
+
25
+ $scope.moduleStreamsNutupane = new Nutupane(HostModuleStream, $scope.nutupaneParams);
26
26
 
27
27
  $scope.moduleStreamsNutupane.masterOnly = true;
28
28
  $scope.table = $scope.moduleStreamsNutupane.table;
@@ -34,6 +34,17 @@ angular.module('Bastion.content-hosts').controller('ContentHostModuleStreamsCont
34
34
  remoteAction: 'module_stream_action'
35
35
  };
36
36
 
37
+ $scope.moduleStreamStatus = function(module) {
38
+ var statuses = [];
39
+ if (["enabled", "disabled"].includes(module.status)) {
40
+ statuses.push(translate(_.capitalize(module.status)));
41
+ }
42
+ if (module.installed_profiles.length) {
43
+ statuses.push(translate("Installed"));
44
+ }
45
+ return statuses.join(", ");
46
+ };
47
+
37
48
  $scope.performViaRemoteExecution = function(moduleSpec, actionType) {
38
49
  $scope.working = true;
39
50
  $scope.moduleStreamActionFormValues.moduleSpec = moduleSpec;
@@ -44,5 +55,14 @@ angular.module('Bastion.content-hosts').controller('ContentHostModuleStreamsCont
44
55
  angular.element('#moduleStreamActionForm').submit();
45
56
  }, 0);
46
57
  };
58
+
59
+ $scope.$watch(
60
+ function(scope) {
61
+ return scope.nutupaneParams.status;
62
+ },
63
+ function() {
64
+ $scope.moduleStreamsNutupane.refresh();
65
+ }
66
+ );
47
67
  }
48
68
  ]);
@@ -8,6 +8,7 @@
8
8
  </div>
9
9
 
10
10
  <div ng-if="host && host.hasContent()">
11
+
11
12
  <form id="moduleStreamActionForm" method="post" action="/katello/remote_execution">
12
13
  <input type="hidden" name="remote_action" ng-value="moduleStreamActionFormValues.remoteAction"/>
13
14
  <input type="hidden" name="module_stream_action" ng-value="moduleStreamActionFormValues.moduleStreamAction"/>
@@ -18,6 +19,23 @@
18
19
  </form>
19
20
 
20
21
  <div data-extend-template="layouts/partials/table.html">
22
+ <span data-block="filters">
23
+ <div class="kat-clearfix">
24
+ <div class="kat-inline">
25
+ <label translate>Filter by Status: </label>
26
+ </div>
27
+ <div class="kat-inline">
28
+ <select ng-model="nutupaneParams.status">
29
+ <option value="">All</option>
30
+ <option value="enabled" translate>Enabled</option>
31
+ <option value="installed" translate>Installed</option>
32
+ <option value="disabled" translate>Disabled</option>
33
+ <option value="unknown" translate>Unknown</option>
34
+ <option value="upgradable" translate>Upgrade Available</option>
35
+ </select>
36
+ </div>
37
+ </div>
38
+ </span>
21
39
 
22
40
  <span data-block="no-rows-message" translate>
23
41
  There are no Module Streams to display.
@@ -32,6 +50,8 @@
32
50
  <tr bst-table-head>
33
51
  <th bst-table-column translate>Name</th>
34
52
  <th bst-table-column translate>Stream</th>
53
+ <th bst-table-column translate>Status</th>
54
+ <th bst-table-column translate>Installed Profile</th>
35
55
  <th bst-table-column translate>Actions</th>
36
56
  </tr>
37
57
  </thead>
@@ -42,6 +62,15 @@
42
62
  <a href="/module_streams?search=module_spec%3D{{ module.module_spec }}+and+host%3D{{ host.name }}">
43
63
  {{ module.name }}</a></td>
44
64
  <td bst-table-cell>{{ module.stream }}</td>
65
+ <td bst-table-cell>
66
+ {{ moduleStreamStatus(module) }}
67
+ <span ng-if="module.upgradable" class="pficon pficon-info"
68
+ uib-tooltip="{{ 'Upgrade Available' | translate }}"
69
+ > </span>
70
+ </td>
71
+ <td bst-table-cell>
72
+ {{ module.installed_profiles.join(", ") }}
73
+ </td>
45
74
  <td bst-table-cell>
46
75
  <div class="dropdown" ng-hide="!remoteExecutionPresent || denied('edit_content_hosts', contentHost)">
47
76
  <button class="btn btn-default dropdown-toggle" ng-disabled="$scope.working" type="button" id="dropdownMenu1" data-toggle="dropdown"> Actions
@@ -34,10 +34,24 @@
34
34
 
35
35
  <dt translate>Packages</dt>
36
36
  <dd>
37
- <ul class="list-unstyled">
37
+ <ul>
38
38
  <li ng-repeat="package in erratum.packages">
39
39
  {{ package }}
40
40
  </li>
41
41
  </ul>
42
42
  </dd>
43
+
44
+ <dt translate>Module Streams</dt>
45
+ <dd>
46
+ <ul>
47
+ <li ng-repeat="moduleStream in erratum.module_streams">
48
+ {{ moduleStream.name + ":" + moduleStream.stream }}
49
+ <ul>
50
+ <li ng-repeat="package in moduleStream.packages">
51
+ {{ package }}
52
+ </li>
53
+ </ul>
54
+ </li>
55
+ </ul>
56
+ </dd>
43
57
  </dl>
@@ -7,7 +7,7 @@
7
7
  </div>
8
8
 
9
9
  <div data-block="list-actions">
10
- <a href="/hosts/content_hosts.csv?{{csvQuery}}" class="btn btn-default" target="_self">
10
+ <a href="/hosts/content_hosts.csv?{{csvQuery()}}" class="btn btn-default" target="_self">
11
11
  <span translate>Export</span>
12
12
  </a>
13
13
  <button class="btn btn-default"
@@ -99,7 +99,6 @@ angular.module('Bastion.content-views').controller('ContentViewPromotionControll
99
99
  ContentViewVersion.promote({id: $scope.version.id,
100
100
  'environment_id': $scope.selectedEnvironment.id,
101
101
  'description': $scope.description,
102
- 'force_yum_metadata_regeneration': $scope.forceMetadataRegeneration,
103
102
  force: true},
104
103
  success, failure);
105
104
  };
@@ -34,8 +34,7 @@ angular.module('Bastion.content-views').controller('ContentViewPublishController
34
34
 
35
35
  $scope.publish = function (contentView) {
36
36
  var description = $scope.version.description,
37
- forceMetadataRegeneration = $scope.version.forceMetadataRegeneration,
38
- data = {'id': contentView.id, 'description': description, 'force_yum_metadata_regeneration': forceMetadataRegeneration};
37
+ data = {'id': contentView.id, 'description': description};
39
38
  $scope.working = true;
40
39
  ContentView.publish(data, success, failure);
41
40
  };
@@ -170,7 +170,9 @@ angular.module('Bastion.content-views').controller('ContentViewVersionsControlle
170
170
 
171
171
  $scope.status = function (version) {
172
172
  var taskTypes = $scope.taskTypes,
173
- deletionEvents = findTaskTypes(version['active_history'], taskTypes.deletion),
173
+ deletionEvents = _.filter(findTaskTypes(version['active_history'], taskTypes.deletion), function(history) {
174
+ return history.environment != null;
175
+ }),
174
176
  promotionEvents = findTaskTypes(version['active_history'], taskTypes.promotion),
175
177
  publishEvents = findTaskTypes(version['active_history'], taskTypes.publish),
176
178
  messages = "";
@@ -16,7 +16,7 @@ angular.module('Bastion.content-views').controller('ContentViewHistoryController
16
16
 
17
17
  nutupane = new Nutupane(ContentViewHistory, {
18
18
  contentViewId: $scope.$stateParams.contentViewId,
19
- 'sort_by': 'created_at',
19
+ 'sort_by': 'content_view_version_id',
20
20
  'sort_order': 'DESC'
21
21
  });
22
22
  $scope.controllerName = 'katello_content_views';
@@ -36,21 +36,6 @@
36
36
  </textarea>
37
37
  </div>
38
38
 
39
- <div class="checkbox">
40
- <label translate>
41
- <input id="forceMetadataRegeneration"
42
- name="forceMetadataRegeneration"
43
- ng-model="forceMetadataRegeneration"
44
- type="checkbox"/>
45
- Force Yum Metadata Regeneration
46
- </label>
47
- <i class="fa fa-question-circle"
48
- uib-tooltip="{{ 'Forces metadata regeneration on yum repos even if the contents of the repo have not changed' | translate }}"
49
- tooltip-animation="false"
50
- tooltip-append-to-body="true">
51
- </i>
52
- </div>
53
-
54
39
  <div>
55
40
  <button type="button" class="btn btn-primary btn-lg" ng-disabled="promoting || !selectedEnvironment" ng-click="verifySelection()" translate>
56
41
  Promote Version
@@ -45,20 +45,6 @@
45
45
  </textarea>
46
46
  </div>
47
47
 
48
- <div class="checkbox">
49
- <label translate>
50
- <input id="forceMetadataRegeneration"
51
- name="forceMetadataRegeneration"
52
- ng-model="version.forceMetadataRegeneration"
53
- type="checkbox"/>
54
- Force Yum Metadata Regeneration
55
- </label>
56
- <i class="fa fa-question-circle"
57
- uib-tooltip="{{ 'Forces metadata regeneration on yum repos even if the contents of the repo have not changed' | translate }}"
58
- tooltip-animation="false"
59
- tooltip-append-to-body="true"></i>
60
- </div>
61
-
62
48
  <div bst-form-buttons
63
49
  on-cancel="transitionTo('content-view.versions', {contentViewId: contentView.id})"
64
50
  on-save="publish(contentView)"