83 lines
3.0 KiB
JavaScript
83 lines
3.0 KiB
JavaScript
const Docker = require('dockerode');
|
|
const docker = new Docker({
|
|
'socketPath': '/home/docker.sock'
|
|
//'socketPath': '/var/run/docker.sock'
|
|
});
|
|
const fs = require("fs");
|
|
const DOCKERIMAGE = "mcr.microsoft.com/azure-powershell";
|
|
//const cmd = `docker run --net=host -w /myapp -v ${FOLDER}:/myapp mcr.microsoft.com/azure-powershell pwsh appgw.ps1 -ApplicationGatewayName ${appGwName}`;
|
|
|
|
const appgateway = function( mongoJob, scenario ) {
|
|
|
|
if ( mongoJob.status === 'provisioned' && scenario.isWafPolicyAppGw ) {
|
|
var provision_id = mongoJob._id.toString();
|
|
var processStream = fs.createWriteStream(mongoJob.logFile, {flags:'a'});
|
|
var name = 'qmi-azureps-appgw-'+provision_id;
|
|
console.log(`AzurePS: will spin up container: ${name}`);
|
|
|
|
return docker.run(DOCKERIMAGE, ['pwsh', 'appgw.ps1', "-ProvisionId", provision_id ], processStream, {
|
|
"name": name,
|
|
"WorkingDir": "/myapp",
|
|
"HostConfig": {
|
|
"Binds": [
|
|
`${mongoJob.path}/shell:/myapp`
|
|
],
|
|
"NetworkMode": "host"
|
|
}
|
|
}).then(function(data) {
|
|
var output = data[0];
|
|
var container = data[1];
|
|
console.log(`AzurePS: ${name} (${container.id}) has finished with code: ${output.StatusCode}`);
|
|
return container.remove();
|
|
}).then(function() {
|
|
console.log(`AzurePS: ${name} removed!`);
|
|
return Promise.resolve(mongoJob);
|
|
});
|
|
|
|
} else {
|
|
return Promise.resolve(mongoJob);
|
|
}
|
|
|
|
};
|
|
|
|
const createimage = function( mongoJob, scenario ) {
|
|
|
|
if ( mongoJob.status === 'provisioned' && scenario.newImageName ) {
|
|
var provision_id = mongoJob._id.toString();
|
|
var processStream = fs.createWriteStream(mongoJob.logFile, {flags:'a'});
|
|
var name = 'qmi-azureps-createimage-'+provision_id;
|
|
|
|
let rgName = mongoJob.scenario.toUpperCase();
|
|
rgName = rgName + "-" + provision_id;
|
|
|
|
let imageName = scenario.newImageName + "-" + new Date().getTime();
|
|
|
|
console.log(`AzurePS: will spin up container: ${name}`);
|
|
|
|
return docker.run(DOCKERIMAGE, ['pwsh', 'createimage.ps1', "-rgName", rgName, "-imageName", imageName ], processStream, {
|
|
"name": name,
|
|
"WorkingDir": "/myapp",
|
|
"HostConfig": {
|
|
"Binds": [
|
|
`${mongoJob.path}/shell:/myapp`
|
|
],
|
|
"NetworkMode": "host"
|
|
}
|
|
}).then(function(data) {
|
|
var output = data[0];
|
|
var container = data[1];
|
|
console.log(`AzurePS: ${name} (${container.id}) has finished with code: ${output.StatusCode}`);
|
|
return container.remove();
|
|
}).then(function() {
|
|
console.log(`AzurePS: ${name} removed!`);
|
|
return Promise.resolve(mongoJob);
|
|
});
|
|
|
|
} else {
|
|
return Promise.resolve(mongoJob);
|
|
}
|
|
|
|
};
|
|
|
|
module.exports.appgateway = appgateway;
|
|
module.exports.createimage = createimage; |