tangled
alpha
login
or
join now
tsiry-sandratraina.com
/
vmx
1
fork
atom
A Docker-like CLI and HTTP API for managing headless VMs
1
fork
atom
overview
issues
pulls
pipelines
run format
tsiry-sandratraina.com
3 months ago
4170286b
8307d8e8
+25
-32
1 changed file
expand all
collapse all
unified
split
src
api
machines.ts
+25
-32
src/api/machines.ts
···
35
35
}> {}
36
36
37
37
export class RemoveRunningVmError extends Data.TaggedError(
38
38
-
"RemoveRunningVmError"
38
38
+
"RemoveRunningVmError",
39
39
)<{
40
40
id: string;
41
41
}> {}
···
49
49
Effect.flatMap((params) =>
50
50
listInstances(params.all === "true" || params.all === "1")
51
51
),
52
52
-
presentation(c)
53
53
-
)
54
54
-
)
55
55
-
);
52
52
+
presentation(c),
53
53
+
),
54
54
+
));
56
55
57
56
app.post("/", (c) =>
58
57
Effect.runPromise(
···
63
62
const image = yield* getImage(params.image);
64
63
if (!image) {
65
64
return yield* Effect.fail(
66
66
-
new ImageNotFoundError({ id: params.image })
65
65
+
new ImageNotFoundError({ id: params.image }),
67
66
);
68
67
}
69
68
···
97
96
})
98
97
),
99
98
presentation(c),
100
100
-
Effect.catchAll((error) => handleError(error, c))
101
101
-
)
102
102
-
)
103
103
-
);
99
99
+
Effect.catchAll((error) => handleError(error, c)),
100
100
+
),
101
101
+
));
104
102
105
103
app.get("/:id", (c) =>
106
104
Effect.runPromise(
107
105
pipe(
108
106
parseParams(c),
109
107
Effect.flatMap(({ id }) => getInstanceState(id)),
110
110
-
presentation(c)
111
111
-
)
112
112
-
)
113
113
-
);
108
108
+
presentation(c),
109
109
+
),
110
110
+
));
114
111
115
112
app.delete("/:id", (c) =>
116
113
Effect.runPromise(
···
129
126
})
130
127
),
131
128
presentation(c),
132
132
-
Effect.catchAll((error) => handleError(error, c))
133
133
-
)
134
134
-
)
135
135
-
);
129
129
+
Effect.catchAll((error) => handleError(error, c)),
130
130
+
),
131
131
+
));
136
132
137
133
app.post("/:id/start", (c) =>
138
134
Effect.runPromise(
···
157
153
? startRequest.portForward.join(",")
158
154
: vm.portForward,
159
155
},
160
160
-
firmwareArgs
156
156
+
firmwareArgs,
161
157
);
162
158
yield* createLogsDir();
163
159
yield* startDetachedQemu(vm.id, vm, qemuArgs);
···
165
161
})
166
162
),
167
163
presentation(c),
168
168
-
Effect.catchAll((error) => handleError(error, c))
169
169
-
)
170
170
-
)
171
171
-
);
164
164
+
Effect.catchAll((error) => handleError(error, c)),
165
165
+
),
166
166
+
));
172
167
173
168
app.post("/:id/stop", (c) =>
174
169
Effect.runPromise(
···
178
173
Effect.flatMap(killProcess),
179
174
Effect.flatMap(updateToStopped),
180
175
presentation(c),
181
181
-
Effect.catchAll((error) => handleError(error, c))
182
182
-
)
183
183
-
)
184
184
-
);
176
176
+
Effect.catchAll((error) => handleError(error, c)),
177
177
+
),
178
178
+
));
185
179
186
180
app.post("/:id/restart", (c) =>
187
181
Effect.runPromise(
···
208
202
? startRequest.portForward.join(",")
209
203
: vm.portForward,
210
204
},
211
211
-
firmwareArgs
205
205
+
firmwareArgs,
212
206
);
213
207
yield* createLogsDir();
214
208
yield* startDetachedQemu(vm.id, vm, qemuArgs);
···
216
210
})
217
211
),
218
212
presentation(c),
219
219
-
Effect.catchAll((error) => handleError(error, c))
220
220
-
)
221
221
-
)
222
222
-
);
213
213
+
Effect.catchAll((error) => handleError(error, c)),
214
214
+
),
215
215
+
));
223
216
224
217
export default app;