This repository has been archived on 2025-12-25. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
qmi-cloud/qmi-cloud-common/awscli.js
2023-02-06 13:44:57 +01:00

131 lines
4.5 KiB
JavaScript

const AWS = require("aws-sdk");
const db = require("./mongo");
const utils = require("./utils");
function _getRgName(provision) {
let rgName = provision.scenario.toUpperCase();
rgName = rgName.replace(/AZQMI/g, 'QMI');
rgName = rgName + "-" + provision._id.toString();
return rgName;
}
function _getRegion(provision) {
let region = "eu-west-1";
if ( provision.deployOpts.location === 'East US') {
region = "us-east-1";
} else if ( provision.deployOpts.location === 'Southeast Asia' ) {
region = "ap-southeast-1";
}
return region;
}
function deallocate(provision, triggerUserId, isSendEmailAfter) {
let rgName = _getRgName(provision);
let region = _getRegion(provision);
console.log("AWSCLI# Stopping EC2s for resource group: "+rgName);
return new Promise((resolve, reject) => {
var ec2 = new AWS.EC2({apiVersion: '2016-11-15', region: region});
var params = {
DryRun: false,
Filters: [
{
Name: 'tag:Name',
Values: [ `fort-${provision._id}` ]
},
]
};
ec2.describeInstances(params, async function (err, data) {
if (err) {
console.log("AWSCLI# ERROR describing EC2s: "+rgName, err.stack);
await db.provision.update(provision._id.toString(), {"statusVms": "Running" });
reject(err);
} else if (data && data.Reservations && data.Reservations.length) {
var ec2Ids = data.Reservations[0].Instances.map(ec2=> ec2.InstanceId);
console.log("AWSCLI# Stopping Ec2s ids...", ec2Ids);
params = {
DryRun: false,
InstanceIds: ec2Ids
};
ec2.stopInstances(params, async function(err1, data) {
if (err1) {
console.log("AWSCLI# ERROR stopping EC2s: "+rgName, err1.stack);
await db.provision.update(provision._id.toString(), {"statusVms": "Running" });
reject(err1);
} else {
console.log("AWSCLI# Ec2s stopped!");
await utils.afterStopVms( provision, triggerUserId, isSendEmailAfter );
resolve(data);
}
});
} else {
console.log("AWSCLI# No Ec2 Instances found: "+rgName);
resolve(data);
}
});
});
}
function start(provision, triggerUserId) {
let rgName = _getRgName(provision);
let region = _getRegion(provision);
console.log("AWSCLI# Stopping EC2s for resource group: "+rgName);
return new Promise((resolve, reject) => {
var ec2 = new AWS.EC2({apiVersion: '2016-11-15', region: region});
var params = {
DryRun: false,
Filters: [
{
Name: 'tag:Name',
Values: [ `fort-${provision._id}` ]
},
]
};
ec2.describeInstances(params, async function (err, data) {
if (err) {
console.log("AWSCLI# ERROR describing EC2s: "+rgName, err.stack);
await db.provision.update(provision._id.toString(), {"statusVms": "Stopped" });
reject(err);
} else if (data && data.Reservations && data.Reservations.length) {
var ec2Ids = data.Reservations[0].Instances.map(ec2=> ec2.InstanceId);
console.log("AWSCLI# Starting Ec2s ids...", ec2Ids);
params = {
DryRun: false,
InstanceIds: ec2Ids
};
ec2.startInstances(params, async function(err1, data) {
if (err1) {
console.log("AWSCLI# ERROR starting EC2s: "+rgName, err1.stack);
await db.provision.update(provision._id.toString(), {"statusVms": "Stopped" });
reject(err1);
} else {
console.log("AWSCLI# Ec2s started!");
await utils.afterStartVms( provision, triggerUserId );
resolve(data);
}
});
} else {
console.log("AWSCLI# No Ec2 Instances found: "+rgName);
resolve(data);
}
});
});
}
module.exports.deallocate = deallocate;
module.exports.start = start;