vmsan 0.1.0-alpha.16 → 0.1.0-alpha.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/connect.mjs +1 -3
- package/dist/_chunks/context.mjs +13 -0
- package/dist/_chunks/exec.mjs +8 -11
- package/dist/_chunks/shell.mjs +1 -0
- package/dist/index.d.mts +2 -0
- package/package.json +1 -1
package/dist/_chunks/connect.mjs
CHANGED
|
@@ -29,11 +29,9 @@ const connectCommand = defineCommand({
|
|
|
29
29
|
const paths = vmsanPaths();
|
|
30
30
|
try {
|
|
31
31
|
const { state, guestIp, port } = resolveVmState(args.vmId, paths);
|
|
32
|
-
const log = consola.withTag(args.vmId);
|
|
33
32
|
consola.debug(`Agent endpoint: ${guestIp}:${port}`);
|
|
34
|
-
|
|
33
|
+
consola.debug("Waiting for agent to become ready...");
|
|
35
34
|
await waitForAgent(guestIp, port);
|
|
36
|
-
log.success("Agent is ready. Connecting via PTY shell...");
|
|
37
35
|
const shell = new ShellSession({
|
|
38
36
|
host: guestIp,
|
|
39
37
|
port,
|
package/dist/_chunks/context.mjs
CHANGED
|
@@ -1333,6 +1333,7 @@ function generateAgentEnv(token, port, vmId) {
|
|
|
1333
1333
|
return `VMSAN_AGENT_TOKEN=${token}
|
|
1334
1334
|
VMSAN_AGENT_PORT=${port}
|
|
1335
1335
|
VMSAN_VM_ID=${vmId}
|
|
1336
|
+
VMSAN_DEFAULT_USER=ubuntu
|
|
1336
1337
|
`;
|
|
1337
1338
|
}
|
|
1338
1339
|
/**
|
|
@@ -1627,6 +1628,7 @@ const APT_PACKAGES = [
|
|
|
1627
1628
|
"openssh-server",
|
|
1628
1629
|
"openssl",
|
|
1629
1630
|
"procps",
|
|
1631
|
+
"sudo",
|
|
1630
1632
|
"tar",
|
|
1631
1633
|
"unzip",
|
|
1632
1634
|
"debianutils",
|
|
@@ -1648,6 +1650,7 @@ const DNF_PACKAGES = [
|
|
|
1648
1650
|
"openssl",
|
|
1649
1651
|
"openssl-libs",
|
|
1650
1652
|
"procps",
|
|
1653
|
+
"sudo",
|
|
1651
1654
|
"tar",
|
|
1652
1655
|
"unzip",
|
|
1653
1656
|
"which",
|
|
@@ -1655,6 +1658,7 @@ const DNF_PACKAGES = [
|
|
|
1655
1658
|
"zstd"
|
|
1656
1659
|
];
|
|
1657
1660
|
const APK_PACKAGES = [
|
|
1661
|
+
"bash",
|
|
1658
1662
|
"bind-tools",
|
|
1659
1663
|
"bzip2",
|
|
1660
1664
|
"findutils",
|
|
@@ -1669,6 +1673,7 @@ const APK_PACKAGES = [
|
|
|
1669
1673
|
"openssh",
|
|
1670
1674
|
"openssl",
|
|
1671
1675
|
"procps",
|
|
1676
|
+
"sudo",
|
|
1672
1677
|
"tar",
|
|
1673
1678
|
"unzip",
|
|
1674
1679
|
"whois",
|
|
@@ -1681,6 +1686,14 @@ RUN if command -v apt-get >/dev/null 2>&1; then ${`apt-get update && apt-get ins
|
|
|
1681
1686
|
elif command -v yum >/dev/null 2>&1; then ${`yum install -y ${DNF_PACKAGES.join(" ")} && yum clean all`}; \\
|
|
1682
1687
|
elif command -v apk >/dev/null 2>&1; then ${`apk add --no-cache ${APK_PACKAGES.join(" ")}`}; \\
|
|
1683
1688
|
fi
|
|
1689
|
+
RUN if command -v apk >/dev/null 2>&1; then \\
|
|
1690
|
+
id -u ubuntu >/dev/null 2>&1 || adduser -D -s /bin/bash ubuntu; \\
|
|
1691
|
+
else \\
|
|
1692
|
+
id -u ubuntu >/dev/null 2>&1 || useradd -m -s /bin/bash ubuntu; \\
|
|
1693
|
+
fi; \\
|
|
1694
|
+
echo 'ubuntu ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/ubuntu; \\
|
|
1695
|
+
chmod 440 /etc/sudoers.d/ubuntu; \\
|
|
1696
|
+
mkdir -p /home/ubuntu/.ssh && chown -R ubuntu:ubuntu /home/ubuntu
|
|
1684
1697
|
RUN ssh-keygen -A 2>/dev/null || true; \\
|
|
1685
1698
|
mkdir -p /root/.ssh && chmod 700 /root/.ssh; \\
|
|
1686
1699
|
if [ -f /etc/ssh/sshd_config ]; then \\
|
package/dist/_chunks/exec.mjs
CHANGED
|
@@ -106,19 +106,16 @@ const execCommand = defineCommand({
|
|
|
106
106
|
const envVars = parseEnvFlags(command);
|
|
107
107
|
const { state, guestIp, port, store } = resolveVmState(args.vmId, paths);
|
|
108
108
|
consola.debug(`Agent endpoint: ${guestIp}:${port}`);
|
|
109
|
-
|
|
110
|
-
log.start("Waiting for agent...");
|
|
109
|
+
consola.debug(`Waiting for agent on ${guestIp}:${port}...`);
|
|
111
110
|
await waitForAgent(guestIp, port);
|
|
112
111
|
if (args.interactive) {
|
|
113
112
|
const parts = [];
|
|
114
113
|
parts.push(`export PS1=${shellEscape(buildVmsanPrompt(args.vmId))} TERM=xterm-256color &&`);
|
|
115
114
|
if (args.workdir) parts.push(`cd ${shellEscape(args.workdir)} &&`);
|
|
116
115
|
for (const [key, val] of Object.entries(envVars)) parts.push(`${key}=${shellEscape(val)}`);
|
|
117
|
-
if (args.sudo) parts.push("sudo");
|
|
118
116
|
parts.push(shellEscape(command));
|
|
119
117
|
for (const a of commandArgs) parts.push(shellEscape(a));
|
|
120
|
-
const injectedCmd = parts.join(" ") + "; exit $?\n";
|
|
121
|
-
log.success("Agent is ready. Connecting interactive shell...");
|
|
118
|
+
const injectedCmd = "clear; " + parts.join(" ") + "; exit $?\n";
|
|
122
119
|
let extender = null;
|
|
123
120
|
if (!args["no-extend-timeout"] && state.timeoutMs) {
|
|
124
121
|
extender = new TimeoutExtender({
|
|
@@ -133,7 +130,8 @@ const execCommand = defineCommand({
|
|
|
133
130
|
host: guestIp,
|
|
134
131
|
port,
|
|
135
132
|
token: state.agentToken,
|
|
136
|
-
initialCommand: injectedCmd
|
|
133
|
+
initialCommand: injectedCmd,
|
|
134
|
+
user: args.sudo ? "root" : void 0
|
|
137
135
|
}).connect();
|
|
138
136
|
} finally {
|
|
139
137
|
extender?.stop();
|
|
@@ -149,13 +147,12 @@ const execCommand = defineCommand({
|
|
|
149
147
|
} else {
|
|
150
148
|
consola.debug(`exec: ${command} ${commandArgs.join(" ")}`);
|
|
151
149
|
const agent = new AgentClient(`http://${guestIp}:${port}`, state.agentToken);
|
|
152
|
-
const cmd = args.sudo ? "sudo" : command;
|
|
153
|
-
const runArgs = args.sudo ? [command, ...commandArgs] : commandArgs;
|
|
154
150
|
const params = {
|
|
155
|
-
cmd,
|
|
156
|
-
args:
|
|
151
|
+
cmd: command,
|
|
152
|
+
args: commandArgs.length > 0 ? commandArgs : void 0,
|
|
157
153
|
cwd: args.workdir || void 0,
|
|
158
|
-
env: Object.keys(envVars).length > 0 ? envVars : void 0
|
|
154
|
+
env: Object.keys(envVars).length > 0 ? envVars : void 0,
|
|
155
|
+
user: args.sudo ? "root" : void 0
|
|
159
156
|
};
|
|
160
157
|
const ac = new AbortController();
|
|
161
158
|
const onSignal = () => ac.abort();
|
package/dist/_chunks/shell.mjs
CHANGED
|
@@ -137,6 +137,7 @@ var ShellSession = class {
|
|
|
137
137
|
const url = new URL(`${proto}://${this.opts.host}:${this.opts.port}/ws/shell`);
|
|
138
138
|
url.searchParams.set("token", this.opts.token);
|
|
139
139
|
if (this.opts.shell) url.searchParams.set("shell", this.opts.shell);
|
|
140
|
+
if (this.opts.user) url.searchParams.set("user", this.opts.user);
|
|
140
141
|
return url.toString();
|
|
141
142
|
}
|
|
142
143
|
};
|
package/dist/index.d.mts
CHANGED
|
@@ -2857,6 +2857,7 @@ interface RunParams {
|
|
|
2857
2857
|
env?: Record<string, string>;
|
|
2858
2858
|
timeoutMs?: number;
|
|
2859
2859
|
detached?: boolean;
|
|
2860
|
+
user?: string;
|
|
2860
2861
|
}
|
|
2861
2862
|
type RunEventType = "started" | "stdout" | "stderr" | "exit" | "timeout" | "error";
|
|
2862
2863
|
interface RunEvent {
|
|
@@ -3043,6 +3044,7 @@ interface ShellSessionOptions {
|
|
|
3043
3044
|
shell?: string;
|
|
3044
3045
|
sessionId?: string;
|
|
3045
3046
|
initialCommand?: string;
|
|
3047
|
+
user?: string;
|
|
3046
3048
|
}
|
|
3047
3049
|
interface ShellCloseInfo {
|
|
3048
3050
|
/** true when the shell process exited (e.g. user typed `exit`) */
|
package/package.json
CHANGED