katello 3.4.2 → 3.4.4
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.
- checksums.yaml +4 -4
- data/app/controllers/katello/api/rhsm/candlepin_proxies_controller.rb +1 -1
- data/app/controllers/katello/api/v2/api_controller.rb +10 -2
- data/app/controllers/katello/api/v2/capsule_content_controller.rb +1 -1
- data/app/controllers/katello/api/v2/docker_manifests_controller.rb +4 -0
- data/app/controllers/katello/api/v2/docker_tags_controller.rb +4 -5
- data/app/controllers/katello/api/v2/errata_controller.rb +3 -2
- data/app/controllers/katello/api/v2/host_packages_controller.rb +1 -1
- data/app/controllers/katello/api/v2/hosts_bulk_actions_controller.rb +2 -2
- data/app/controllers/katello/api/v2/repositories_controller.rb +1 -1
- data/app/controllers/katello/application_controller.rb +9 -501
- data/app/controllers/katello/concerns/api/v2/repository_content_controller.rb +8 -10
- data/app/helpers/katello/hosts_and_hostgroups_helper.rb +3 -3
- data/app/helpers/katello/layout_helper.rb +2 -0
- data/app/lib/actions/candlepin/consumer/update.rb +1 -0
- data/app/lib/actions/candlepin/import_pool_handler.rb +1 -1
- data/app/lib/actions/katello/capsule_content/remove_unneeded_repos.rb +1 -1
- data/app/lib/actions/katello/capsule_content/sync.rb +24 -14
- data/app/lib/actions/katello/content_view/capsule_generate_and_sync.rb +5 -4
- data/app/lib/actions/katello/content_view/errata_mail.rb +1 -1
- data/app/lib/actions/katello/content_view_puppet_environment/create.rb +3 -1
- data/app/lib/actions/katello/host/update.rb +18 -10
- data/app/lib/actions/katello/host/upload_package_profile.rb +4 -2
- data/app/lib/actions/katello/organization/manifest_refresh.rb +16 -9
- data/app/lib/actions/katello/repository/capsule_generate_and_sync.rb +5 -3
- data/app/lib/actions/katello/repository/errata_mail.rb +1 -1
- data/app/lib/actions/katello/repository/refresh_repository.rb +3 -3
- data/app/lib/actions/pulp/abstract_async_task_group.rb +18 -0
- data/app/lib/actions/pulp/consumer/sync_capsule.rb +2 -1
- data/app/lib/katello/resources/candlepin.rb +9 -6
- data/app/lib/katello/util/support.rb +1 -1
- data/app/models/katello/authorization/repository.rb +3 -3
- data/app/models/katello/concerns/operatingsystem_extensions.rb +2 -2
- data/app/models/katello/concerns/pulp_database_unit.rb +1 -1
- data/app/models/katello/docker_manifest.rb +5 -1
- data/app/models/katello/docker_meta_tag.rb +108 -0
- data/app/models/katello/docker_tag.rb +19 -1
- data/app/models/katello/erratum.rb +16 -6
- data/app/models/katello/glue/candlepin/candlepin_object.rb +12 -11
- data/app/models/katello/glue/candlepin/subscription.rb +3 -1
- data/app/models/katello/glue/provider.rb +4 -4
- data/app/models/katello/glue/pulp/repo.rb +25 -0
- data/app/models/katello/host/content_facet.rb +1 -1
- data/app/models/katello/host/subscription_facet.rb +1 -1
- data/app/models/katello/pool.rb +1 -1
- data/app/models/katello/repository.rb +8 -0
- data/app/models/katello/sync_plan.rb +2 -2
- data/app/models/setting/content.rb +1 -0
- data/app/overrides/add_about_page.rb +0 -7
- data/app/views/common/400.html +9 -0
- data/app/views/katello/api/v2/content_views/base.json.rabl +1 -1
- data/app/views/katello/api/v2/docker_tags/_base.json.rabl +11 -1
- data/app/views/katello/api/v2/repositories/base.json.rabl +1 -1
- data/config/routes/api/rhsm.rb +1 -0
- data/db/migrate/20170523182831_create_docker_meta_tag.rb +13 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-host-modal-helper.service.js +71 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-hosts.controller.js +13 -56
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-hosts.routes.js +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-details-info.controller.js +6 -4
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-info.html +2 -2
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/content-views.routes.js +9 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-copy.html +3 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/docker-tags/details/views/docker-tag-info.html +27 -16
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/docker-tags/docker-tags.controller.js +12 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/docker-tags/views/docker-tags.html +4 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/details/erratum-content-hosts.controller.js +10 -4
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/errata.controller.js +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/host-collections/details/host-collection-details.controller.js +41 -6
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/host-collections/details/views/host-collection-info.html +11 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-manage-docker-manifests.html +4 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/discovery/discovery-create.controller.js +9 -11
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/details/subscription-content-hosts.controller.js +4 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/details/views/subscription-content-hosts.html +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/manifest/manifest-import.controller.js +26 -20
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/manifest/views/manifest-import.html +16 -12
- data/lib/katello/tasks/delete_orphaned_content.rake +8 -1
- data/lib/katello/tasks/repository.rake +20 -0
- data/lib/katello/version.rb +1 -1
- metadata +6 -6
- data/app/controllers/katello/errors_controller.rb +0 -23
- data/app/controllers/katello/failed_authentication_controller.rb +0 -51
- data/app/controllers/katello/sort_column_list.rb +0 -19
- data/app/views/overrides/about/_support_documentation.html.erb +0 -7
data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/errata.controller.js
CHANGED
@@ -82,7 +82,7 @@ angular.module('Bastion.errata').controller('ErrataController',
|
|
82
82
|
});
|
83
83
|
|
84
84
|
$scope.goToNextStep = function () {
|
85
|
-
IncrementalUpdate.setBulkErrata(nutupane.getAllSelectedResults());
|
85
|
+
IncrementalUpdate.setBulkErrata(nutupane.getAllSelectedResults('errata_id'));
|
86
86
|
$state.transitionTo('apply-errata.select-content-hosts');
|
87
87
|
};
|
88
88
|
|
@@ -6,16 +6,17 @@
|
|
6
6
|
* @requires $state
|
7
7
|
* @requires $q
|
8
8
|
* @requires translate
|
9
|
+
* @requires Host
|
10
|
+
* @requires ContentHostsModalHelper
|
9
11
|
* @requires HostCollection
|
10
12
|
* @requires ApiErrorHandler
|
11
|
-
* @requires urlencodeFilter
|
12
13
|
*
|
13
14
|
* @description
|
14
15
|
* Provides the functionality for the host collection details action pane.
|
15
16
|
*/
|
16
17
|
angular.module('Bastion.host-collections').controller('HostCollectionDetailsController',
|
17
|
-
['$scope', '$state', '$q', 'translate', '
|
18
|
-
function ($scope, $state, $q, translate, HostCollection, ApiErrorHandler
|
18
|
+
['$scope', '$state', '$q', 'translate', 'Host', 'ContentHostsModalHelper', 'HostCollection', 'ApiErrorHandler',
|
19
|
+
function ($scope, $state, $q, translate, Host, ContentHostsModalHelper, HostCollection, ApiErrorHandler) {
|
19
20
|
$scope.successMessages = [];
|
20
21
|
$scope.errorMessages = [];
|
21
22
|
|
@@ -36,15 +37,49 @@ angular.module('Bastion.host-collections').controller('HostCollectionDetailsCont
|
|
36
37
|
ApiErrorHandler.handleGETRequestErrors(response, $scope);
|
37
38
|
});
|
38
39
|
|
40
|
+
$scope.getHostIds = function() {
|
41
|
+
return $scope.selected;
|
42
|
+
};
|
43
|
+
|
44
|
+
$scope.host = Host.get({search: "host_collection_id = " + $scope.$stateParams.hostCollectionId}, function (response) {
|
45
|
+
$scope.selected = {
|
46
|
+
included: {
|
47
|
+
ids: _.map(response.results, 'id')
|
48
|
+
},
|
49
|
+
excluded: {
|
50
|
+
ids: []
|
51
|
+
}};
|
52
|
+
ContentHostsModalHelper.resolveFunc = $scope.getHostIds;}, function (response) {
|
53
|
+
$scope.panel.loading = false;
|
54
|
+
ApiErrorHandler.handleGETRequestErrors(response, $scope);
|
55
|
+
});
|
56
|
+
|
39
57
|
$scope.refreshHostCollection = function () {
|
40
58
|
$scope.hostCollection.$get().then(function (hostCollection) {
|
41
59
|
$scope.$emit("updateContentHostCollection", hostCollection);
|
42
60
|
});
|
43
61
|
};
|
44
62
|
|
45
|
-
$scope.
|
46
|
-
|
47
|
-
|
63
|
+
$scope.openPackagesModal = function () {
|
64
|
+
ContentHostsModalHelper.openPackagesModal();
|
65
|
+
};
|
66
|
+
|
67
|
+
$scope.openErrataModal = function () {
|
68
|
+
ContentHostsModalHelper.openErrataModal();
|
69
|
+
};
|
70
|
+
|
71
|
+
$scope.openHostCollectionsModal = function () {
|
72
|
+
ContentHostsModalHelper.openHostCollectionsModal();
|
73
|
+
};
|
74
|
+
|
75
|
+
|
76
|
+
$scope.openEnvironmentModal = function () {
|
77
|
+
ContentHostsModalHelper.openEnvironmentModal();
|
78
|
+
};
|
79
|
+
|
80
|
+
|
81
|
+
$scope.openSubscriptionsModal = function () {
|
82
|
+
ContentHostsModalHelper.openSubscriptionsModal();
|
48
83
|
};
|
49
84
|
|
50
85
|
$scope.save = function (hostCollection) {
|
@@ -69,28 +69,34 @@
|
|
69
69
|
|
70
70
|
<ul class="list-unstyled">
|
71
71
|
<li bst-feature-flag="remote_actions">
|
72
|
-
<a translate ng-
|
72
|
+
<a translate ng-click ="openPackagesModal()">
|
73
73
|
Package Installation, Removal, and Update
|
74
74
|
</a>
|
75
75
|
</li>
|
76
76
|
|
77
77
|
<li bst-feature-flag="remote_actions">
|
78
|
-
<a translate ng-
|
78
|
+
<a translate ng-click="openErrataModal()">
|
79
79
|
Errata Installation
|
80
80
|
</a>
|
81
81
|
</li>
|
82
82
|
|
83
83
|
<li>
|
84
|
-
<a translate ng-
|
84
|
+
<a translate ng-click = "openHostCollectionsModal()">
|
85
85
|
Host Collection Membership
|
86
86
|
</a>
|
87
87
|
</li>
|
88
88
|
|
89
89
|
<li bst-feature-flag="lifecycle_environments">
|
90
|
-
<a translate ng-
|
90
|
+
<a translate ng-click="openEnvironmentModal()">
|
91
91
|
Change assigned Lifecycle Environment or Content View
|
92
92
|
</a>
|
93
93
|
</li>
|
94
|
+
|
95
|
+
<li bst-feature-flag="subscription_management">
|
96
|
+
<a translate ng-click="openSubscriptionsModal()">
|
97
|
+
Subscription Management
|
98
|
+
</a>
|
99
|
+
</li>
|
94
100
|
</ul>
|
95
101
|
</div>
|
96
|
-
</section>
|
102
|
+
</section>
|
@@ -45,6 +45,7 @@
|
|
45
45
|
<tr bst-table-head row-select>
|
46
46
|
<th bst-table-column><span translate>Manifest Name</span></th>
|
47
47
|
<th bst-table-column><span translate>Tags</span></th>
|
48
|
+
<th bst-table-column><span translate>Schema Version</span></th>
|
48
49
|
<th bst-table-column><span translate>Digest</span></th>
|
49
50
|
</tr>
|
50
51
|
</thead>
|
@@ -61,6 +62,9 @@
|
|
61
62
|
</a>
|
62
63
|
</span>
|
63
64
|
</td>
|
65
|
+
<td bst-table-cell>
|
66
|
+
{{ item.schema_version }}
|
67
|
+
</td>
|
64
68
|
<td bst-table-cell>
|
65
69
|
{{ item.digest }}
|
66
70
|
</td>
|
@@ -17,8 +17,8 @@
|
|
17
17
|
* repository discovery.
|
18
18
|
*/
|
19
19
|
angular.module('Bastion.products').controller('DiscoveryCreateController',
|
20
|
-
['$scope', '$q', 'CurrentOrganization', 'Product', 'Repository', 'GPGKey', 'FormUtils', 'DiscoveryRepositories', 'translate',
|
21
|
-
function ($scope, $q, CurrentOrganization, Product, Repository, GPGKey, FormUtils, DiscoveryRepositories, translate) {
|
20
|
+
['$scope', '$q', 'CurrentOrganization', 'Product', 'Repository', 'GPGKey', 'FormUtils', 'DiscoveryRepositories', 'translate', 'ApiErrorHandler',
|
21
|
+
function ($scope, $q, CurrentOrganization, Product, Repository, GPGKey, FormUtils, DiscoveryRepositories, translate, ApiErrorHandler) {
|
22
22
|
|
23
23
|
$scope.errorMessages = [];
|
24
24
|
$scope.successMessages = [];
|
@@ -172,15 +172,13 @@ angular.module('Bastion.products').controller('DiscoveryCreateController',
|
|
172
172
|
return fieldsEnabled;
|
173
173
|
};
|
174
174
|
|
175
|
-
$scope.gpgKeys =
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
return deferred.promise;
|
183
|
-
};
|
175
|
+
$scope.gpgKeys = [];
|
176
|
+
GPGKey.queryUnpaged(function (gpgKeys) {
|
177
|
+
$scope.gpgKeys = gpgKeys.results;
|
178
|
+
}, function (response) {
|
179
|
+
$scope.gpgKeys = [];
|
180
|
+
ApiErrorHandler.handleGETRequestErrors(response, $scope);
|
181
|
+
});
|
184
182
|
|
185
183
|
$scope.$watch('table.rows', function (newList, oldList) {
|
186
184
|
if (newList) {
|
@@ -31,6 +31,10 @@ angular.module('Bastion.subscriptions').controller('SubscriptionContentHostsCont
|
|
31
31
|
|
32
32
|
$scope.memory = ContentHostsHelper.memory;
|
33
33
|
|
34
|
+
$scope.convertMemToGB = function (memoryValue) {
|
35
|
+
return (memoryValue / 1048576).toFixed(2);
|
36
|
+
};
|
37
|
+
|
34
38
|
$scope.virtual = function (facts) {
|
35
39
|
if (angular.isUndefined(facts.virt) || angular.isUndefined(facts.virt['is_guest'])) {
|
36
40
|
return false;
|
@@ -54,7 +54,7 @@
|
|
54
54
|
<td bst-table-cell>{{ contentHost.service_level }}</td>
|
55
55
|
<td bst-table-cell>{{ contentHost.facts.cpu['cpu_socket(s)'] }}</td>
|
56
56
|
<td bst-table-cell>{{ contentHost.facts.cpu['core(s)_per_socket'] }}</td>
|
57
|
-
<td bst-table-cell>{{ contentHost.facts.
|
57
|
+
<td bst-table-cell>{{ convertMemToGB(contentHost.facts.memory['memtotal']) }}</td>
|
58
58
|
</tr>
|
59
59
|
</tbody>
|
60
60
|
</table>
|
@@ -43,6 +43,11 @@ angular.module('Bastion.subscriptions').controller('ManifestImportController',
|
|
43
43
|
}
|
44
44
|
}
|
45
45
|
|
46
|
+
function getInitialTask() {
|
47
|
+
return {pending: true};
|
48
|
+
|
49
|
+
}
|
50
|
+
|
46
51
|
$scope.uploadErrorMessages = [];
|
47
52
|
$scope.progress = {uploading: false};
|
48
53
|
$scope.uploadURL = '/katello/api/v2/organizations/' + CurrentOrganization + '/subscriptions/upload';
|
@@ -58,11 +63,7 @@ angular.module('Bastion.subscriptions').controller('ManifestImportController',
|
|
58
63
|
});
|
59
64
|
|
60
65
|
$scope.isTaskPending = function () {
|
61
|
-
|
62
|
-
if (($scope.task && $scope.task.pending) || ($scope.deleteTask && $scope.deleteTask.pending)) {
|
63
|
-
pending = true;
|
64
|
-
}
|
65
|
-
return pending;
|
66
|
+
return $scope.task && $scope.task.pending;
|
66
67
|
};
|
67
68
|
|
68
69
|
$scope.unregisterSearch = function () {
|
@@ -92,7 +93,6 @@ angular.module('Bastion.subscriptions').controller('ManifestImportController',
|
|
92
93
|
if ($scope.task.result === 'success') {
|
93
94
|
$scope.refreshOrganizationInfo();
|
94
95
|
GlobalNotification.setSuccessMessage(translate("Manifest successfully imported."));
|
95
|
-
$scope.refreshTable();
|
96
96
|
} else {
|
97
97
|
$scope.handleTaskErrors(task, translate("Error importing manifest."));
|
98
98
|
}
|
@@ -100,9 +100,11 @@ angular.module('Bastion.subscriptions').controller('ManifestImportController',
|
|
100
100
|
};
|
101
101
|
|
102
102
|
$scope.deleteManifest = function () {
|
103
|
+
$scope.task = getInitialTask();
|
104
|
+
$scope.taskStatusText = translate('Removing Manifest');
|
103
105
|
Subscription.deleteManifest({}, function (returnData) {
|
104
|
-
$scope.
|
105
|
-
$scope.searchId = Task.registerSearch({'type': 'task', 'task_id': $scope.
|
106
|
+
$scope.task = returnData;
|
107
|
+
$scope.searchId = Task.registerSearch({'type': 'task', 'task_id': $scope.task.id}, $scope.deleteManifestTask);
|
106
108
|
}, function (response) {
|
107
109
|
$scope.saveError = true;
|
108
110
|
$scope.errors = response.data.errors;
|
@@ -110,13 +112,12 @@ angular.module('Bastion.subscriptions').controller('ManifestImportController',
|
|
110
112
|
};
|
111
113
|
|
112
114
|
$scope.deleteManifestTask = function (task) {
|
113
|
-
$scope.
|
114
|
-
if (!$scope.
|
115
|
+
$scope.task = task;
|
116
|
+
if (!$scope.task.pending) {
|
115
117
|
$scope.unregisterSearch();
|
116
|
-
if ($scope.
|
118
|
+
if ($scope.task.result === 'success') {
|
117
119
|
$scope.saveSuccess = true;
|
118
120
|
GlobalNotification.setSuccessMessage(translate("Manifest successfully deleted."));
|
119
|
-
$scope.refreshTable();
|
120
121
|
$scope.refreshOrganizationInfo();
|
121
122
|
} else {
|
122
123
|
$scope.handleTaskErrors(task, translate("Error deleting manifest."));
|
@@ -133,9 +134,11 @@ angular.module('Bastion.subscriptions').controller('ManifestImportController',
|
|
133
134
|
};
|
134
135
|
|
135
136
|
$scope.refreshManifest = function () {
|
137
|
+
$scope.task = getInitialTask();
|
138
|
+
$scope.taskStatusText = translate('Refreshing Manifest');
|
136
139
|
Subscription.refreshManifest({}, function (returnData) {
|
137
|
-
$scope.
|
138
|
-
$scope.searchId = Task.registerSearch({'type': 'task', 'task_id': $scope.
|
140
|
+
$scope.task = returnData;
|
141
|
+
$scope.searchId = Task.registerSearch({'type': 'task', 'task_id': $scope.task.id}, $scope.refreshManifestTask);
|
139
142
|
}, function (response) {
|
140
143
|
$scope.saveError = true;
|
141
144
|
$scope.errors = response.data.errors;
|
@@ -143,13 +146,12 @@ angular.module('Bastion.subscriptions').controller('ManifestImportController',
|
|
143
146
|
};
|
144
147
|
|
145
148
|
$scope.refreshManifestTask = function (task) {
|
146
|
-
$scope.
|
147
|
-
if (!$scope.
|
149
|
+
$scope.task = task;
|
150
|
+
if (!$scope.task.pending) {
|
148
151
|
$scope.unregisterSearch();
|
149
|
-
if ($scope.
|
152
|
+
if ($scope.task.result === 'success') {
|
150
153
|
$scope.saveSuccess = true;
|
151
154
|
GlobalNotification.setSuccessMessage(translate("Manifest successfully refreshed."));
|
152
|
-
$scope.refreshTable();
|
153
155
|
$scope.refreshOrganizationInfo();
|
154
156
|
} else {
|
155
157
|
$scope.handleTaskErrors(task, translate("Error refreshing manifest."));
|
@@ -174,10 +176,11 @@ angular.module('Bastion.subscriptions').controller('ManifestImportController',
|
|
174
176
|
|
175
177
|
deferred = Organization.update(whitelistedOrganizationObject, function () {
|
176
178
|
GlobalNotification.setSuccessMessage(translate('Repository URL updated'));
|
177
|
-
$scope.refreshTable();
|
178
179
|
$scope.refreshOrganizationInfo();
|
179
180
|
}, function (response) {
|
180
|
-
|
181
|
+
angular.forEach(response.data.error['full_messages'], function (message) {
|
182
|
+
GlobalNotification.setErrorMessage(translate("An error occurred saving the URL: ") + message);
|
183
|
+
});
|
181
184
|
});
|
182
185
|
|
183
186
|
return deferred.$promise;
|
@@ -186,6 +189,9 @@ angular.module('Bastion.subscriptions').controller('ManifestImportController',
|
|
186
189
|
$scope.uploadManifest = function (content) {
|
187
190
|
var returnData;
|
188
191
|
if (content) {
|
192
|
+
$scope.task = getInitialTask();
|
193
|
+
$scope.taskStatusText = translate('Uploading Manifest');
|
194
|
+
|
189
195
|
try {
|
190
196
|
returnData = angular.fromJson(angular.element(content).html());
|
191
197
|
} catch (err) {
|
@@ -17,6 +17,17 @@
|
|
17
17
|
<div class="details">
|
18
18
|
<h4 translate>Subscription Manifest</h4>
|
19
19
|
|
20
|
+
<div ng-show="isTaskPending()">
|
21
|
+
<a ng-href="/foreman_tasks/tasks/{{ task.id }}">
|
22
|
+
|
23
|
+
<div ng-class="{ active: isTaskPending() }"
|
24
|
+
class="progress progress-striped">
|
25
|
+
<span uib-progressbar animate="false" value="task.progressbar.value" type="{{task.progressbar.type}}"></span>
|
26
|
+
</div>
|
27
|
+
</a>
|
28
|
+
{{ taskStatusText }}
|
29
|
+
</div>
|
30
|
+
|
20
31
|
<div class="detail">
|
21
32
|
<span class="info-label" translate>Upstream Subscription Management Application</span>
|
22
33
|
<span class="info-value" ng-show="upstream.uuid != undefined">
|
@@ -30,18 +41,13 @@
|
|
30
41
|
ng-hide="denied('delete_manifest')"
|
31
42
|
ng-click="openModal()">
|
32
43
|
<span bst-modal="deleteManifest()" template-url="subscriptions/manifest/views/manifest-delete-modal.html"></span>
|
33
|
-
|
34
|
-
<span ng-show="deleteTask.pending" translate>Deleting Manifest...</span>
|
35
|
-
<span ng-hide="deleteTask.pending" translate>Delete Manifest</span>
|
44
|
+
<span translate>Delete Manifest</span>
|
36
45
|
</button>
|
37
|
-
<button type="button" class="btn btn-default" ng-disabled="upstream.idCert == undefined || upstream.idCert.cert == undefined"
|
46
|
+
<button type="button" class="btn btn-default" ng-disabled="isTaskPending() || upstream.idCert == undefined || upstream.idCert.cert == undefined"
|
38
47
|
ng-click="refreshManifest()">
|
39
|
-
|
40
|
-
<span ng-show="refreshTask.pending" translate>Refreshing Manifest...</span>
|
41
|
-
<span ng-hide="refreshTask.pending" translate>Refresh Manifest</span>
|
48
|
+
<span translate>Refresh Manifest</span>
|
42
49
|
</button>
|
43
|
-
<span ng-show="upstream.idCert == undefined || upstream.idCert.cert == undefined"
|
44
|
-
translate>
|
50
|
+
<span ng-show="upstream.idCert == undefined || upstream.idCert.cert == undefined" translate>
|
45
51
|
Refreshing manifest not supported by this manifest.
|
46
52
|
</span>
|
47
53
|
</div>
|
@@ -66,9 +72,7 @@
|
|
66
72
|
|
67
73
|
<div class="form-group">
|
68
74
|
<button type="button" class="btn btn-primary" ng-disabled="isTaskPending()" upload-submit>
|
69
|
-
<
|
70
|
-
<span ng-show="task.pending" translate>Uploading...</span>
|
71
|
-
<span ng-hide="task.pending" translate>Upload</span>
|
75
|
+
<span translate>Upload</span>
|
72
76
|
</button>
|
73
77
|
</div>
|
74
78
|
|
@@ -1,7 +1,14 @@
|
|
1
1
|
namespace :katello do
|
2
2
|
task :delete_orphaned_content => ["environment"] do
|
3
3
|
User.current = User.anonymous_admin
|
4
|
-
|
4
|
+
SmartProxy.with_content.reverse.each do |proxy|
|
5
|
+
begin
|
6
|
+
ForemanTasks.async_task(Actions::Katello::CapsuleContent::RemoveOrphans,
|
7
|
+
:capsule_id => proxy.id)
|
8
|
+
rescue RuntimeError => e
|
9
|
+
Rails.logger.error "Smart proxy with ID #{proxy.id} may be down: #{e}"
|
10
|
+
end
|
11
|
+
end
|
5
12
|
puts _("Orphaned content deletion started in background.")
|
6
13
|
end
|
7
14
|
end
|
@@ -3,6 +3,26 @@ namespace :katello do
|
|
3
3
|
ForemanTasks.dynflow.config.remote = true
|
4
4
|
end
|
5
5
|
|
6
|
+
desc "Check for repositories that have not been published since their last sync, and republish if they have."
|
7
|
+
task :publish_unpublished_repositories => ["environment", "disable_dynflow", "check_ping"] do
|
8
|
+
needing_publish = []
|
9
|
+
Organization.find_each do |org|
|
10
|
+
org.default_content_view.versions.first.repositories.where.not(:url => nil).find_each do |repo|
|
11
|
+
begin
|
12
|
+
if repo.needs_metadata_publish?
|
13
|
+
Rails.logger.error("Repository metadata for #{repo.name} (#{repo.id}) is out of date, regenerating.")
|
14
|
+
needing_publish << repo
|
15
|
+
end
|
16
|
+
rescue => e
|
17
|
+
puts "Failed to check repository #{repo.id}: #{e}"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
if needing_publish.any?
|
22
|
+
ForemanTasks.async_task(::Actions::BulkAction, ::Actions::Katello::Repository::MetadataGenerate, needing_publish)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
6
26
|
desc "Regnerate metadata for all repositories. Specify CONTENT_VIEW=name and LIFECYCLE_ENVIRONMENT=name to narrow repositories."
|
7
27
|
task :regenerate_repo_metadata => ["environment", "disable_dynflow", "check_ping"] do
|
8
28
|
User.current = User.anonymous_api_admin
|
data/lib/katello/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: katello
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.4.
|
4
|
+
version: 3.4.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- N/A
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-07-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -492,13 +492,10 @@ files:
|
|
492
492
|
- app/controllers/katello/concerns/organizations_controller_extensions.rb
|
493
493
|
- app/controllers/katello/concerns/smart_proxies_controller_extensions.rb
|
494
494
|
- app/controllers/katello/errata_controller.rb
|
495
|
-
- app/controllers/katello/errors_controller.rb
|
496
|
-
- app/controllers/katello/failed_authentication_controller.rb
|
497
495
|
- app/controllers/katello/http_errors.rb
|
498
496
|
- app/controllers/katello/products_controller.rb
|
499
497
|
- app/controllers/katello/providers_controller.rb
|
500
498
|
- app/controllers/katello/remote_execution_controller.rb
|
501
|
-
- app/controllers/katello/sort_column_list.rb
|
502
499
|
- app/controllers/katello/sync_management_controller.rb
|
503
500
|
- app/helpers/katello/application_helper.rb
|
504
501
|
- app/helpers/katello/concerns/foreman_docker/container_steps_helper_extensions.rb
|
@@ -864,6 +861,7 @@ files:
|
|
864
861
|
- app/models/katello/content_view_version_component.rb
|
865
862
|
- app/models/katello/cp_consumer_user.rb
|
866
863
|
- app/models/katello/docker_manifest.rb
|
864
|
+
- app/models/katello/docker_meta_tag.rb
|
867
865
|
- app/models/katello/docker_tag.rb
|
868
866
|
- app/models/katello/errata_status.rb
|
869
867
|
- app/models/katello/erratum.rb
|
@@ -972,6 +970,7 @@ files:
|
|
972
970
|
- app/services/katello/puppet_class_importer_extensions.rb
|
973
971
|
- app/services/katello/repository_type.rb
|
974
972
|
- app/services/katello/repository_type_manager.rb
|
973
|
+
- app/views/common/400.html
|
975
974
|
- app/views/dashboard/_content_views_widget.html.erb
|
976
975
|
- app/views/dashboard/_errata_widget.html.erb
|
977
976
|
- app/views/dashboard/_host_collection_widget.html.erb
|
@@ -1178,7 +1177,6 @@ files:
|
|
1178
1177
|
- app/views/katello/sync_management/_sync_plans.html.erb
|
1179
1178
|
- app/views/katello/sync_management/index.html.erb
|
1180
1179
|
- app/views/overrides/about/_installed_packages.html.erb
|
1181
|
-
- app/views/overrides/about/_support_documentation.html.erb
|
1182
1180
|
- app/views/overrides/about/_system_status.html.erb
|
1183
1181
|
- app/views/overrides/activation_keys/_host_environment_select.html.erb
|
1184
1182
|
- app/views/overrides/activation_keys/_host_media_type_select.html.erb
|
@@ -1388,6 +1386,7 @@ files:
|
|
1388
1386
|
- db/migrate/20170220679403_remove_system_permissions.rb
|
1389
1387
|
- db/migrate/20170222131211_change_pool_columns_to_dates.rb
|
1390
1388
|
- db/migrate/20170321012632_fill_in_content_view_components.rb
|
1389
|
+
- db/migrate/20170523182831_create_docker_meta_tag.rb
|
1391
1390
|
- db/seeds.d/101-locations.rb
|
1392
1391
|
- db/seeds.d/102-organizations.rb
|
1393
1392
|
- db/seeds.d/103-provisioning_templates.rb
|
@@ -1453,6 +1452,7 @@ files:
|
|
1453
1452
|
- engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/errata-content-hosts.html
|
1454
1453
|
- engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/errata-details.html
|
1455
1454
|
- engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-host-events.controller.js
|
1455
|
+
- engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-host-modal-helper.service.js
|
1456
1456
|
- engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-host-register.controller.js
|
1457
1457
|
- engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-host-status.controller.js
|
1458
1458
|
- engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-hosts-helper.service.js
|