UNPKG

briareus

Version:

Briareus assists with Feature Branch deploys to ECS

91 lines (78 loc) 2.85 kB
'use strict' const express = require('express'); const async = require('async'); const taskDefinitionValidator = require('../../taskDefinitionValidator'); const mw = require('../middleware'); const Variant = require('../variant'); const persistance = require('../persistance'); const errors = require('../errors'); module.exports = function (service) { let controller = express.Router(); controller.use(mw.auth(service)); /************************ * List Variants ( Feature Branches ) *************************/ controller.get('/', (req, res, next) => { persistance.listVariants((err, results) => { if (err) return next(err); res.status(200).json({ data: results.Items }); }) }); /************************ * Create Variant *************************/ function preventSlugConflict(req, res, next) { let slug = req.body.slug; persistance.getVariant(slug, (err, data) => { if (err) return next(err); if (data) return next(new errors.InputValidationError(`Variant with slug "${slug}" already exists`)); next(); }); } controller.post('/', [mw.validate(service, 'variant'), preventSlugConflict], (req, res, next) => { let ctx = req.context; let data = req.body; data.ecsClusterArn = service.config.get('ecsClusterArn'); data.baseHostname = service.config.get('baseHostname'); data.hostedZoneId = service.config.get('hostedZoneId'); data.kmsKeyArn = service.config.get('kmsKeyArn'); data.taskExecutionRoleArn = service.config.get('taskExecutionRoleArn'); data.variantsLogGroup = service.config.get('variantsLogGroup'); data.alb = { arn: service.config.get('albArn') }; let variant = new Variant(ctx, data); async.series([ (next) => { variant.save((err) => { if (err) return next(err); res.status(201).json({ data: variant.data }); next(); }) }, (next) => variant.provision(next), ], (err) => { // If we have a failure, just log it. This action was async from request flow so nothing to return to client if (err) return ctx.log.error({ err }, 'Variant provisioning failed'); ctx.log.info(`Variant provisioning complete: ${variant.data.endpoint.host}`); }); }); /************************ * Get Variant *************************/ controller.get('/:slug', mw.findVariant(service), (req, res, next) => { res.status(200).json({ data: req.variant }); }); /************************ * Delete Variant *************************/ controller.delete('/:slug', mw.findVariant(service), (req, res, next) => { let ctx = req.context; let variant = new Variant(ctx, req.variant); variant.destroy((err) => { if (err) return next(err); res.status(204).send(""); }); }); return controller; };