mirror of
https://github.com/windmill-labs/windmill.git
synced 2026-08-18 16:02:10 +00:00
bd6ddc166b
* all * all * all * all * all * all * all * all * all * all * all * all * all * all
139 lines
3.6 KiB
TypeScript
139 lines
3.6 KiB
TypeScript
import { Command, Confirm, setClient, Table } from "./deps.ts";
|
|
|
|
import { log } from "./deps.ts";
|
|
import { allInstances, getActiveInstance, Instance, InstanceSyncOptions, pickInstance } from "./instance.ts";
|
|
import * as wmill from "./gen/services.gen.ts";
|
|
import { pullInstanceConfigs, pushInstanceConfigs } from "./settings.ts";
|
|
|
|
type GlobalOptions = {
|
|
instance?: string;
|
|
baseUrl?: string;
|
|
};
|
|
export async function getInstance(opts: GlobalOptions) {
|
|
const instances = await allInstances();
|
|
|
|
const instanceName = await getActiveInstance(opts);
|
|
const instance = instances.find((i) => i.name === instanceName);
|
|
if (instance) {
|
|
setClient(
|
|
instance.token,
|
|
instance.remote.slice(0, instance.remote.length - 1)
|
|
);
|
|
}
|
|
return instance;
|
|
}
|
|
|
|
export function removeWorkerPrefix(name: string) {
|
|
if (name.startsWith("worker__")) {
|
|
return name.substring(8);
|
|
}
|
|
return name;
|
|
}
|
|
|
|
export async function displayWorkerGroups(opts: void) {
|
|
log.info("2 actions available, pull and push.");
|
|
const activeInstance = await getActiveInstance({});
|
|
|
|
if (activeInstance) {
|
|
log.info("Active instance: " + activeInstance);
|
|
const instance = await getInstance({});
|
|
if (instance) {
|
|
const wGroups = await wmill.listWorkerGroups();
|
|
new Table()
|
|
.header(["name", "config"])
|
|
.padding(2)
|
|
.border(true)
|
|
.body(wGroups.map((x) => [removeWorkerPrefix(x.name), JSON.stringify(x.config, null, 2)]))
|
|
.render();
|
|
} else {
|
|
log.error(`Instance ${activeInstance} not found`);
|
|
}
|
|
} else {
|
|
log.info("No active instance found");
|
|
log.info("Use 'wmill instance add' to add a new instance");
|
|
}
|
|
}
|
|
async function pullWorkerGroups(opts: InstanceSyncOptions) {
|
|
await pickInstance(opts, true);
|
|
|
|
const totalChanges = await pullInstanceConfigs(true) ?? 0;
|
|
|
|
if (totalChanges === 0) {
|
|
log.info("No changes to apply");
|
|
return;
|
|
}
|
|
|
|
let confirm = true;
|
|
if (opts.yes !== true) {
|
|
confirm = await Confirm.prompt({
|
|
message: `Do you want to pul these ${totalChanges} instance-level changes?`,
|
|
default: true,
|
|
});
|
|
}
|
|
|
|
if (confirm) {
|
|
await pullInstanceConfigs(false);
|
|
}
|
|
}
|
|
|
|
async function pushWorkerGroups(opts: InstanceSyncOptions) {
|
|
await pickInstance(opts, true);
|
|
|
|
const totalChanges = await pushInstanceConfigs(true) ?? 0;
|
|
|
|
if (totalChanges === 0) {
|
|
log.info("No changes to apply");
|
|
return;
|
|
}
|
|
|
|
let confirm = true;
|
|
if (opts.yes !== true) {
|
|
confirm = await Confirm.prompt({
|
|
message: `Do you want to apply these ${totalChanges} instance-level changes?`,
|
|
default: true,
|
|
});
|
|
}
|
|
|
|
if (confirm) {
|
|
await pushInstanceConfigs(false);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const command = new Command()
|
|
.description("display worker groups, pull and push worker groups configs")
|
|
.action(displayWorkerGroups)
|
|
.command("pull")
|
|
.description(
|
|
"Pull worker groups (similar to `wmill instance pull --skip-users --skip-settings --skip-groups`)"
|
|
)
|
|
.option(
|
|
"--instance",
|
|
"Name of the instance to push to, override the active instance"
|
|
)
|
|
.option(
|
|
"--base-url",
|
|
"Base url to be passed to the instance settings instead of the local one"
|
|
)
|
|
.option("--yes", "Pull without needing confirmation")
|
|
.action(pullWorkerGroups as any)
|
|
.command("push")
|
|
.description(
|
|
"Push instance settings, users, configs, group and overwrite remote"
|
|
)
|
|
.option(
|
|
"--instance [instance]",
|
|
"Name of the instance to push to, override the active instance"
|
|
)
|
|
.option(
|
|
"--base-url [baseUrl]",
|
|
"If used with --token, will be used as the base url for the instance"
|
|
)
|
|
.option("--yes", "Push without needing confirmation")
|
|
.action(pushWorkerGroups as any);
|
|
|
|
|
|
|
|
export default command;
|