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
This commit is contained in:
parent
8bf69bb0f9
commit
3e65e337ee
@ -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,
|
||||
|
@ -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);
|
||||
|
@ -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');
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -58,15 +58,15 @@
|
||||
<span class="hz-icon-required fa fa-asterisk"></span>
|
||||
</label>
|
||||
<input name="volume-size"
|
||||
min="0"
|
||||
min="{$ ctrl.minVolumeSize $}"
|
||||
id="volume-size"
|
||||
type="number"
|
||||
class="form-control"
|
||||
ng-model="model.newInstanceSpec.vol_size"
|
||||
ng-pattern="/^[0-9]+$/"
|
||||
ng-required="true"
|
||||
validate-number-min="{$ ctrl.minVolumeSize $}">
|
||||
<span class="help-block" ng-show="launchInstanceSourceForm['volume-size'].$invalid">
|
||||
ng-required="true">
|
||||
<span class="help-block"
|
||||
ng-show="launchInstanceSourceForm['volume-size'].$invalid">
|
||||
{$ launchInstanceSourceForm['volume-size'].$error.validateNumberMin ? ctrl.minVolumeSizeError : ctrl.volumeSizeError $}
|
||||
</span>
|
||||
</div>
|
||||
|
Loading…
Reference in New Issue
Block a user