added new vm requests

This commit is contained in:
ghe0 2024-12-11 20:56:03 +02:00
parent ec962197ff
commit 64a84c48be
Signed by: ghe0
GPG Key ID: 451028EE56A0FBB4
6 changed files with 91 additions and 10 deletions

@ -4,17 +4,26 @@ mod constants;
mod tcontract; mod tcontract;
use crate::config::Config; use crate::config::Config;
use crate::state::NewVMRequest;
fn main() -> Result<(), Box<dyn std::error::Error>> { fn main() -> Result<(), Box<dyn std::error::Error>> {
let config = Config::from_file("test_data/config1.yaml")?; // let config = Config::from_file("test_data/config1.yaml")?;
println!("{:#?}", config); // println!("{:#?}", config);
let config = Config::from_file("test_data/config2.yaml")?; // let config = Config::from_file("test_data/config2.yaml")?;
println!("{:#?}", config); // println!("{:#?}", config);
let config = Config::from_file("test_data/config3.yaml")?; // let config = Config::from_file("test_data/config3.yaml")?;
println!("{:#?}", config); // println!("{:#?}", config);
let config = Config::from_file("test_data/config4.yaml")?; // let config = Config::from_file("test_data/config4.yaml")?;
println!("{:#?}", config); // println!("{:#?}", config);
let config = Config::from_file("test_data/config5.yaml")?; // let config = Config::from_file("test_data/config5.yaml")?;
println!("{:#?}", config); // println!("{:#?}", config);
let new_vm_req = NewVMRequest::from_file("test_data/new_vm_req1.yaml")?;
println!("{:#?}", new_vm_req);
let new_vm_req = NewVMRequest::from_file("test_data/new_vm_req2.yaml")?;
println!("{:#?}", new_vm_req);
let new_vm_req = NewVMRequest::from_file("test_data/new_vm_req3.yaml")?;
println!("{:#?}", new_vm_req);
let new_vm_req = NewVMRequest::from_file("test_data/new_vm_req4.yaml")?;
println!("{:#?}", new_vm_req);
Ok(()) Ok(())
} }

@ -12,6 +12,7 @@ use std::io::Read;
use std::io::Write; use std::io::Write;
use std::path::Path; use std::path::Path;
use std::process::Command; use std::process::Command;
use serde::Deserialize;
pub struct Resources { pub struct Resources {
// QEMU does not support MHz limiation // QEMU does not support MHz limiation
@ -263,6 +264,7 @@ pub struct VM {
dtrfs_sha: String, dtrfs_sha: String,
} }
#[derive(Deserialize, Debug)]
pub struct NewVMRequest { pub struct NewVMRequest {
uuid: String, uuid: String,
hostname: String, hostname: String,
@ -279,6 +281,14 @@ pub struct NewVMRequest {
dtrfs_sha: String, dtrfs_sha: String,
} }
impl NewVMRequest {
pub fn from_file(path: &str) -> Result<Self, Box<dyn std::error::Error>> {
let content = std::fs::read_to_string(path)?;
let request: NewVMRequest = serde_yaml::from_str(&content)?;
Ok(request)
}
}
pub enum VMCreationErrors { pub enum VMCreationErrors {
NATandIPv4Conflict, NATandIPv4Conflict,
TooManyCores, TooManyCores,

@ -0,0 +1,15 @@
uuid: "123e4567-e89b-12d3-a456-426614174000"
hostname: "test-vm-01"
admin_key: "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArandomkeyexample"
extra_ports:
- 8080
- 8443
public_ipv4: true
public_ipv6: false
disk_size: 50
vcpus: 4
memory: 8192
kernel_url: "http://example.com/kernel"
kernel_sha: "abc123def4567890ghij"
dtrfs_url: "http://example.com/dtrfs"
dtrfs_sha: "xyz9876543210mnop"

@ -0,0 +1,14 @@
uuid: "987e6543-e21b-43d3-c321-654987210000"
hostname: "minimal-vm"
admin_key: "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQAnotherExampleKey"
extra_ports: []
public_ipv4: false
public_ipv6: false
disk_size: 10
vcpus: 1
memory: 2048
kernel_url: "http://minimal.com/kernel"
kernel_sha: "minimalsha123"
dtrfs_url: "http://minimal.com/dtrfs"
dtrfs_sha: "dtrfssha456"

@ -0,0 +1,19 @@
uuid: "246e1357-e98b-76d3-f345-129874650000"
hostname: "extensive-vm"
admin_key: "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEExtendedKeyExample"
extra_ports:
- 80
- 443
- 3000
- 5000
- 6000
public_ipv4: true
public_ipv6: true
disk_size: 200
vcpus: 16
memory: 65536
kernel_url: "http://large.com/kernel"
kernel_sha: "largekernelsha"
dtrfs_url: "http://large.com/dtrfs"
dtrfs_sha: "largedtrfssha"

@ -0,0 +1,14 @@
uuid: "default-uuid"
hostname: "testing-vm"
admin_key: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAAKeyExampleForTesting"
extra_ports: [1234, 5678]
public_ipv4: false
public_ipv6: true
disk_size: 25
vcpus: 2
memory: 4096
kernel_url: "http://testing.com/kernel"
kernel_sha: "testkernelsha"
dtrfs_url: "http://testing.com/dtrfs"
dtrfs_sha: "testdtrfssha"