fix(app): parse response with null body (#4654)

* fix(app): parse response with null body

* style(docker): add comment explaining change

* fix(images): show correct error when failing import

* fix(images): use async await
pull/4444/merge
Chaim Lev-Ari 2021-06-11 03:05:54 +03:00 committed by GitHub
parent f674573cdf
commit 0b85684168
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 88 additions and 88 deletions

View File

@ -18,6 +18,10 @@ function isJSON(jsonString) {
// This handler wrap the JSON objects in an array. // This handler wrap the JSON objects in an array.
// Used by the API in: Image push, Image create, Events query. // Used by the API in: Image push, Image create, Events query.
export function jsonObjectsToArrayHandler(data) { export function jsonObjectsToArrayHandler(data) {
// catching empty data helps the function not to fail and prevents unwanted error message to user.
if (!data) {
return [];
}
var str = '[' + data.replace(/\n/g, ' ').replace(/\}\s*\{/g, '}, {') + ']'; var str = '[' + data.replace(/\n/g, ' ').replace(/\}\s*\{/g, '}, {') + ']';
return angular.fromJson(str); return angular.fromJson(str);
} }

View File

@ -1,11 +1,6 @@
angular.module('portainer.docker').controller('BuildImageController', [ angular.module('portainer.docker').controller('BuildImageController', BuildImageController);
'$scope',
'$window', function BuildImageController($scope, $async, $window, ModalService, BuildService, Notifications, HttpRequestHelper) {
'ModalService',
'BuildService',
'Notifications',
'HttpRequestHelper',
function ($scope, $window, ModalService, BuildService, Notifications, HttpRequestHelper) {
$scope.state = { $scope.state = {
BuildType: 'editor', BuildType: 'editor',
actionInProgress: false, actionInProgress: false,
@ -52,7 +47,10 @@ angular.module('portainer.docker').controller('BuildImageController', [
} }
} }
$scope.buildImage = function () { $scope.buildImage = buildImage;
async function buildImage() {
return $async(async () => {
var buildType = $scope.state.BuildType; var buildType = $scope.state.BuildType;
if (buildType === 'editor' && $scope.formValues.DockerFileContent === '') { if (buildType === 'editor' && $scope.formValues.DockerFileContent === '') {
@ -71,24 +69,23 @@ angular.module('portainer.docker').controller('BuildImageController', [
var nodeName = $scope.formValues.NodeName; var nodeName = $scope.formValues.NodeName;
HttpRequestHelper.setPortainerAgentTargetHeader(nodeName); HttpRequestHelper.setPortainerAgentTargetHeader(nodeName);
buildImageBasedOnBuildType(buildType, imageNames) try {
.then(function success(data) { const data = await buildImageBasedOnBuildType(buildType, imageNames);
$scope.buildLogs = data.buildLogs; $scope.buildLogs = data.buildLogs;
$scope.state.activeTab = 1; $scope.state.activeTab = 1;
if (data.hasError) { if (data.hasError) {
Notifications.error('An error occured during build', { msg: 'Please check build logs output' }); Notifications.error('An error occurred during build', { msg: 'Please check build logs output' });
} else { } else {
Notifications.success('Image successfully built'); Notifications.success('Image successfully built');
$scope.state.isEditorDirty = false; $scope.state.isEditorDirty = false;
} }
}) } catch (err) {
.catch(function error(err) {
Notifications.error('Failure', err, 'Unable to build image'); Notifications.error('Failure', err, 'Unable to build image');
}) } finally {
.finally(function final() {
$scope.state.actionInProgress = false; $scope.state.actionInProgress = false;
}
}); });
}; }
$scope.validImageNames = function () { $scope.validImageNames = function () {
for (var i = 0; i < $scope.formValues.ImageNames.length; i++) { for (var i = 0; i < $scope.formValues.ImageNames.length; i++) {
@ -110,5 +107,4 @@ angular.module('portainer.docker').controller('BuildImageController', [
return ModalService.confirmWebEditorDiscard(); return ModalService.confirmWebEditorDiscard();
} }
}; };
}, }
]);

View File

@ -25,7 +25,7 @@ angular.module('portainer.docker').controller('ImportImageController', [
Notifications.success('Images successfully uploaded'); Notifications.success('Images successfully uploaded');
}) })
.catch(function error(err) { .catch(function error(err) {
Notifications.error('Failure', err.message, 'Unable to upload image'); Notifications.error('Failure', err, 'Unable to upload image');
}) })
.finally(function final() { .finally(function final() {
$scope.state.actionInProgress = false; $scope.state.actionInProgress = false;