Skip to content

Commit 2eb1528

Browse files
committed
vmm: Add support for init stopped VMs
1 parent 51b8a44 commit 2eb1528

File tree

4 files changed

+15
-2
lines changed

4 files changed

+15
-2
lines changed

vmm/rpc/proto/vmm_rpc.proto

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ message VmConfiguration {
7777
repeated string kms_urls = 14;
7878
// Gateway URLs
7979
repeated string gateway_urls = 15;
80+
// The VM is stopped
81+
bool stopped = 16;
8082
}
8183

8284
message GpuConfig {

vmm/src/app/qemu.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ impl VmInfo {
113113
.as_ref()
114114
.map(|c| c.gateway_urls.clone())
115115
.unwrap_or_default();
116+
let stopped = !workdir.started().unwrap_or(false);
116117

117118
Some(pb::VmConfiguration {
118119
name: self.manifest.name.clone(),
@@ -153,6 +154,7 @@ impl VmInfo {
153154
}),
154155
kms_urls,
155156
gateway_urls,
157+
stopped,
156158
})
157159
},
158160
app_url: self

vmm/src/main_service.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ impl VmmRpc for RpcHandler {
185185
.put_manifest(&manifest)
186186
.context("Failed to write manifest")?;
187187
let work_dir = self.prepare_work_dir(&id, &request, &app_id)?;
188-
if let Err(err) = vm_work_dir.set_started(true) {
188+
if let Err(err) = vm_work_dir.set_started(!request.stopped) {
189189
warn!("Failed to set started: {}", err);
190190
}
191191

@@ -195,7 +195,13 @@ impl VmmRpc for RpcHandler {
195195
.await
196196
.context("Failed to load VM");
197197
let result = match result {
198-
Ok(()) => self.app.start_vm(&id).await,
198+
Ok(()) => {
199+
if !request.stopped {
200+
self.app.start_vm(&id).await
201+
} else {
202+
Ok(())
203+
}
204+
}
199205
Err(err) => Err(err),
200206
};
201207
if let Err(err) = result {

vmm/src/vmm-cli.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -504,6 +504,7 @@ def create_vm(self, args) -> None:
504504
"ports": [parse_port_mapping(port) for port in args.port or []],
505505
"hugepages": args.hugepages,
506506
"pin_numa": args.pin_numa,
507+
"stopped": args.stopped,
507508
}
508509

509510
if args.ppcie:
@@ -899,6 +900,8 @@ def main():
899900
help='KMS URL')
900901
deploy_parser.add_argument('--gateway-url', action='append', type=str,
901902
help='Gateway URL')
903+
deploy_parser.add_argument('--stopped', action='store_true',
904+
help='Create VM in stopped state (requires dstack-vmm >= 0.5.4)')
902905

903906
# Images command
904907
_images_parser = subparsers.add_parser(

0 commit comments

Comments
 (0)