170 lines
6.4 KiB
JavaScript
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; |