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 }