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-worker/docker/synapse.js
2022-11-10 12:01:10 +01:00

170 lines
6.4 KiB
JavaScript

const Docker = require('dockerode');
const docker = new Docker({
'socketPath': '/home/docker.sock'
//'socketPath': '/var/run/docker.sock'
});
const fs = require("fs");
const path = require("path");
const SSHPATH = process.env.SSHPATH;
const DOCKERIMAGE = "mcr.microsoft.com/azure-cli";
const PROJECT_PATH = process.env.PROJECT_PATH;
const pause = function(provision) {
if ( provision.scenario !== 'azqmi-synapse' ) {
console.log(`SynapseAzCLI# provision (${provision._id}) is not AZ SYNAPSE`);
return {"message": `Won't do anything, provision (${provision._id}) is not AZ SYNAPSE`};
}
if ( !provision.outputs ) {
console.log(`SynapseAzCLI# provision (${provision._id}) AZ SYNAPSE has NO outputs`);
return {"message": `Won't do anything, provision (${provision._id}) AZ SYNAPSE has NO outputs`};
}
const name = `qmi-synpause-${provision._id}`;
console.log(`SynapseAzCLI# Pause Synapse: ${name}`);
var processStream = fs.createWriteStream(provision.logFile, {flags:'a'});
var exec = ['synpause', provision.outputs.Synapse_WS_ID, provision.outputs.Synapse_Database];
console.log('SynapseAzCLI# Pause Synapse: exec: '+exec.join(" "));
return docker.run(DOCKERIMAGE, exec, processStream, {
//"Env": vars.envs,
"name": name,
//"WorkingDir": "/app",
"HostConfig": {
"Binds": [
`${provision.path}/synpause.sh:/bin/synpause`,
`${SSHPATH}:/root/.ssh`
]
}
}).then(function(data) {
var container = data[1];
console.log(`SynapseAzCLI# Pause Synapse: '${name}' (${container.id}) has finished with code: ${data[0].StatusCode}`);
return container.remove().then(function(){
console.log(`SynapseAzCLI# Pause Synapse: Container '${name}' removed!`);
return data[0].StatusCode;
});
}).then(async function(statusCode) {
return {"output": fs.readFileSync(provision.logFile), "statusCode": statusCode};
});
}
const resume = function(provision) {
if ( provision.scenario !== 'azqmi-synapse' ) {
console.log(`SynapseAzCLI# provision (${provision._id}) is not AZ SYNAPSE`);
return {"message": `Won't do anything, provision (${provision._id}) is not AZ SYNAPSE`};
}
if ( !provision.outputs ) {
console.log(`SynapseAzCLI# provision (${provision._id}) AZ SYNAPSE has NO outputs`);
return {"message": `Won't do anything, provision (${provision._id}) AZ SYNAPSE has NO outputs`};
}
const name = `qmi-synresume-${provision._id}`;
console.log(`SynapseAzCLI# Resume Synapse: ${name}`);
var processStream = fs.createWriteStream(provision.logFile, {flags:'a'});
var exec = ['synresume', provision.outputs.Synapse_WS_ID, provision.outputs.Synapse_Database];
console.log('SynapseAzCLI# Resume Synapse: exec: '+exec.join(" "));
return docker.run(DOCKERIMAGE, exec, processStream, {
//"Env": vars.envs,
"name": name,
//"WorkingDir": "/app",
"HostConfig": {
"Binds": [
`${provision.path}/synresume.sh:/bin/synresume`,
`${SSHPATH}:/root/.ssh`
]
}
}).then(function(data) {
var container = data[1];
console.log(`SynapseAzCLI# Resume Synapse: '${name}' (${container.id}) has finished with code: ${data[0].StatusCode}`);
return container.remove().then(function(){
console.log(`SynapseAzCLI# Resume Synapse: Container '${name}' removed!`);
return data[0].StatusCode;
});
}).then(async function(statusCode) {
return {"output": fs.readFileSync(provision.logFile), "statusCode": statusCode};
});
}
const copySnapshots = function(data) {
let snapName = data.snapName;
let regions = data.regions;
const name = `qmi-copysnaps`;
console.log(`CopySnapsAzCLI# container: ${name}`);
var processStream = fs.createWriteStream("/logs/general/qmi-snapshots.log", {flags:'a'});
var exec = ['copy-snapshots-to-sa', snapName, regions];
console.log('CopySnapsAzCLI# exec: '+exec.join(" "));
let scriptPath = path.join(PROJECT_PATH,'..');
return docker.run(DOCKERIMAGE, exec, processStream, {
//"Env": vars.envs,
"name": name,
//"WorkingDir": "/app",
"HostConfig": {
"Binds": [
`${scriptPath}/copy-snapshots-to-sa.sh:/bin/copy-snapshots-to-sa`,
`${SSHPATH}:/root/.ssh`
]
}
}).then(function(data) {
var container = data[1];
console.log(`CopySnapsAzCLI# '${name}' (${container.id}) has finished with code: ${data[0].StatusCode}`);
return container.remove().then(function(){
console.log(`CopySnapsAzCLI# Container '${name}' removed!`);
return data[0].StatusCode;
});
}).then(async function(statusCode) {
return {"output": fs.readFileSync("/logs/general/qmi-snapshots.log"), "statusCode": statusCode};
});
}
const checkCopySnapshots = function(data) {
let snapName = data.snapName;
const name = `qmi-checkcopysnaps`;
console.log(`CheckCopySnapsAzCLI# container: ${name}`);
var processStream = fs.createWriteStream("/logs/general/qmi-snapshots.log", {flags:'a'});
var exec = ['checkcopystatus', snapName];
console.log('CheckCopySnapsAzCLI# exec: '+exec.join(" "));
let scriptPath = path.join(PROJECT_PATH,'..');
return docker.run(DOCKERIMAGE, exec, processStream, {
//"Env": vars.envs,
"name": name,
//"WorkingDir": "/app",
"HostConfig": {
"Binds": [
`${scriptPath}/checkcopystatus.sh:/bin/checkcopystatus`,
`${SSHPATH}:/root/.ssh`
]
}
}).then(function(data) {
var container = data[1];
console.log(`CheckCopySnapsAzCLI# '${name}' (${container.id}) has finished with code: ${data[0].StatusCode}`);
return container.remove().then(function(){
console.log(`CheckCopySnapsAzCLI# Container '${name}' removed!`);
return data[0].StatusCode;
});
}).then(async function(statusCode) {
return {"output": fs.readFileSync("/logs/general/qmi-snapshots.log"), "statusCode": statusCode};
});
}
module.exports.pause = pause;
module.exports.resume = resume;
module.exports.copySnapshots = copySnapshots;
module.exports.checkCopySnapshots = checkCopySnapshots;