2023-01-23 10:37:14 +01:00

169 lines
4.9 KiB
JavaScript

"use strict";
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var docker_exports = {};
__export(docker_exports, {
checkContainer: () => checkContainer,
defaultComposeConfiguration: () => defaultComposeConfiguration,
formatLabelsOnDocker: () => formatLabelsOnDocker,
removeContainer: () => removeContainer,
stopDatabaseContainer: () => stopDatabaseContainer,
stopTcpHttpProxy: () => stopTcpHttpProxy
});
module.exports = __toCommonJS(docker_exports);
var import_executeCommand = require("./executeCommand");
async function checkContainer({
dockerId,
container,
remove = false
}) {
let containerFound = false;
try {
const { stdout } = await (0, import_executeCommand.executeCommand)({
dockerId,
command: `docker inspect --format '{{json .State}}' ${container}`
});
containerFound = true;
const parsedStdout = JSON.parse(stdout);
const status = parsedStdout.Status;
const isRunning = status === "running";
const isRestarting = status === "restarting";
const isExited = status === "exited";
if (status === "created") {
await (0, import_executeCommand.executeCommand)({
dockerId,
command: `docker rm ${container}`
});
}
if (remove && status === "exited") {
await (0, import_executeCommand.executeCommand)({
dockerId,
command: `docker rm ${container}`
});
}
return {
found: containerFound,
status: {
isRunning,
isRestarting,
isExited
}
};
} catch (err) {
}
return {
found: false
};
}
async function removeContainer({
id,
dockerId
}) {
try {
const { stdout } = await (0, import_executeCommand.executeCommand)({
dockerId,
command: `docker inspect --format '{{json .State}}' ${id}`
});
if (JSON.parse(stdout).Running) {
await (0, import_executeCommand.executeCommand)({ dockerId, command: `docker stop -t 0 ${id}` });
await (0, import_executeCommand.executeCommand)({ dockerId, command: `docker rm ${id}` });
}
if (JSON.parse(stdout).Status === "exited") {
await (0, import_executeCommand.executeCommand)({ dockerId, command: `docker rm ${id}` });
}
} catch (error) {
throw error;
}
}
async function stopDatabaseContainer(database) {
let everStarted = false;
const {
id,
destinationDockerId,
destinationDocker: { engine, id: dockerId }
} = database;
if (destinationDockerId) {
try {
const { stdout } = await (0, import_executeCommand.executeCommand)({
dockerId,
command: `docker inspect --format '{{json .State}}' ${id}`
});
if (stdout) {
everStarted = true;
await removeContainer({ id, dockerId });
}
} catch (error) {
}
}
return everStarted;
}
async function stopTcpHttpProxy(id, destinationDocker, publicPort, forceName = null) {
const { id: dockerId } = destinationDocker;
let container = `${id}-${publicPort}`;
if (forceName)
container = forceName;
const { found } = await checkContainer({ dockerId, container });
try {
if (!found)
return true;
return await (0, import_executeCommand.executeCommand)({
dockerId,
command: `docker stop -t 0 ${container} && docker rm ${container}`,
shell: true
});
} catch (error) {
return error;
}
}
function formatLabelsOnDocker(data) {
return data.trim().split("\n").map((a) => JSON.parse(a)).map((container) => {
const labels = container.Labels.split(",");
let jsonLabels = {};
labels.forEach((l) => {
const name = l.split("=")[0];
const value = l.split("=")[1];
jsonLabels = { ...jsonLabels, ...{ [name]: value } };
});
container.Labels = jsonLabels;
return container;
});
}
function defaultComposeConfiguration(network) {
return {
networks: [network],
restart: "on-failure",
deploy: {
restart_policy: {
condition: "on-failure",
delay: "5s",
max_attempts: 10,
window: "120s"
}
}
};
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
checkContainer,
defaultComposeConfiguration,
formatLabelsOnDocker,
removeContainer,
stopDatabaseContainer,
stopTcpHttpProxy
});