diff --git a/app/azure/models/container_group.js b/app/azure/models/container_group.js index bab1de3b9..af2871c92 100644 --- a/app/azure/models/container_group.js +++ b/app/azure/models/container_group.js @@ -39,6 +39,9 @@ export function CreateContainerGroupRequest(model) { var addressPorts = []; for (var i = 0; i < model.Ports.length; i++) { var binding = model.Ports[i]; + if (!binding.container || !binding.host) { + continue; + } containerPorts.push({ port: binding.container, diff --git a/app/azure/views/containerinstances/create/createContainerInstanceController.js b/app/azure/views/containerinstances/create/createContainerInstanceController.js index 7c2774946..cc42380d5 100644 --- a/app/azure/views/containerinstances/create/createContainerInstanceController.js +++ b/app/azure/views/containerinstances/create/createContainerInstanceController.js @@ -14,6 +14,7 @@ angular.module('portainer.azure').controller('AzureCreateContainerInstanceContro actionInProgress: false, selectedSubscription: null, selectedResourceGroup: null, + formValidationError: '', }; $scope.changeSubscription = function () { @@ -34,6 +35,11 @@ angular.module('portainer.azure').controller('AzureCreateContainerInstanceContro var subscriptionId = $scope.state.selectedSubscription.Id; var resourceGroupName = $scope.state.selectedResourceGroup.Name; + $scope.state.formValidationError = validateForm(model); + if ($scope.state.formValidationError) { + return false; + } + $scope.state.actionInProgress = true; AzureService.createContainerGroup(model, subscriptionId, resourceGroupName) .then(function success() { @@ -41,6 +47,7 @@ angular.module('portainer.azure').controller('AzureCreateContainerInstanceContro $state.go('azure.containerinstances'); }) .catch(function error(err) { + err = err.data ? err.data.error : err; Notifications.error('Failure', err, 'Unable to create container'); }) .finally(function final() { @@ -48,6 +55,14 @@ angular.module('portainer.azure').controller('AzureCreateContainerInstanceContro }); }; + function validateForm(model) { + if (!model.Ports || !model.Ports.length || model.Ports.every((port) => !port.host || !port.container)) { + return 'At least one port binding is required'; + } + + return null; + } + function updateResourceGroupsAndLocations(subscription, resourceGroups, providers) { $scope.state.selectedResourceGroup = resourceGroups[subscription.Id][0]; $scope.resourceGroups = resourceGroups[subscription.Id]; diff --git a/app/azure/views/containerinstances/create/createcontainerinstance.html b/app/azure/views/containerinstances/create/createcontainerinstance.html index 2e73b0638..477fb845a 100644 --- a/app/azure/views/containerinstances/create/createcontainerinstance.html +++ b/app/azure/views/containerinstances/create/createcontainerinstance.html @@ -7,7 +7,7 @@
-
+
Azure settings
@@ -53,7 +53,14 @@
- + +
+
+
+
+
+

Name is required.

+
@@ -61,7 +68,14 @@
- + +
+
+
+
+
+

Image is required.

+
@@ -153,6 +167,7 @@ Deploy the container Deployment in progress... + {{ state.formValidationError }}