@xec-sh/core
Version:
Universal shell execution engine
140 lines • 5.14 kB
JavaScript
function createK8sPod(engine, adapter, name, namespace, baseOptions) {
const exec = (strings, ...values) => {
const k8sEngine = engine.with({
adapter: 'kubernetes',
adapterOptions: {
type: 'kubernetes',
...baseOptions,
pod: name,
namespace
}
});
return k8sEngine.run(strings, ...values);
};
const raw = (strings, ...values) => {
const k8sEngine = engine.with({
adapter: 'kubernetes',
adapterOptions: {
type: 'kubernetes',
...baseOptions,
pod: name,
namespace
}
});
return k8sEngine.raw(strings, ...values);
};
return {
name,
namespace,
exec,
raw,
async portForward(localPort, remotePort) {
const pf = await adapter.portForward(name, localPort, remotePort, { namespace });
await pf.open();
return pf;
},
async portForwardDynamic(remotePort) {
const pf = await adapter.portForward(name, 0, remotePort, {
namespace,
dynamicLocalPort: true
});
await pf.open();
return pf;
},
async logs(options) {
const args = ['logs', '-n', namespace];
if (options?.container) {
args.push('-c', options.container);
}
if (options?.tail !== undefined) {
args.push('--tail', String(options.tail));
}
if (options?.previous) {
args.push('--previous');
}
if (options?.timestamps) {
args.push('--timestamps');
}
args.push(name);
const result = await adapter.executeKubectl(args, { throwOnNonZeroExit: true });
return result.stdout;
},
async streamLogs(onData, options) {
return adapter.streamLogs(name, onData, {
namespace,
...options
});
},
async follow(onData, options) {
return this.streamLogs(onData, { ...options, follow: true });
},
async copyTo(localPath, remotePath, container) {
const podPath = container ? `${name}:${remotePath} -c ${container}` : `${name}:${remotePath}`;
await adapter.copyFiles(localPath, podPath, {
namespace,
container,
direction: 'to'
});
},
async copyFrom(remotePath, localPath, container) {
const podPath = container ? `${name}:${remotePath} -c ${container}` : `${name}:${remotePath}`;
await adapter.copyFiles(podPath, localPath, {
namespace,
container,
direction: 'from'
});
}
};
}
export function createK8sExecutionContext(engine, k8sOptions) {
const adapter = engine.getAdapter('kubernetes');
if (!adapter) {
throw new Error('Kubernetes adapter not available');
}
const exec = (strings, ...values) => {
if (!k8sOptions.pod) {
throw new Error('Pod must be specified for direct execution');
}
const k8sEngine = engine.with({
adapter: 'kubernetes',
adapterOptions: {
type: 'kubernetes',
pod: k8sOptions.pod,
...(k8sOptions.namespace && { namespace: k8sOptions.namespace }),
...(k8sOptions.container && { container: k8sOptions.container }),
...(k8sOptions.execFlags && { execFlags: k8sOptions.execFlags }),
...(k8sOptions.tty !== undefined && { tty: k8sOptions.tty }),
...(k8sOptions.stdin !== undefined && { stdin: k8sOptions.stdin })
}
});
return k8sEngine.run(strings, ...values);
};
const raw = (strings, ...values) => {
if (!k8sOptions.pod) {
throw new Error('Pod must be specified for direct execution');
}
const k8sEngine = engine.with({
adapter: 'kubernetes',
adapterOptions: {
type: 'kubernetes',
pod: k8sOptions.pod,
...(k8sOptions.namespace && { namespace: k8sOptions.namespace }),
...(k8sOptions.container && { container: k8sOptions.container }),
...(k8sOptions.execFlags && { execFlags: k8sOptions.execFlags }),
...(k8sOptions.tty !== undefined && { tty: k8sOptions.tty }),
...(k8sOptions.stdin !== undefined && { stdin: k8sOptions.stdin })
}
});
return k8sEngine.raw(strings, ...values);
};
const context = Object.assign(exec, {
exec,
raw,
pod(name) {
const namespace = k8sOptions.namespace || 'default';
return createK8sPod(engine, adapter, name, namespace, k8sOptions);
}
});
return context;
}
//# sourceMappingURL=kubernetes-api.js.map