create snaps nodejs

This commit is contained in:
Manuel Romero
2025-02-07 12:15:59 +01:00
parent ccc1534444
commit b954da0d0e
3 changed files with 97 additions and 2 deletions

View File

@@ -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;

View File

@@ -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;

View File

@@ -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: