lib

Core libraries for Radroots
git clone https://radroots.dev/git/lib.git
Log | Files | Refs | README | LICENSE

model.rs (4908B)


      1 use std::collections::BTreeMap;
      2 use std::path::PathBuf;
      3 
      4 use serde::{Deserialize, Serialize};
      5 
      6 #[derive(Debug, Clone, Deserialize, PartialEq, Eq)]
      7 pub struct RadrootsRuntimeManagementContract {
      8     pub schema: String,
      9     pub schema_version: u32,
     10     pub owner_doc: String,
     11     pub runtime_registry: String,
     12     pub distribution_contract: String,
     13     pub capabilities_contract: String,
     14     pub defaults: ManagementDefaults,
     15     pub management_clients: RuntimeGroups,
     16     pub managed_runtime_targets: RuntimeGroups,
     17     pub lifecycle: LifecycleContract,
     18     pub mode: BTreeMap<String, ManagementModeContract>,
     19     pub paths: BTreeMap<String, ManagementPathContract>,
     20     pub instance_metadata: InstanceMetadataContract,
     21     pub bootstrap: BTreeMap<String, BootstrapRuntimeContract>,
     22 }
     23 
     24 #[derive(Debug, Clone, Deserialize, PartialEq, Eq)]
     25 pub struct ManagementDefaults {
     26     pub instance_cardinality: String,
     27     pub managed_runtime_lookup: String,
     28     pub explicit_runtime_endpoint_overrides_precede_managed_instance_binding: bool,
     29     pub global_path_mutation_forbidden: bool,
     30 }
     31 
     32 #[derive(Debug, Clone, Deserialize, PartialEq, Eq, Default)]
     33 pub struct RuntimeGroups {
     34     #[serde(default)]
     35     pub active: Vec<String>,
     36     #[serde(default)]
     37     pub defined: Vec<String>,
     38     #[serde(default)]
     39     pub bootstrap_only: Vec<String>,
     40 }
     41 
     42 #[derive(Debug, Clone, Deserialize, PartialEq, Eq)]
     43 pub struct LifecycleContract {
     44     #[serde(default)]
     45     pub actions: Vec<String>,
     46     #[serde(default)]
     47     pub destructive_actions: Vec<String>,
     48     #[serde(default)]
     49     pub health_states: Vec<String>,
     50 }
     51 
     52 #[derive(Debug, Clone, Deserialize, PartialEq, Eq)]
     53 pub struct ManagementModeContract {
     54     pub contract_state: String,
     55     #[serde(default)]
     56     pub platforms: Vec<String>,
     57     #[serde(default)]
     58     pub supported_profiles: Vec<String>,
     59     pub service_manager_integration: bool,
     60     pub uses_absolute_binary_paths: bool,
     61     pub default_instance_cardinality: String,
     62     pub requires_explicit_pid_tracking: Option<bool>,
     63     pub requires_explicit_log_tracking: Option<bool>,
     64 }
     65 
     66 #[derive(Debug, Clone, Deserialize, PartialEq, Eq)]
     67 pub struct ManagementPathContract {
     68     pub shared_namespace: String,
     69     pub instance_registry_root_class: String,
     70     pub instance_registry_rel: String,
     71     pub artifact_cache_root_class: String,
     72     pub artifact_cache_rel: String,
     73     pub install_root_class: String,
     74     pub install_root_rel: String,
     75     pub state_root_class: String,
     76     pub state_root_rel: String,
     77     pub logs_root_class: String,
     78     pub logs_root_rel: String,
     79     pub run_root_class: String,
     80     pub run_root_rel: String,
     81     pub secrets_root_class: String,
     82     pub secrets_namespace_rel: String,
     83 }
     84 
     85 #[derive(Debug, Clone, Deserialize, PartialEq, Eq)]
     86 pub struct InstanceMetadataContract {
     87     #[serde(default)]
     88     pub required_fields: Vec<String>,
     89     #[serde(default)]
     90     pub optional_fields: Vec<String>,
     91 }
     92 
     93 #[derive(Debug, Clone, Deserialize, PartialEq, Eq)]
     94 pub struct BootstrapRuntimeContract {
     95     pub runtime_id: String,
     96     pub management_mode: String,
     97     pub default_instance_id: String,
     98     pub install_strategy: String,
     99     pub config_format: String,
    100     pub requires_bootstrap_secret: bool,
    101     pub requires_config_bootstrap: bool,
    102     pub requires_signer_provider: bool,
    103     pub health_surface: String,
    104     pub preferred_cli_binding: bool,
    105     pub notes: Option<String>,
    106 }
    107 
    108 #[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
    109 #[serde(rename_all = "snake_case")]
    110 pub enum ManagedRuntimeInstallState {
    111     NotInstalled,
    112     Installed,
    113     Configured,
    114     Failed,
    115 }
    116 
    117 #[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
    118 #[serde(rename_all = "snake_case")]
    119 pub enum ManagedRuntimeHealthState {
    120     NotInstalled,
    121     Stopped,
    122     Starting,
    123     Running,
    124     Degraded,
    125     Failed,
    126 }
    127 
    128 #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
    129 pub struct ManagedRuntimeInstanceRecord {
    130     pub runtime_id: String,
    131     pub instance_id: String,
    132     pub management_mode: String,
    133     pub install_state: ManagedRuntimeInstallState,
    134     pub binary_path: PathBuf,
    135     pub config_path: PathBuf,
    136     pub logs_path: PathBuf,
    137     pub run_path: PathBuf,
    138     pub installed_version: String,
    139     pub health_endpoint: Option<String>,
    140     pub secret_material_ref: Option<String>,
    141     pub last_started_at: Option<String>,
    142     pub last_stopped_at: Option<String>,
    143     pub notes: Option<String>,
    144 }
    145 
    146 #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
    147 pub struct ManagedRuntimeInstanceRegistry {
    148     pub schema: String,
    149     pub schema_version: u32,
    150     #[serde(default)]
    151     pub instances: Vec<ManagedRuntimeInstanceRecord>,
    152 }
    153 
    154 impl Default for ManagedRuntimeInstanceRegistry {
    155     fn default() -> Self {
    156         Self {
    157             schema: "radroots_runtime-instance-registry".to_string(),
    158             schema_version: 1,
    159             instances: Vec::new(),
    160         }
    161     }
    162 }