krata: implement guest reconciliation

This commit is contained in:
Alex Zenla
2024-03-14 14:03:11 +00:00
parent 32a1a36ad4
commit 9bbf8420f2
21 changed files with 717 additions and 329 deletions

View File

@ -1,5 +1,6 @@
fn main() {
tonic_build::configure()
.compile(&["proto/krata/control.proto"], &["proto"])
.unwrap();
use std::io::Result;
fn main() -> Result<()> {
tonic_build::configure().compile(&["proto/krata/control.proto"], &["proto/"])?;
Ok(())
}

View File

@ -0,0 +1,61 @@
syntax = "proto3";
option java_multiple_files = true;
option java_package = "dev.krata.proto.common";
option java_outer_classname = "CommonProto";
package krata.common;
message GuestOciImageSpec {
string image = 1;
}
message GuestImageSpec {
oneof image {
GuestOciImageSpec oci = 1;
}
}
message GuestSpec {
string name = 1;
GuestImageSpec image = 2;
uint32 vcpus = 3;
uint64 mem = 4;
repeated string env = 5;
repeated string run = 6;
}
message GuestNetworkState {
string ipv4 = 1;
string ipv6 = 2;
}
message GuestExitInfo {
int32 code = 1;
}
message GuestErrorInfo {
string message = 1;
}
enum GuestStatus {
GUEST_STATUS_UNKNOWN = 0;
GUEST_STATUS_START = 1;
GUEST_STATUS_STARTED = 2;
GUEST_STATUS_EXITED = 3;
GUEST_STATUS_DESTROY = 4;
GUEST_STATUS_DESTROYED = 5;
}
message GuestState {
GuestStatus status = 1;
GuestExitInfo exit_info = 2;
GuestErrorInfo error_info = 3;
}
message Guest {
string id = 1;
GuestState state = 2;
GuestSpec spec = 3;
GuestNetworkState network = 4;
}

View File

@ -6,45 +6,20 @@ option java_outer_classname = "ControlProto";
package krata.control;
message GuestOciImageSpec {
string image = 1;
import "krata/common.proto";
message CreateGuestRequest {
krata.common.GuestSpec spec = 1;
}
message GuestImageSpec {
oneof image {
GuestOciImageSpec oci = 1;
}
}
message GuestNetworkInfo {
string ipv4 = 1;
string ipv6 = 2;
}
message GuestInfo {
string id = 1;
string name = 2;
GuestImageSpec image = 3;
GuestNetworkInfo network = 4;
}
message LaunchGuestRequest {
string name = 1;
GuestImageSpec image = 2;
uint32 vcpus = 3;
uint64 mem = 4;
repeated string env = 5;
repeated string run = 6;
}
message LaunchGuestReply {
GuestInfo guest = 1;
message CreateGuestReply {
string guest_id = 1;
}
message ListGuestsRequest {}
message ListGuestsReply {
repeated GuestInfo guests = 1;
repeated krata.common.Guest guests = 1;
}
message DestroyGuestRequest {
@ -64,32 +39,20 @@ message ConsoleDataReply {
message WatchEventsRequest {}
message GuestLaunchedEvent {
string guest_id = 1;
}
message GuestDestroyedEvent {
string guest_id = 1;
}
message GuestExitedEvent {
string guest_id = 1;
int32 code = 2;
message GuestChangedEvent {
krata.common.Guest guest = 1;
}
message WatchEventsReply {
oneof event {
GuestLaunchedEvent guest_launched = 1;
GuestDestroyedEvent guest_destroyed = 2;
GuestExitedEvent guest_exited = 3;
GuestChangedEvent guest_changed = 1;
}
}
service ControlService {
rpc LaunchGuest(LaunchGuestRequest) returns (LaunchGuestReply);
rpc CreateGuest(CreateGuestRequest) returns (CreateGuestReply);
rpc DestroyGuest(DestroyGuestRequest) returns (DestroyGuestReply);
rpc ListGuests(ListGuestsRequest) returns (ListGuestsReply);
rpc ConsoleData(stream ConsoleDataRequest) returns (stream ConsoleDataReply);
rpc WatchEvents(WatchEventsRequest) returns (stream WatchEventsReply);
}

View File

@ -0,0 +1 @@
tonic::include_proto!("krata.common");

View File

@ -1,3 +1,4 @@
pub mod common;
pub mod control;
pub mod dial;
pub mod ethtool;