Fix
This commit is contained in:
@@ -24,8 +24,9 @@ async function asyncForEach(array, callback) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function deallocate(resourceGroupName, cb){
|
function deallocate(resourceGroupName, cb) {
|
||||||
try {
|
try {
|
||||||
|
console.log("Deallocating VMs for resource group: "+resourceGroupName);
|
||||||
auth(async function(computeClient){
|
auth(async function(computeClient){
|
||||||
let finalResult = await computeClient.virtualMachines.list(resourceGroupName);
|
let finalResult = await computeClient.virtualMachines.list(resourceGroupName);
|
||||||
let out = [];
|
let out = [];
|
||||||
@@ -33,9 +34,11 @@ function deallocate(resourceGroupName, cb){
|
|||||||
let res = await computeClient.virtualMachines.deallocate(resourceGroupName, vm.name);
|
let res = await computeClient.virtualMachines.deallocate(resourceGroupName, vm.name);
|
||||||
out.push(res);
|
out.push(res);
|
||||||
});
|
});
|
||||||
|
console.log("All VMs DEALLOCATED for resource group: "+resourceGroupName);
|
||||||
cb(null, out);
|
cb(null, out);
|
||||||
})
|
})
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
console.log("Error deallocating VMs for resource group: "+resourceGroupName);
|
||||||
cb(err, null);
|
cb(err, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -43,6 +46,7 @@ function deallocate(resourceGroupName, cb){
|
|||||||
|
|
||||||
function start(resourceGroupName, cb){
|
function start(resourceGroupName, cb){
|
||||||
try {
|
try {
|
||||||
|
console.log("Starting VMs for resource group: "+resourceGroupName);
|
||||||
auth(async function(computeClient){
|
auth(async function(computeClient){
|
||||||
let finalResult = await computeClient.virtualMachines.list(resourceGroupName);
|
let finalResult = await computeClient.virtualMachines.list(resourceGroupName);
|
||||||
let out = [];
|
let out = [];
|
||||||
@@ -50,9 +54,11 @@ function start(resourceGroupName, cb){
|
|||||||
let res = await computeClient.virtualMachines.start(resourceGroupName, vm.name);
|
let res = await computeClient.virtualMachines.start(resourceGroupName, vm.name);
|
||||||
out.push(res);
|
out.push(res);
|
||||||
});
|
});
|
||||||
|
console.log("All VMs RUNNING for resource group: "+resourceGroupName);
|
||||||
cb(null,out);
|
cb(null,out);
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
console.log("Error starting VMs for resource group: "+resourceGroupName);
|
||||||
cb(err, null);
|
cb(err, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,10 @@ mongoose.set('useFindAndModify', false);
|
|||||||
//mongoose.set('debug', true)
|
//mongoose.set('debug', true)
|
||||||
|
|
||||||
const provisionSchema = new mongoose.Schema({
|
const provisionSchema = new mongoose.Schema({
|
||||||
userId: String,
|
userId: {
|
||||||
|
type: String,
|
||||||
|
index: true
|
||||||
|
},
|
||||||
created: {
|
created: {
|
||||||
type: Date,
|
type: Date,
|
||||||
default: Date.now
|
default: Date.now
|
||||||
@@ -31,6 +34,10 @@ const provisionSchema = new mongoose.Schema({
|
|||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false
|
default: false
|
||||||
},
|
},
|
||||||
|
statusVms: {
|
||||||
|
type: String,
|
||||||
|
default: "Running"
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
const express = require('express')
|
const express = require('express')
|
||||||
const router = express.Router()
|
const router = express.Router()
|
||||||
const db = require('../mongo.js');
|
const db = require('../mongo');
|
||||||
const passport = require('../passport');
|
const passport = require('../passport');
|
||||||
const fs = require('fs-extra');
|
const fs = require('fs-extra');
|
||||||
|
const azurecli = require('../azurecli');
|
||||||
|
|
||||||
|
|
||||||
import { queues, TF_APPLY_QUEUE, TF_APPLY_QSEOK_QUEUE, TF_DESTROY_QUEUE } from '../queues';
|
import { queues, TF_APPLY_QUEUE, TF_APPLY_QSEOK_QUEUE, TF_DESTROY_QUEUE } from '../queues';
|
||||||
@@ -196,11 +197,11 @@ router.delete('/:userId/provisions/:id', passport.ensureAuthenticatedAndIsMe, as
|
|||||||
try {
|
try {
|
||||||
const mongoJob = await db.provision.getSingle(req.params.id);
|
const mongoJob = await db.provision.getSingle(req.params.id);
|
||||||
if (!mongoJob){
|
if (!mongoJob){
|
||||||
return res.status(404).json({"msg": "Not found"});
|
return res.status(404).json({"msg": "Not found privision with id "+req.params.id});
|
||||||
}
|
}
|
||||||
const toDestroy = await db.destroy.get({"provId": req.params.id});
|
const toDestroy = await db.destroy.get({"provId": req.params.id});
|
||||||
const delDest = await db.destroy.del(toDestroy[0]._id.toString());
|
const delDest = await db.destroy.del(toDestroy[0]._id.toString());
|
||||||
const delProv = await db.provision.del(req.params.id);
|
const delProv = await db.provision.update(req.params.id, {"isDeleted": true});
|
||||||
|
|
||||||
//Move folder
|
//Move folder
|
||||||
fs.moveSync(`/provisions/${mongoJob.scenario}_${req.params.id}`, `/provisions/deleted/${mongoJob.scenario}_${req.params.id}`, { overwrite: true })
|
fs.moveSync(`/provisions/${mongoJob.scenario}_${req.params.id}`, `/provisions/deleted/${mongoJob.scenario}_${req.params.id}`, { overwrite: true })
|
||||||
@@ -211,6 +212,107 @@ router.delete('/:userId/provisions/:id', passport.ensureAuthenticatedAndIsMe, as
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @swagger
|
||||||
|
* /users/{userId}/provisions/{id}/deallocatevms:
|
||||||
|
* delete:
|
||||||
|
* description: Stop all VMs for this provision
|
||||||
|
* summary: Stop all VMs for this provision
|
||||||
|
* produces:
|
||||||
|
* - application/json
|
||||||
|
* parameters:
|
||||||
|
* - name: userId
|
||||||
|
* in: path
|
||||||
|
* type: string
|
||||||
|
* required: true
|
||||||
|
* - name: id
|
||||||
|
* in: path
|
||||||
|
* type: string
|
||||||
|
* required: true
|
||||||
|
* responses:
|
||||||
|
* 200:
|
||||||
|
* description: Provision
|
||||||
|
* 404:
|
||||||
|
* description: Not found
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
router.post('/:userId/provisions/:id/deallocatevms', passport.ensureAuthenticatedAndIsMe, async (req, res, next) => {
|
||||||
|
try {
|
||||||
|
let mongoJob = await db.provision.getSingle(req.params.id);
|
||||||
|
if (!mongoJob){
|
||||||
|
return res.status(404).json({"msg": "Not found privision with id "+req.params.id});
|
||||||
|
}
|
||||||
|
|
||||||
|
let rgName = mongoJob.scenario.toUpperCase();
|
||||||
|
rgName = rgName.replace(/AZQMI/g, 'QMI');
|
||||||
|
rgName = rgName + "-" + mongoJob._id.toString();
|
||||||
|
|
||||||
|
db.provision.update(req.params.id, {"statusVms": "Stopping"});
|
||||||
|
azurecli.deallocate(rgName, function(err, res){
|
||||||
|
if (err) {
|
||||||
|
db.provision.update(req.params.id, {"statusVms": "Error_Stopping"});
|
||||||
|
} else {
|
||||||
|
db.provision.update(req.params.id, {"statusVms": "Stopped"});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return res.json({"statusVms": "Stopping"});
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
next(error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @swagger
|
||||||
|
* /users/{userId}/provisions/{id}/startvms:
|
||||||
|
* delete:
|
||||||
|
* description: Start all VMs for this provision
|
||||||
|
* summary: Start all VMs for this provision
|
||||||
|
* produces:
|
||||||
|
* - application/json
|
||||||
|
* parameters:
|
||||||
|
* - name: userId
|
||||||
|
* in: path
|
||||||
|
* type: string
|
||||||
|
* required: true
|
||||||
|
* - name: id
|
||||||
|
* in: path
|
||||||
|
* type: string
|
||||||
|
* required: true
|
||||||
|
* responses:
|
||||||
|
* 200:
|
||||||
|
* description: Provision
|
||||||
|
* 404:
|
||||||
|
* description: Not found
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
router.post('/:userId/provisions/:id/startvms', passport.ensureAuthenticatedAndIsMe, async (req, res, next) => {
|
||||||
|
try {
|
||||||
|
let mongoJob = await db.provision.getSingle(req.params.id);
|
||||||
|
if (!mongoJob){
|
||||||
|
return res.status(404).json({"msg": "Not found privision with id "+req.params.id});
|
||||||
|
}
|
||||||
|
let rgName = mongoJob.scenario.toUpperCase();
|
||||||
|
rgName = rgName.replace(/AZQMI/g, 'QMI');
|
||||||
|
rgName = rgName + "-" + mongoJob._id.toString();
|
||||||
|
|
||||||
|
db.provision.update(req.params.id, {"statusVms": "Starting"});
|
||||||
|
azurecli.start(rgName, function(err, res){
|
||||||
|
if (err) {
|
||||||
|
db.provision.update(req.params.id, {"statusVms": "Error_Starting"});
|
||||||
|
} else {
|
||||||
|
db.provision.update(req.params.id, {"statusVms": "Running"});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return res.json({"statusVms": "Starting"});
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
next(error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @swagger
|
* @swagger
|
||||||
* /users/{userId}/destroyprovisions:
|
* /users/{userId}/destroyprovisions:
|
||||||
@@ -284,7 +386,7 @@ router.post('/:userId/destroyprovisions', passport.ensureAuthenticatedAndIsMe, a
|
|||||||
router.get('/:userId/provisions', passport.ensureAuthenticatedAndIsMe, async (req, res, next) => {
|
router.get('/:userId/provisions', passport.ensureAuthenticatedAndIsMe, async (req, res, next) => {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const result = await db.provision.get({"userId": req.params.userId});
|
const result = await db.provision.get({"userId": req.params.userId, "isDeleted": false});
|
||||||
return res.json(result);
|
return res.json(result);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
next(error);
|
next(error);
|
||||||
|
|||||||
Reference in New Issue
Block a user