Skip to content

Commit

Permalink
refactor: Improve granularity of stack deployment error codes
Browse files Browse the repository at this point in the history
  • Loading branch information
medikoo committed May 19, 2021
1 parent 4e49c9e commit 8057cca
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 2 deletions.
23 changes: 22 additions & 1 deletion lib/plugins/aws/lib/monitorStack.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,17 @@ const ServerlessError = require('../../../serverless-error');

const validStatuses = new Set(['CREATE_COMPLETE', 'UPDATE_COMPLETE', 'DELETE_COMPLETE']);

const normalizerPattern = /(?<!^)([A-Z])/g;
const resourceTypePattern = /^(?<domain>[^:]+)::(?<service>[^:]+)(?:::(?<method>.+))?$/;
const resourceTypeToErrorCodePostfix = (resourceType) => {
const { domain, service, method } = resourceType.match(resourceTypePattern).groups;
if (domain !== 'AWS') return `_${domain.replace(normalizerPattern, '_$1').toUpperCase()}`;
return `_${service.replace(normalizerPattern, '_$1')}_${method.replace(
normalizerPattern,
'_$1'
)}`.toUpperCase();
};

module.exports = {
async checkStackProgress(
action,
Expand Down Expand Up @@ -91,7 +102,17 @@ module.exports = {
let errorMessage = 'An error occurred: ';
errorMessage += `${stackLatestError.LogicalResourceId} - `;
errorMessage += `${stackLatestError.ResourceStatusReason}.`;
throw new ServerlessError(errorMessage, 'STACK_OPERATION_FAILURE');
const errorCode = (() => {
if (
stackLatestError.ResourceStatusReason.startsWith('Properties validation failed')
) {
return `AWS_STACK_${action.toUpperCase()}_VALIDATION_ERROR`;
}
return `AWS_STACK_${action.toUpperCase()}${resourceTypeToErrorCodePostfix(
stackLatestError.ResourceType
)}_${stackLatestError.ResourceStatus}`;
})();
throw new ServerlessError(errorMessage, errorCode);
}
},
(e) => {
Expand Down
2 changes: 1 addition & 1 deletion test/unit/lib/plugins/aws/lib/monitorStack.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -407,7 +407,7 @@ describe('monitorStack', () => {
EventId: '1e2f3g4h',
StackName: 'new-service-dev',
LogicalResourceId: 'mochaS3',
ResourceType: 'S3::Bucket',
ResourceType: 'AWS::S3::Bucket',
Timestamp: new Date(),
ResourceStatus: 'CREATE_FAILED',
ResourceStatusReason: 'Bucket already exists',
Expand Down

0 comments on commit 8057cca

Please sign in to comment.