Can start, shutdown, kill and reset VMs of groups
This commit is contained in:
parent
9f8e2e9dc2
commit
4b97fc498f
@ -17,7 +17,7 @@ pub async fn list(client: LibVirtReq) -> HttpResult {
|
|||||||
Ok(HttpResponse::Ok().json(groups))
|
Ok(HttpResponse::Ok().json(groups))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get information about a VM
|
/// Get information about the VMs of a group
|
||||||
pub async fn vm_info(vms_ids: GroupVmIdExtractor) -> HttpResult {
|
pub async fn vm_info(vms_ids: GroupVmIdExtractor) -> HttpResult {
|
||||||
let mut vms = Vec::new();
|
let mut vms = Vec::new();
|
||||||
for vm in vms_ids.0 {
|
for vm in vms_ids.0 {
|
||||||
@ -25,3 +25,43 @@ pub async fn vm_info(vms_ids: GroupVmIdExtractor) -> HttpResult {
|
|||||||
}
|
}
|
||||||
Ok(HttpResponse::Ok().json(vms))
|
Ok(HttpResponse::Ok().json(vms))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Start the VMs of a group
|
||||||
|
pub async fn vm_start(client: LibVirtReq, vms_ids: GroupVmIdExtractor) -> HttpResult {
|
||||||
|
for vm in vms_ids.0 {
|
||||||
|
if let Some(uuid) = vm.uuid {
|
||||||
|
client.start_domain(uuid).await?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Ok(HttpResponse::Ok().finish())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Shutdown the VMs of a group
|
||||||
|
pub async fn vm_shutdown(client: LibVirtReq, vms_ids: GroupVmIdExtractor) -> HttpResult {
|
||||||
|
for vm in vms_ids.0 {
|
||||||
|
if let Some(uuid) = vm.uuid {
|
||||||
|
client.shutdown_domain(uuid).await?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Ok(HttpResponse::Ok().finish())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Kill the VMs of a group
|
||||||
|
pub async fn vm_kill(client: LibVirtReq, vms_ids: GroupVmIdExtractor) -> HttpResult {
|
||||||
|
for vm in vms_ids.0 {
|
||||||
|
if let Some(uuid) = vm.uuid {
|
||||||
|
client.kill_domain(uuid).await?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Ok(HttpResponse::Ok().finish())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Reset the VMs of a group
|
||||||
|
pub async fn vm_reset(client: LibVirtReq, vms_ids: GroupVmIdExtractor) -> HttpResult {
|
||||||
|
for vm in vms_ids.0 {
|
||||||
|
if let Some(uuid) = vm.uuid {
|
||||||
|
client.reset_domain(uuid).await?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Ok(HttpResponse::Ok().finish())
|
||||||
|
}
|
||||||
|
@ -51,8 +51,8 @@ impl FromRequest for GroupVmIdExtractor {
|
|||||||
let vms = match client.get_full_group_vm_list(&group_id).await {
|
let vms = match client.get_full_group_vm_list(&group_id).await {
|
||||||
Ok(vms) => vms,
|
Ok(vms) => vms,
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
log::error!("Failed to get the VM of the group {group_id:?}: {e}");
|
log::error!("Failed to get the VMs of the group {group_id:?}: {e}");
|
||||||
return Err(ErrorBadRequest("Failed to get the VM of the group!"));
|
return Err(ErrorBadRequest("Failed to get the VMs of the group!"));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -216,13 +216,27 @@ async fn main() -> std::io::Result<()> {
|
|||||||
"/api/group/{gid}/vm/info",
|
"/api/group/{gid}/vm/info",
|
||||||
web::get().to(groups_controller::vm_info),
|
web::get().to(groups_controller::vm_info),
|
||||||
)
|
)
|
||||||
// TODO start VM
|
.route(
|
||||||
// TODO stop VM
|
"/api/group/{gid}/vm/start",
|
||||||
|
web::get().to(groups_controller::vm_start),
|
||||||
|
)
|
||||||
|
.route(
|
||||||
|
"/api/group/{gid}/vm/shutdown",
|
||||||
|
web::get().to(groups_controller::vm_shutdown),
|
||||||
|
)
|
||||||
// TODO suspend VM
|
// TODO suspend VM
|
||||||
// TODO resume VM
|
// TODO resume VM
|
||||||
// TODO kill VM
|
.route(
|
||||||
|
"/api/group/{gid}/vm/kill",
|
||||||
|
web::get().to(groups_controller::vm_kill),
|
||||||
|
)
|
||||||
|
.route(
|
||||||
|
"/api/group/{gid}/vm/reset",
|
||||||
|
web::get().to(groups_controller::vm_reset),
|
||||||
|
)
|
||||||
// TODO reset VM
|
// TODO reset VM
|
||||||
// TODO screenshot VM
|
// TODO screenshot VM
|
||||||
|
// TODO state of VM
|
||||||
// Network controller
|
// Network controller
|
||||||
.route(
|
.route(
|
||||||
"/api/network/create",
|
"/api/network/create",
|
||||||
|
Loading…
Reference in New Issue
Block a user