create snaps nodejs
This commit is contained in:
@@ -222,6 +222,51 @@ async function deleteDNSRecord(provision, type = "CNAME"){
|
||||
return await dnsClient.recordSets.deleteMethod(DNS_RESOURCE_GROUP, DNS_ZONE_NAME, rgName, type );
|
||||
}
|
||||
|
||||
async function createSnapshots(provision) {
|
||||
|
||||
const computeClient = await _getClient(provision.scenario);
|
||||
const resourceGroupName = _getRgName(provision);
|
||||
const disks = await computeClient.disks.listByResourceGroup(resourceGroupName);
|
||||
const now = Date.now();
|
||||
try {
|
||||
var out = [];
|
||||
await asyncForEach(disks, async function(disk) {
|
||||
|
||||
console.log(`AzureCLI# Start creating snapshot for disk: ${disk.name}: ${disk.id}`);
|
||||
|
||||
// Define snapshot parameters
|
||||
let snapshotParams = {
|
||||
location: disk.location, // Example: "eastus"
|
||||
creationData: {
|
||||
createOption: "Copy", // Creates a snapshot from an existing disk
|
||||
sourceResourceId: `/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${resourceGroupName}/providers/Microsoft.Compute/disks/${disk.name}`
|
||||
}
|
||||
};
|
||||
|
||||
let snapshotName = `Snap_${disk.name}_${provision._id}_${now}`
|
||||
console.log(`AzureCLI# creating.... ${snapshotName}`);
|
||||
let snapshot = await computeClient.snapshots.beginCreateOrUpdateAndWait(
|
||||
resourceGroupName,
|
||||
snapshotName,
|
||||
snapshotParams
|
||||
);
|
||||
|
||||
db.snapshot.add({"resourceID": snapshot.id, "provision": provision._id});
|
||||
out.put(snapshot);
|
||||
|
||||
console.log(`AzureCLI# snapshot: ${snapshotName} is DONE!`);
|
||||
|
||||
});
|
||||
|
||||
return out;
|
||||
|
||||
} catch (error) {
|
||||
console.error("Error creating snapshot:", error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
module.exports.start = start;
|
||||
module.exports.deallocate = deallocate;
|
||||
module.exports.getResourceGroupVms = getResourceGroupVms;
|
||||
@@ -230,4 +275,5 @@ module.exports.getAllVmsNext = getAllVmsNext;
|
||||
module.exports.updateVmsTags = updateVmsTags;
|
||||
module.exports.getDNSRecords = getDNSRecords;
|
||||
module.exports.createDNSRecord = createDNSRecord;
|
||||
module.exports.deleteDNSRecord = deleteDNSRecord
|
||||
module.exports.deleteDNSRecord = deleteDNSRecord;
|
||||
module.exports.createSnapshots = createSnapshots;
|
||||
|
||||
@@ -65,8 +65,19 @@ async function startDb(provId, userId) {
|
||||
}
|
||||
}
|
||||
|
||||
async function createSnapshots(provId) {
|
||||
try {
|
||||
let provision = await db.provision.getById(provId);
|
||||
if ( !provision ) return;
|
||||
return azurecli.createSnapshots(provision);
|
||||
} catch (err) {
|
||||
console.log("CLI# ERROR createSnapshots", err);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports.deallocate = deallocate;
|
||||
module.exports.start = start;
|
||||
module.exports.updateVmsTags = updateVmsTags;
|
||||
module.exports.stopDb = stopDb;
|
||||
module.exports.startDb = startDb;
|
||||
module.exports.startDb = startDb;
|
||||
module.exports.createSnapshots = createSnapshots;
|
||||
@@ -3,6 +3,7 @@ const router = express.Router()
|
||||
const db = require('qmi-cloud-common/mongo');
|
||||
const passport = require('../passport-okta');
|
||||
const fs = require('fs-extra');
|
||||
const cli = require('qmi-cloud-common/cli');
|
||||
|
||||
|
||||
const MYQUEUES = require('qmi-cloud-common/queues');
|
||||
@@ -503,6 +504,43 @@ router.post('/:id/createSnaps', passport.ensureAuthenticatedAndAdmin, async (req
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* @swagger
|
||||
* /provisions/{id}/createSnaps2:
|
||||
* post:
|
||||
* description: Create Snap from all disks of this provision
|
||||
* summary: Create Snap from all disks of this provision
|
||||
* tags:
|
||||
* - admin
|
||||
* produces:
|
||||
* - application/json
|
||||
* parameters:
|
||||
* - name: id
|
||||
* in: path
|
||||
* type: string
|
||||
* required: true
|
||||
* - name: target_rg
|
||||
* in: query
|
||||
* required: false
|
||||
* type: string
|
||||
* responses:
|
||||
* 200:
|
||||
* description: OK
|
||||
* 404:
|
||||
* description: Not found
|
||||
*
|
||||
*/
|
||||
router.post('/:id/createSnaps2', passport.ensureAuthenticatedAndAdmin, async (req, res, next) => {
|
||||
try {
|
||||
|
||||
const snaps = await cli.createSnapshots(req.params.id);
|
||||
return res.json(snaps);
|
||||
|
||||
} catch (error) {
|
||||
next(error);
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* @swagger
|
||||
* /provisions/{id}/updatetagsvms:
|
||||
|
||||
Reference in New Issue
Block a user