Skip to content

Commit

Permalink
VOLAPI-82 volume names should be limited in size
Browse files Browse the repository at this point in the history
Reviewed by: Josh Wilsdon <jwilsdon@joyent.com>
Approved by: Josh Wilsdon <jwilsdon@joyent.com>
  • Loading branch information
Julien Gilli committed Jan 16, 2018
1 parent 768e026 commit 0a9d1dd
Show file tree
Hide file tree
Showing 8 changed files with 300 additions and 300 deletions.
6 changes: 3 additions & 3 deletions docs/api/README.md
Expand Up @@ -92,8 +92,8 @@ Volumes are be represented as objects that share a common set of properties:

* `name`: the volume's name. It must be unique for a given user. This is similar
to the `alias` property of VMAPI's VM objects. It must match the regular
expression `/^[a-zA-Z0-9][a-zA-Z0-9_\.\-]+$/`. There is no limit on the length
of a volume's name.
expression `/^[a-zA-Z0-9][a-zA-Z0-9_\.\-]+$/`. The maximum number of
characters for a volume name is 256.

* `type`: identifies the volume's type. There is currently one possible value
for this property: `tritonnfs`. Additional types can be added in the future,
Expand Down Expand Up @@ -259,7 +259,7 @@ A [volume object](#volume-objects) representing the volume with UUID `uuid`.

| Param | Type | Description |
| ------------- | ------------ | ---------------------------------------- |
| name | String | The desired name for the volume. If missing, a unique name for the current user will be generated |
| name | String | The desired name for the volume. If missing, a unique name for the current user will be generated. Names cannot be longer than 256 characters |
| owner_uuid | String | The UUID of the volume's owner. |
| size | Number | The desired storage capacity for that volume in mebibytes. Default value is 10240 mebibytes (10 gibibytes). |
| type | String | The type of volume. Currently only `'tritonnfs'` is supported. |
Expand Down
92 changes: 33 additions & 59 deletions lib/endpoints/volume-reservations.js
Expand Up @@ -5,7 +5,7 @@
*/

/*
* Copyright (c) 2017, Joyent, Inc.
* Copyright (c) 2018, Joyent, Inc.
*/

/*
Expand Down Expand Up @@ -80,52 +80,44 @@ function validateAddVolumeReservation(req, res, next) {
assert.object(res, 'res');
assert.func(next, 'next');

var validationErr;
var errs = [];
var invalidParamsErrs;
var MANDATORY_PARAM_NAMES;
var mandatoryParamsErrs;
var validationErrs = [];
var VALID_PARAM_NAMES =
['job_uuid', 'owner_uuid', 'volume_name', 'vm_uuid'];
var MANDATORY_PARAM_NAMES = VALID_PARAM_NAMES.slice();

var mandatoryParamsErrs =
MANDATORY_PARAM_NAMES = VALID_PARAM_NAMES.slice();

mandatoryParamsErrs =
validationUtils.checkMandatoryParamsPresence(req.params,
MANDATORY_PARAM_NAMES);
var invalidParamsErrs =
invalidParamsErrs =
validationUtils.checkInvalidParams(req.params, VALID_PARAM_NAMES);

validationErrs = validationErrs.concat(mandatoryParamsErrs);
validationErrs = validationErrs.concat(invalidParamsErrs);

if (req.params.owner_uuid !== undefined) {
validationErr =
uuidValidation.validateUuid(req.params.owner_uuid, 'owner');
if (validationErr !== undefined) {
validationErrs.push(validationErr);
}
errs = uuidValidation.validateUuid(req.params.owner_uuid, 'owner');
validationErrs = validationErrs.concat(errs);
}

if (req.params.volume_name !== undefined) {
validationErr =
volumesValidation.validateVolumeName(req.params.volume_name,
'volume_name');
if (validationErr !== undefined) {
validationErrs.push(validationErr);
}
errs = volumesValidation.validateVolumeName(req.params.volume_name,
'volume_name');
validationErrs = validationErrs.concat(errs);
}

if (req.params.vm_uuid !== undefined) {
validationErr =
uuidValidation.validateUuid(req.params.vm_uuid, 'VM');
if (validationErr !== undefined) {
validationErrs.push(validationErr);
}
errs = uuidValidation.validateUuid(req.params.vm_uuid, 'VM');
validationErrs = validationErrs.concat(errs);
}

if (req.params.job_uuid !== undefined) {
validationErr =
uuidValidation.validateUuid(req.params.job_uuid, 'job');
if (validationErr !== undefined) {
validationErrs.push(validationErr);
}
errs = uuidValidation.validateUuid(req.params.job_uuid, 'job');
validationErrs = validationErrs.concat(errs);
}

if (validationErrs.length > 0) {
Expand Down Expand Up @@ -403,7 +395,7 @@ function validateRemoveVolumeReservation(req, res, next) {
assert.object(res, 'res');
assert.func(next, 'next');

var validationErr;
var errs = [];
var validationErrs = [];
var VALID_PARAM_NAMES = ['uuid', 'owner_uuid'];
var MANDATORY_PARAM_NAMES = VALID_PARAM_NAMES.slice();
Expand All @@ -418,19 +410,13 @@ function validateRemoveVolumeReservation(req, res, next) {
validationErrs = validationErrs.concat(invalidParamsErrs);

if (req.params.uuid) {
validationErr =
uuidValidation.validateUuid(req.params.uuid, 'uuid');
if (validationErr !== undefined) {
validationErrs.push(validationErr);
}
errs = uuidValidation.validateUuid(req.params.uuid, 'uuid');
validationErrs = validationErrs.concat(errs);
}

if (req.params.owner_uuid) {
validationErr =
uuidValidation.validateUuid(req.params.owner_uuid, 'owner');
if (validationErr !== undefined) {
validationErrs.push(validationErr);
}
errs = uuidValidation.validateUuid(req.params.owner_uuid, 'owner');
validationErrs = validationErrs.concat(errs);
}

if (validationErrs.length > 0) {
Expand Down Expand Up @@ -529,7 +515,7 @@ function validateListVolumeReservations(req, res, next) {
assert.object(res, 'res');
assert.func(next, 'next');

var validationErr;
var errs = [];
var validationErrs = [];
var VALID_PARAM_NAMES =
['owner_uuid', 'volume_name', 'vm_uuid', 'job_uuid'];
Expand All @@ -545,36 +531,24 @@ function validateListVolumeReservations(req, res, next) {
validationErrs = validationErrs.concat(invalidParamsErrs);

if (req.params.owner_uuid) {
validationErr =
uuidValidation.validateUuid(req.params.owner_uuid, 'owner_uuid');
if (validationErr !== undefined) {
validationErrs.push(validationErr);
}
errs = uuidValidation.validateUuid(req.params.owner_uuid, 'owner_uuid');
validationErrs = validationErrs.concat(errs);
}

if (req.params.volume_name) {
validationErr =
volumesValidation.validateVolumeName(req.params.volume_name,
'volume_name');
if (validationErr !== undefined) {
validationErrs.push(validationErr);
}
errs = volumesValidation.validateVolumeName(req.params.volume_name,
'volume_name');
validationErrs = validationErrs.concat(errs);
}

if (req.params.vm_uuid) {
validationErr =
uuidValidation.validateUuid(req.params.vm_uuid, 'vm_uuid');
if (validationErr !== undefined) {
validationErrs.push(validationErr);
}
errs = uuidValidation.validateUuid(req.params.vm_uuid, 'vm_uuid');
validationErrs = validationErrs.concat(errs);
}

if (req.params.job_uuid) {
validationErr =
uuidValidation.validateUuid(req.params.job_uuid, 'job_uuid');
if (validationErr !== undefined) {
validationErrs.push(validationErr);
}
errs = uuidValidation.validateUuid(req.params.job_uuid, 'job_uuid');
validationErrs = validationErrs.concat(errs);
}

if (validationErrs.length > 0) {
Expand Down

0 comments on commit 0a9d1dd

Please sign in to comment.