From 3e65e337ee5c707a6f27a7f406d76dab751cb8b2 Mon Sep 17 00:00:00 2001 From: Rob Cresswell Date: Mon, 11 Apr 2016 14:38:31 +0100 Subject: [PATCH] Improve Volume selection handling in LI The code for updating the Volume Size error in the Launch Instance source step appears to be incorrect. This patch updates and improves the handling to also bump the current value to the minimum for the chosen image (rather than just a form field error). Also changed the default to create a new volume, as it was advised that this is the more common workflow. Change-Id: Iecb679d967b2285776278f23018e4151ebb18df2 Closes-Bug: 1568866 --- .../launch-instance-model.service.js | 2 +- .../launch-instance-model.service.spec.js | 2 +- .../launch-instance/source/source.controller.js | 14 +++++++------- .../source/source.controller.spec.js | 6 +++--- .../workflow/launch-instance/source/source.html | 12 ++++++------ 5 files changed, 18 insertions(+), 18 deletions(-) diff --git a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/launch-instance-model.service.js b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/launch-instance-model.service.js index fee6bda398..4922a14834 100644 --- a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/launch-instance-model.service.js +++ b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/launch-instance-model.service.js @@ -178,7 +178,7 @@ source_type: null, source: [], // REQUIRED for JS logic - vol_create: false, + vol_create: true, // May be null vol_device_name: 'vda', vol_delete_on_instance_delete: false, diff --git a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/launch-instance-model.service.spec.js b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/launch-instance-model.service.spec.js index 51d4813033..79b3c611e4 100644 --- a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/launch-instance-model.service.spec.js +++ b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/launch-instance-model.service.spec.js @@ -514,7 +514,7 @@ }); it('sets volume options appropriately', function() { - expect(model.newInstanceSpec.vol_create).toBe(false); + expect(model.newInstanceSpec.vol_create).toBe(true); expect(model.newInstanceSpec.vol_device_name).toBe('vda'); expect(model.newInstanceSpec.vol_delete_on_instance_delete).toBe(false); expect(model.newInstanceSpec.vol_size).toBe(1); diff --git a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/source/source.controller.js b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/source/source.controller.js index 75387a8780..6fd128bc85 100644 --- a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/source/source.controller.js +++ b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/source/source.controller.js @@ -59,7 +59,6 @@ /*eslint-disable max-len */ ctrl.bootSourceTypeError = gettext('Volumes can only be attached to 1 active instance at a time. Please either set your instance count to 1 or select a different source type.'); /*eslint-enable max-len */ - ctrl.volumeSizeError = gettext('Volume size is required and must be an integer'); // toggle button label/value defaults ctrl.toggleButtonOptions = [ @@ -399,7 +398,7 @@ function updateBootSourceSelection(selectedSource) { ctrl.currentBootSource = selectedSource; - $scope.model.newInstanceSpec.vol_create = false; + $scope.model.newInstanceSpec.vol_create = true; $scope.model.newInstanceSpec.vol_delete_on_instance_delete = false; changeBootSource(selectedSource); validateBootSourceType(); @@ -465,14 +464,15 @@ var imageGb = source.size * 1e-9; var imageDisk = source.min_disk; ctrl.minVolumeSize = Math.ceil(Math.max(imageGb, imageDisk)); - + if ($scope.model.newInstanceSpec.vol_size < ctrl.minVolumeSize) { + $scope.model.newInstanceSpec.vol_size = ctrl.minVolumeSize; + } var volumeSizeText = gettext('The volume size must be at least %(minVolumeSize)s GB'); var volumeSizeObj = { minVolumeSize: ctrl.minVolumeSize }; - ctrl.minVolumeSizeError = interpolate(volumeSizeText, volumeSizeObj, true); + ctrl.volumeSizeError = interpolate(volumeSizeText, volumeSizeObj, true); } else { - /*eslint-disable no-undefined */ - ctrl.minVolumeSize = undefined; - /*eslint-enable no-undefined */ + ctrl.minVolumeSize = 0; + ctrl.volumeSizeError = gettext('Volume size is required and must be an integer'); } } diff --git a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/source/source.controller.spec.js b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/source/source.controller.spec.js index 782af931be..7502dbe0bb 100644 --- a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/source/source.controller.spec.js +++ b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/source/source.controller.spec.js @@ -232,7 +232,7 @@ ctrl.updateBootSourceSelection(selSource); expect(ctrl.currentBootSource).toEqual('image'); - expect(scope.model.newInstanceSpec.vol_create).toBe(false); + expect(scope.model.newInstanceSpec.vol_create).toBe(true); expect(scope.model.newInstanceSpec.vol_delete_on_instance_delete).toBe(false); // check table data @@ -303,14 +303,14 @@ } ); - it('should set minVolumeSize to undefined if boot source is not image', function() { + it('should set minVolumeSize to 0 if boot source is not image', function() { var selSource = 'volume'; ctrl.updateBootSourceSelection(selSource); expect(ctrl.currentBootSource).toEqual('volume'); scope.$apply(); - expect(ctrl.minVolumeSize).toBeUndefined(); + expect(ctrl.minVolumeSize).toBe(0); }); }); }); diff --git a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/source/source.html b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/source/source.html index 2c28fea1c2..1f31f56d6e 100644 --- a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/source/source.html +++ b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/source/source.html @@ -58,17 +58,17 @@ - - {$ launchInstanceSourceForm['volume-size'].$error.validateNumberMin ? ctrl.minVolumeSizeError : ctrl.volumeSizeError $} - + ng-required="true"> + + {$ launchInstanceSourceForm['volume-size'].$error.validateNumberMin ? ctrl.minVolumeSizeError : ctrl.volumeSizeError $} +