Compare commits
No commits in common. "21d47478217d60f685607bf14597fd189d6bce7f" and "78c84299947e887fe8d8c737656318f409c7f0b4" have entirely different histories.
21d4747821
...
78c8429994
10
build.rs
10
build.rs
@ -2,15 +2,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
tonic_build::configure()
|
tonic_build::configure()
|
||||||
.build_server(true)
|
.build_server(true)
|
||||||
.protoc_arg("--experimental_allow_proto3_optional")
|
.protoc_arg("--experimental_allow_proto3_optional")
|
||||||
.compile_protos(
|
.compile_protos(&["proto/daemon.proto", "proto/shared.proto"], &["proto"])?;
|
||||||
&[
|
|
||||||
"proto/daemon.proto",
|
|
||||||
"proto/shared.proto",
|
|
||||||
"proto/brain.proto",
|
|
||||||
"proto/dtpm.proto",
|
|
||||||
],
|
|
||||||
&["proto"],
|
|
||||||
)?;
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -1,110 +0,0 @@
|
|||||||
syntax = "proto3";
|
|
||||||
|
|
||||||
package brain;
|
|
||||||
|
|
||||||
message Empty {
|
|
||||||
}
|
|
||||||
|
|
||||||
message AppContract {
|
|
||||||
string uuid = 1;
|
|
||||||
string package_url = 2;
|
|
||||||
string admin_pubkey = 3;
|
|
||||||
string node_pubkey = 4;
|
|
||||||
string public_ipv4 = 5;
|
|
||||||
AppResource resource = 6;
|
|
||||||
repeated MappedPort exposed_ports = 7;
|
|
||||||
string created_at = 8;
|
|
||||||
string updated_at = 9;
|
|
||||||
uint64 nano_per_minute = 10;
|
|
||||||
uint64 locked_nano = 11;
|
|
||||||
string collected_at = 12;
|
|
||||||
}
|
|
||||||
|
|
||||||
message NewAppReq {
|
|
||||||
string package_url = 1;
|
|
||||||
string node_pubkey = 2;
|
|
||||||
AppResource resource = 3;
|
|
||||||
string uuid = 4;
|
|
||||||
string admin_pubkey = 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
message AppResource {
|
|
||||||
uint32 memory_mb = 1;
|
|
||||||
uint32 disk_mb = 2;
|
|
||||||
uint32 vcpu = 3;
|
|
||||||
repeated uint32 ports = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
message NewAppRes {
|
|
||||||
string uuid = 1;
|
|
||||||
string status = 2;
|
|
||||||
string ip_address = 3;
|
|
||||||
repeated MappedPort mapped_ports = 4;
|
|
||||||
string error = 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
message MappedPort {
|
|
||||||
uint32 host_port = 1;
|
|
||||||
uint32 app_port = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
message DelAppReq {
|
|
||||||
string uuid= 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
message ListAppContractsReq {
|
|
||||||
string admin_pubkey = 1;
|
|
||||||
// string uuid = 2;
|
|
||||||
// string node_pubkey = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
service BrainAppCli {
|
|
||||||
rpc CreateApp (NewAppReq) returns (NewAppRes);
|
|
||||||
rpc DeleteApp (DelAppReq) returns (Empty);
|
|
||||||
rpc ListAppContracts (ListAppContractsReq) returns (stream AppContract);
|
|
||||||
}
|
|
||||||
|
|
||||||
message RegisterAppNodeReq {
|
|
||||||
string node_pubkey = 1;
|
|
||||||
string owner_pubkey = 2;
|
|
||||||
string main_ip = 3;
|
|
||||||
string country = 4;
|
|
||||||
string region = 5;
|
|
||||||
string city = 6;
|
|
||||||
}
|
|
||||||
|
|
||||||
message AppNodeResources {
|
|
||||||
string node_pubkey = 1;
|
|
||||||
uint32 avail_ports = 2;
|
|
||||||
uint32 avail_ipv4 = 3;
|
|
||||||
uint32 avail_ipv6 = 4;
|
|
||||||
uint32 avail_vcpus = 5;
|
|
||||||
uint32 avail_memory_mb = 6;
|
|
||||||
uint32 avail_storage_gb = 7;
|
|
||||||
uint32 max_ports_per_vm = 8;
|
|
||||||
}
|
|
||||||
|
|
||||||
message BrainMessageApp {
|
|
||||||
oneof Msg {
|
|
||||||
NewAppReq new_app_req = 1;
|
|
||||||
DelAppReq delete_app_req = 2;
|
|
||||||
// resource usage
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
message DaemonMessageApp {
|
|
||||||
oneof Msg {
|
|
||||||
string pubkey = 1;
|
|
||||||
NewAppRes new_app_res = 2;
|
|
||||||
AppNodeResources app_node_resources = 3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
message Pubkey {
|
|
||||||
string pubkey = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
service BrainAppDaemon {
|
|
||||||
rpc RegisterNode (RegisterAppNodeReq) returns (stream AppContract);
|
|
||||||
rpc BrainMessages (Pubkey) returns (stream BrainMessageApp);
|
|
||||||
rpc DaemonMessages (stream DaemonMessageApp) returns (Empty);
|
|
||||||
}
|
|
@ -6,11 +6,10 @@ import "shared.proto";
|
|||||||
|
|
||||||
|
|
||||||
message NewContainerRes {
|
message NewContainerRes {
|
||||||
string uuid = 1;
|
optional shared.UUID container_id = 1;
|
||||||
string status = 2;
|
string status = 2;
|
||||||
string ip_address = 3;
|
string ip_address = 3;
|
||||||
repeated shared.MappedPort mapped_ports = 4;
|
repeated shared.MappedPort mapped_ports = 4;
|
||||||
string error = 5;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
message ContainerInspectResp {
|
message ContainerInspectResp {
|
||||||
@ -31,7 +30,7 @@ message LogResp {
|
|||||||
|
|
||||||
message ContainerFilters {
|
message ContainerFilters {
|
||||||
string admin_pubkey = 1;
|
string admin_pubkey = 1;
|
||||||
optional string uuid= 2;
|
optional shared.UUID container_id = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
message ContainerListResp {
|
message ContainerListResp {
|
||||||
@ -39,50 +38,15 @@ message ContainerListResp {
|
|||||||
}
|
}
|
||||||
|
|
||||||
message DeleteContainerRes {
|
message DeleteContainerRes {
|
||||||
string uuid = 1;
|
optional shared.UUID container_id = 1;
|
||||||
string status = 2;
|
string status = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
service DaemonService {
|
||||||
|
|
||||||
message BrainMessage {
|
|
||||||
oneof Msg {
|
|
||||||
shared.Container new_container_req = 1;
|
|
||||||
ContainerFilters delete_container = 2;
|
|
||||||
ContainerFilters list_container = 3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
message DaemonMessage {
|
|
||||||
oneof Msg {
|
|
||||||
shared.Pubkey pubkey = 1;
|
|
||||||
NewContainerRes new_container_resp = 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// service DaemonService {
|
|
||||||
// rpc CreateContainer (shared.Container) returns (NewContainerRes);
|
|
||||||
// rpc DeleteContainer (ContainerFilters) returns (DeleteContainerRes);
|
|
||||||
// rpc ListContainers (ContainerFilters) returns (ContainerListResp);
|
|
||||||
// rpc InspectContainer (shared.UUID) returns (ContainerInspectResp);
|
|
||||||
// rpc ContainerLog (shared.UUID) returns (stream LogResp);
|
|
||||||
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
service BrainSgxCli {
|
|
||||||
rpc CreateContainer (shared.Container) returns (NewContainerRes);
|
rpc CreateContainer (shared.Container) returns (NewContainerRes);
|
||||||
rpc DeleteContainer (ContainerFilters) returns (shared.Empty);
|
rpc InspectContainer (shared.UUID) returns (ContainerInspectResp);
|
||||||
rpc ListContainers (ContainerFilters) returns (ContainerListResp);
|
|
||||||
// rpc InspectContainer (shared.UUID) returns (ContainerInspectResp);
|
|
||||||
// rpc ContainerLog (shared.UUID) returns (stream LogResp);
|
// rpc ContainerLog (shared.UUID) returns (stream LogResp);
|
||||||
|
rpc ListContainers (ContainerFilters) returns (ContainerListResp);
|
||||||
}
|
rpc DeleteContainer (ContainerFilters) returns (DeleteContainerRes);
|
||||||
|
|
||||||
service BrainSgxDaemon {
|
|
||||||
rpc RegisterNode (shared.RegisterNodeReq) returns
|
|
||||||
(stream shared.ContainerContracts);
|
|
||||||
rpc BrainMessages (shared.Pubkey) returns (stream BrainMessage);
|
|
||||||
rpc DaemonMessages (stream DaemonMessage) returns (shared.Empty);
|
|
||||||
|
|
||||||
}
|
}
|
@ -1,61 +0,0 @@
|
|||||||
syntax = "proto3";
|
|
||||||
|
|
||||||
package dtpm;
|
|
||||||
|
|
||||||
message Empty {
|
|
||||||
}
|
|
||||||
|
|
||||||
message DtpmConfigData {
|
|
||||||
repeated FileEntry filesystems = 1;
|
|
||||||
repeated EnvironmentEntry environments = 2;
|
|
||||||
repeated ChildProcess child_processes = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
message FileEntry {
|
|
||||||
string path = 1;
|
|
||||||
string content = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
message EnvironmentEntry {
|
|
||||||
string name = 1;
|
|
||||||
string value = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
message ChildProcess {
|
|
||||||
string path = 1;
|
|
||||||
repeated string arguments = 2;
|
|
||||||
RestartPolicy restart= 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
message RestartPolicy {
|
|
||||||
uint32 max_retries = 1;
|
|
||||||
uint32 delay_seconds = 2;
|
|
||||||
oneof policy_type {
|
|
||||||
bool Always = 3;
|
|
||||||
bool OnNonZeroExit = 4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
message DtpmSetConfigReq {
|
|
||||||
DtpmConfigData config_data = 1;
|
|
||||||
string metadata = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
message DtpmSetConfigRes {
|
|
||||||
string status = 1;
|
|
||||||
string error = 2;
|
|
||||||
}
|
|
||||||
message DtpmGetConfigReq {
|
|
||||||
Empty empty = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
message DtpmGetConfigRes {
|
|
||||||
DtpmConfigData config_data = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
service DtpmConfigManager {
|
|
||||||
rpc SetConfig(DtpmSetConfigReq) returns (DtpmSetConfigRes) {}
|
|
||||||
rpc GetConfig(DtpmGetConfigReq) returns (DtpmGetConfigRes) {}
|
|
||||||
}
|
|
@ -8,7 +8,11 @@ message SetConfigResponse {
|
|||||||
|
|
||||||
message Empty {
|
message Empty {
|
||||||
}
|
}
|
||||||
|
message UUID {
|
||||||
|
string uuid = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The main Config structure
|
||||||
message ManagerConfigPB {
|
message ManagerConfigPB {
|
||||||
repeated FileEntry filesystems = 1;
|
repeated FileEntry filesystems = 1;
|
||||||
repeated EnvironmentEntry environments = 2;
|
repeated EnvironmentEntry environments = 2;
|
||||||
@ -16,11 +20,13 @@ message ManagerConfigPB {
|
|||||||
Container container = 4;
|
Container container = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Represents a file entry with a path and content
|
||||||
message FileEntry {
|
message FileEntry {
|
||||||
string path = 1;
|
string path = 1;
|
||||||
string content = 2;
|
string content = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Represents an environment variable entry
|
||||||
message EnvironmentEntry {
|
message EnvironmentEntry {
|
||||||
string name = 1;
|
string name = 1;
|
||||||
string value = 2;
|
string value = 2;
|
||||||
@ -35,6 +41,7 @@ message RestartPolicy {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Represents a child process configuration
|
||||||
message ChildProcess {
|
message ChildProcess {
|
||||||
string path = 1;
|
string path = 1;
|
||||||
repeated string arguments = 2;
|
repeated string arguments = 2;
|
||||||
@ -51,41 +58,18 @@ message MappedPort {
|
|||||||
uint32 container_port = 2;
|
uint32 container_port = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
message ContainerContracts {
|
|
||||||
string uuid = 1;
|
|
||||||
string package_url = 2;
|
|
||||||
string admin_pubkey = 3;
|
|
||||||
string node_pubkey = 4;
|
|
||||||
repeated MappedPort exposed_ports = 5;
|
|
||||||
string created_at = 13;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
message Container {
|
message Container {
|
||||||
string package_url = 1;
|
optional string package_url = 1;
|
||||||
string node_pubkey = 2;
|
string node = 2;
|
||||||
Resource resource = 3;
|
Resource resource = 3;
|
||||||
string uuid = 4;
|
UUID uuid = 4;
|
||||||
string admin_pubkey = 5;
|
string admin_pubkey = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
message Resource {
|
message Resource {
|
||||||
uint32 memory_mb = 1;
|
uint32 memory_mb = 1;
|
||||||
uint32 disk_mb = 2;
|
uint32 disk_mb = 2;
|
||||||
uint32 vcpu = 3;
|
uint32 vcpu = 3;
|
||||||
repeated uint32 ports = 4;
|
repeated uint32 ports = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
message RegisterNodeReq {
|
|
||||||
string node_pubkey = 1;
|
|
||||||
string owner_pubkey = 2;
|
|
||||||
string main_ip = 3;
|
|
||||||
string country = 4;
|
|
||||||
string region = 5;
|
|
||||||
string city = 6;
|
|
||||||
}
|
|
||||||
|
|
||||||
message Pubkey {
|
|
||||||
string pubkey = 1;
|
|
||||||
}
|
|
@ -5,14 +5,6 @@ pub mod pb {
|
|||||||
pub mod daemon {
|
pub mod daemon {
|
||||||
tonic::include_proto!("deamon");
|
tonic::include_proto!("deamon");
|
||||||
}
|
}
|
||||||
|
|
||||||
pub mod brain {
|
|
||||||
tonic::include_proto!("brain");
|
|
||||||
}
|
|
||||||
|
|
||||||
pub mod dtpm {
|
|
||||||
tonic::include_proto!("dtpm");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub mod types;
|
pub mod types;
|
||||||
|
@ -1,3 +1 @@
|
|||||||
pub mod brain;
|
|
||||||
pub mod dtpm;
|
|
||||||
pub mod shared;
|
pub mod shared;
|
||||||
|
@ -1,81 +0,0 @@
|
|||||||
use crate::pb::brain::{AppResource, MappedPort, NewAppReq};
|
|
||||||
use serde::{Deserialize, Serialize};
|
|
||||||
|
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
|
|
||||||
pub struct Resource {
|
|
||||||
pub memory_mb: u32,
|
|
||||||
pub disk_mb: u32,
|
|
||||||
pub vcpu: u32,
|
|
||||||
pub port: Vec<u32>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<AppResource> for Resource {
|
|
||||||
fn from(pb_val: AppResource) -> Self {
|
|
||||||
Self {
|
|
||||||
memory_mb: pb_val.memory_mb,
|
|
||||||
disk_mb: pb_val.disk_mb,
|
|
||||||
vcpu: pb_val.vcpu,
|
|
||||||
port: pb_val.ports,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
impl From<Resource> for AppResource {
|
|
||||||
fn from(val: Resource) -> AppResource {
|
|
||||||
AppResource {
|
|
||||||
memory_mb: val.memory_mb,
|
|
||||||
disk_mb: val.disk_mb,
|
|
||||||
vcpu: val.vcpu,
|
|
||||||
ports: val.port,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
|
|
||||||
pub struct AppDeployConfig {
|
|
||||||
pub package_url: String,
|
|
||||||
pub resource: Resource,
|
|
||||||
#[serde(default)]
|
|
||||||
pub uuid: String,
|
|
||||||
// #[serde(default)]
|
|
||||||
pub admin_pubkey: String,
|
|
||||||
pub node_pubkey: String,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<NewAppReq> for AppDeployConfig {
|
|
||||||
fn from(pb_val: NewAppReq) -> Self {
|
|
||||||
Self {
|
|
||||||
package_url: pb_val.package_url,
|
|
||||||
resource: pb_val.resource.map(Resource::from).unwrap_or_default(),
|
|
||||||
uuid: pb_val.uuid,
|
|
||||||
admin_pubkey: pb_val.admin_pubkey,
|
|
||||||
node_pubkey: pb_val.node_pubkey,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<AppDeployConfig> for NewAppReq {
|
|
||||||
fn from(val: AppDeployConfig) -> NewAppReq {
|
|
||||||
NewAppReq {
|
|
||||||
package_url: val.package_url,
|
|
||||||
resource: Some(val.resource.into()),
|
|
||||||
uuid: val.uuid,
|
|
||||||
admin_pubkey: val.admin_pubkey,
|
|
||||||
node_pubkey: val.node_pubkey,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<(u16, u16)> for MappedPort {
|
|
||||||
fn from(val: (u16, u16)) -> Self {
|
|
||||||
Self {
|
|
||||||
host_port: val.0 as u32,
|
|
||||||
app_port: val.1 as u32,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<MappedPort> for (u16, u16) {
|
|
||||||
fn from(val: MappedPort) -> Self {
|
|
||||||
(val.host_port as u16, val.app_port as u16)
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,201 +0,0 @@
|
|||||||
use crate::pb::dtpm as pb_dtpm;
|
|
||||||
use base64::{engine::general_purpose::STANDARD as BASE64, Engine};
|
|
||||||
use serde::{Deserialize, Serialize};
|
|
||||||
|
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
|
|
||||||
pub struct DtpmConfig {
|
|
||||||
pub filesystems: Vec<FileEntry>,
|
|
||||||
pub environments: Vec<EnvironmentEntry>,
|
|
||||||
pub child_processes: Vec<ChildProcess>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<pb_dtpm::DtpmConfigData> for DtpmConfig {
|
|
||||||
fn from(pb_val: pb_dtpm::DtpmConfigData) -> Self {
|
|
||||||
DtpmConfig {
|
|
||||||
filesystems: pb_val
|
|
||||||
.filesystems
|
|
||||||
.into_iter()
|
|
||||||
.map(FileEntry::from)
|
|
||||||
.collect(),
|
|
||||||
environments: pb_val
|
|
||||||
.environments
|
|
||||||
.into_iter()
|
|
||||||
.map(EnvironmentEntry::from)
|
|
||||||
.collect(),
|
|
||||||
child_processes: pb_val
|
|
||||||
.child_processes
|
|
||||||
.into_iter()
|
|
||||||
.map(ChildProcess::from)
|
|
||||||
.collect(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<DtpmConfig> for pb_dtpm::DtpmConfigData {
|
|
||||||
fn from(val: DtpmConfig) -> pb_dtpm::DtpmConfigData {
|
|
||||||
pb_dtpm::DtpmConfigData {
|
|
||||||
filesystems: val.filesystems.into_iter().map(Into::into).collect(),
|
|
||||||
environments: val.environments.into_iter().map(Into::into).collect(),
|
|
||||||
child_processes: val.child_processes.into_iter().map(Into::into).collect(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
||||||
pub struct FileEntry {
|
|
||||||
pub path: String,
|
|
||||||
pub content: FileContent,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<pb_dtpm::FileEntry> for FileEntry {
|
|
||||||
fn from(pb_val: pb_dtpm::FileEntry) -> Self {
|
|
||||||
FileEntry {
|
|
||||||
path: pb_val.path,
|
|
||||||
content: FileContent::Data(pb_val.content),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
impl From<FileEntry> for pb_dtpm::FileEntry {
|
|
||||||
fn from(val: FileEntry) -> pb_dtpm::FileEntry {
|
|
||||||
pb_dtpm::FileEntry {
|
|
||||||
path: val.path,
|
|
||||||
content: match val.content {
|
|
||||||
FileContent::Data(data) => data,
|
|
||||||
FileContent::Path(path) => path,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
||||||
pub enum FileContent {
|
|
||||||
#[serde(rename = "path")]
|
|
||||||
Path(String),
|
|
||||||
#[serde(rename = "data")]
|
|
||||||
Data(String),
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
||||||
pub struct EnvironmentEntry {
|
|
||||||
pub name: String,
|
|
||||||
pub value: String,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<pb_dtpm::EnvironmentEntry> for EnvironmentEntry {
|
|
||||||
fn from(pb_val: pb_dtpm::EnvironmentEntry) -> Self {
|
|
||||||
EnvironmentEntry {
|
|
||||||
name: pb_val.name,
|
|
||||||
value: pb_val.value,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<EnvironmentEntry> for pb_dtpm::EnvironmentEntry {
|
|
||||||
fn from(val: EnvironmentEntry) -> pb_dtpm::EnvironmentEntry {
|
|
||||||
pb_dtpm::EnvironmentEntry {
|
|
||||||
name: val.name,
|
|
||||||
value: val.value,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
||||||
pub struct ChildProcess {
|
|
||||||
pub path: String,
|
|
||||||
pub arguments: Vec<String>,
|
|
||||||
pub restart: Option<RestartPolicy>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<pb_dtpm::ChildProcess> for ChildProcess {
|
|
||||||
fn from(pb_val: pb_dtpm::ChildProcess) -> Self {
|
|
||||||
ChildProcess {
|
|
||||||
path: pb_val.path,
|
|
||||||
arguments: pb_val.arguments,
|
|
||||||
restart: pb_val.restart.map(RestartPolicy::from),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<ChildProcess> for pb_dtpm::ChildProcess {
|
|
||||||
fn from(val: ChildProcess) -> pb_dtpm::ChildProcess {
|
|
||||||
pb_dtpm::ChildProcess {
|
|
||||||
path: val.path,
|
|
||||||
arguments: val.arguments,
|
|
||||||
restart: val.restart.map(Into::into),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy, Serialize, Deserialize, Default)]
|
|
||||||
pub struct RestartPolicy {
|
|
||||||
pub max_retries: u32,
|
|
||||||
pub delay_seconds: u32,
|
|
||||||
pub policy: Option<RestartPolicyType>,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
|
|
||||||
pub enum RestartPolicyType {
|
|
||||||
Always(bool),
|
|
||||||
OnNonZeroExit(bool),
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Default for RestartPolicyType {
|
|
||||||
fn default() -> Self {
|
|
||||||
RestartPolicyType::Always(true)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
impl From<pb_dtpm::RestartPolicy> for RestartPolicy {
|
|
||||||
fn from(pb_val: pb_dtpm::RestartPolicy) -> Self {
|
|
||||||
RestartPolicy {
|
|
||||||
max_retries: pb_val.max_retries,
|
|
||||||
delay_seconds: pb_val.delay_seconds,
|
|
||||||
policy: match pb_val.policy_type {
|
|
||||||
Some(pb_dtpm::restart_policy::PolicyType::Always(_)) => {
|
|
||||||
Some(RestartPolicyType::Always(true))
|
|
||||||
}
|
|
||||||
Some(pb_dtpm::restart_policy::PolicyType::OnNonZeroExit(_)) => {
|
|
||||||
Some(RestartPolicyType::OnNonZeroExit(true))
|
|
||||||
}
|
|
||||||
None => None,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<RestartPolicy> for pb_dtpm::RestartPolicy {
|
|
||||||
fn from(val: RestartPolicy) -> pb_dtpm::RestartPolicy {
|
|
||||||
pb_dtpm::RestartPolicy {
|
|
||||||
max_retries: val.max_retries,
|
|
||||||
delay_seconds: val.delay_seconds,
|
|
||||||
policy_type: match val.policy {
|
|
||||||
Some(RestartPolicyType::Always(_)) => {
|
|
||||||
Some(pb_dtpm::restart_policy::PolicyType::Always(true))
|
|
||||||
}
|
|
||||||
Some(RestartPolicyType::OnNonZeroExit(_)) => {
|
|
||||||
Some(pb_dtpm::restart_policy::PolicyType::OnNonZeroExit(true))
|
|
||||||
}
|
|
||||||
None => None,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl DtpmConfig {
|
|
||||||
pub fn from_path(path: &str) -> Result<Self, Box<dyn std::error::Error>> {
|
|
||||||
let config_str = std::fs::read_to_string(path)?;
|
|
||||||
Ok(serde_yml::from_str(&config_str)?)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn load_data(mut self) -> Result<Self, Box<dyn std::error::Error>> {
|
|
||||||
self.filesystems.iter_mut().for_each(|x| {
|
|
||||||
if let FileContent::Path(path) = &x.content {
|
|
||||||
let content =
|
|
||||||
std::fs::read(path).unwrap_or_else(|_| panic!("Unable to read file {path}"));
|
|
||||||
let encoded = BASE64.encode(content);
|
|
||||||
x.content = FileContent::Data(encoded);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Ok(self)
|
|
||||||
}
|
|
||||||
}
|
|
@ -137,7 +137,7 @@ impl From<ChildProcess> for pb_shared::ChildProcess {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy, Serialize, Deserialize, Default)]
|
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
|
||||||
pub struct RestartPolicy {
|
pub struct RestartPolicy {
|
||||||
pub max_retries: u32,
|
pub max_retries: u32,
|
||||||
pub delay_seconds: u32,
|
pub delay_seconds: u32,
|
||||||
@ -193,23 +193,22 @@ impl From<RestartPolicy> for pb_shared::RestartPolicy {
|
|||||||
|
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
|
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
|
||||||
pub struct Container {
|
pub struct Container {
|
||||||
pub package_url: String,
|
pub package_url: Option<String>,
|
||||||
|
pub node: String,
|
||||||
pub resource: Option<Resource>,
|
pub resource: Option<Resource>,
|
||||||
#[serde(default)]
|
pub uuid: Option<Uuid>,
|
||||||
pub uuid: String,
|
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub admin_pubkey: String,
|
pub admin_pubkey: String,
|
||||||
pub node_pubkey: String,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<pb_shared::Container> for Container {
|
impl From<pb_shared::Container> for Container {
|
||||||
fn from(pb_val: pb_shared::Container) -> Self {
|
fn from(pb_val: pb_shared::Container) -> Self {
|
||||||
Self {
|
Self {
|
||||||
package_url: pb_val.package_url,
|
package_url: pb_val.package_url,
|
||||||
|
node: pb_val.node,
|
||||||
resource: pb_val.resource.map(Resource::from),
|
resource: pb_val.resource.map(Resource::from),
|
||||||
uuid: pb_val.uuid,
|
uuid: pb_val.uuid.map(Uuid::from),
|
||||||
admin_pubkey: pb_val.admin_pubkey,
|
admin_pubkey: pb_val.admin_pubkey,
|
||||||
node_pubkey: pb_val.node_pubkey,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -218,15 +217,29 @@ impl From<Container> for pb_shared::Container {
|
|||||||
fn from(val: Container) -> pb_shared::Container {
|
fn from(val: Container) -> pb_shared::Container {
|
||||||
pb_shared::Container {
|
pb_shared::Container {
|
||||||
package_url: val.package_url,
|
package_url: val.package_url,
|
||||||
|
node: val.node,
|
||||||
resource: val.resource.map(Into::into),
|
resource: val.resource.map(Into::into),
|
||||||
// uuid: val.uuid.map(Into::into),
|
uuid: val.uuid.map(Into::into),
|
||||||
uuid: val.uuid,
|
|
||||||
admin_pubkey: val.admin_pubkey,
|
admin_pubkey: val.admin_pubkey,
|
||||||
node_pubkey: val.node_pubkey,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
|
||||||
|
pub struct Uuid {
|
||||||
|
pub uuid: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<pb_shared::Uuid> for Uuid {
|
||||||
|
fn from(pb_val: pb_shared::Uuid) -> Self {
|
||||||
|
Self { uuid: pb_val.uuid }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
impl From<Uuid> for pb_shared::Uuid {
|
||||||
|
fn from(val: Uuid) -> pb_shared::Uuid {
|
||||||
|
pb_shared::Uuid { uuid: val.uuid }
|
||||||
|
}
|
||||||
|
}
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
|
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
|
||||||
pub struct Resource {
|
pub struct Resource {
|
||||||
pub memory_mb: u32,
|
pub memory_mb: u32,
|
||||||
@ -256,21 +269,6 @@ impl From<Resource> for pb_shared::Resource {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<(u16, u16)> for pb_shared::MappedPort {
|
|
||||||
fn from(val: (u16, u16)) -> Self {
|
|
||||||
Self {
|
|
||||||
host_port: val.0 as u32,
|
|
||||||
container_port: val.1 as u32,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<pb_shared::MappedPort> for (u16, u16) {
|
|
||||||
fn from(val: pb_shared::MappedPort) -> Self {
|
|
||||||
(val.host_port as u16, val.container_port as u16)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Config {
|
impl Config {
|
||||||
pub fn from_path(path: &str) -> Result<Self, Box<dyn std::error::Error>> {
|
pub fn from_path(path: &str) -> Result<Self, Box<dyn std::error::Error>> {
|
||||||
let config_str = std::fs::read_to_string(path)?;
|
let config_str = std::fs::read_to_string(path)?;
|
||||||
|
Loading…
Reference in New Issue
Block a user