Fix the script to export realm

This commit is contained in:
Joseph Garrone
2024-06-10 20:51:00 +02:00
parent 77b488d624
commit 2c0a427ba5

View File

@ -3,26 +3,68 @@ import child_process from "child_process";
import { SemVer } from "../src/bin/tools/SemVer"; import { SemVer } from "../src/bin/tools/SemVer";
import { join as pathJoin, relative as pathRelative } from "path"; import { join as pathJoin, relative as pathRelative } from "path";
import chalk from "chalk"; import chalk from "chalk";
import { Deferred } from "evt/tools/Deferred";
import { assert } from "tsafe/assert";
import { is } from "tsafe/is";
run( (async () => {
[ {
`docker exec -it ${containerName}`, const dCompleted = new Deferred<void>();
`/opt/keycloak/bin/kc.sh export`,
`--dir /tmp`,
`--realm myrealm`,
`--users realm_file`
].join(" ")
);
const keycloakMajorVersionNumber = SemVer.parse( const child = child_process.spawn("docker", [
...["exec", containerName],
...["/opt/keycloak/bin/kc.sh", "export"],
...["--dir", "/tmp"],
...["--realm", "myrealm"],
...["--users", "realm_file"]
]);
let output = "";
const onExit = (code: number | null) => {
dCompleted.reject(new Error(`Exited with code ${code}`));
};
child.on("exit", onExit);
child.stdout.on("data", data => {
const outputStr = data.toString("utf8");
if (outputStr.includes("Export finished successfully")) {
child.removeListener("exit", onExit);
child.kill();
dCompleted.resolve();
}
output += outputStr;
});
child.stderr.on("data", data => (output += chalk.red(data.toString("utf8"))));
try {
await dCompleted.pr;
} catch (error) {
assert(is<Error>(error));
console.log(chalk.red(error.message));
console.log(output);
process.exit(1);
}
}
const keycloakMajorVersionNumber = SemVer.parse(
child_process child_process
.execSync(`docker inspect --format '{{.Config.Image}}' ${containerName}`) .execSync(`docker inspect --format '{{.Config.Image}}' ${containerName}`)
.toString("utf8") .toString("utf8")
.trim() .trim()
.split(":")[1] .split(":")[1]
).major; ).major;
const targetFilePath = pathRelative( const targetFilePath = pathRelative(
process.cwd(), process.cwd(),
pathJoin( pathJoin(
__dirname, __dirname,
@ -32,11 +74,12 @@ const targetFilePath = pathRelative(
"start-keycloak", "start-keycloak",
`myrealm-realm-${keycloakMajorVersionNumber}.json` `myrealm-realm-${keycloakMajorVersionNumber}.json`
) )
); );
run(`docker cp ${containerName}:/tmp/myrealm-realm.json ${targetFilePath}`); run(`docker cp ${containerName}:/tmp/myrealm-realm.json ${targetFilePath}`);
console.log(`${chalk.green(`✓ Exported realm to`)} ${chalk.bold(targetFilePath)}`); console.log(`${chalk.green(`✓ Exported realm to`)} ${chalk.bold(targetFilePath)}`);
})();
function run(command: string) { function run(command: string) {
console.log(chalk.grey(`$ ${command}`)); console.log(chalk.grey(`$ ${command}`));