mirror of
https://github.com/moghtech/komodo.git
synced 2026-04-28 11:49:39 -05:00
partial config from files first merged onto full config default before diff with remote
This commit is contained in:
@@ -28,13 +28,16 @@ pub struct ToUpdateItem<T> {
|
||||
|
||||
pub trait ResourceSync: Sized {
|
||||
type Config: Clone
|
||||
+ Default
|
||||
+ Send
|
||||
+ From<Self::PartialConfig>
|
||||
+ PartialDiff<Self::PartialConfig, Self::ConfigDiff>
|
||||
+ 'static;
|
||||
type Info: Default + 'static;
|
||||
type PartialConfig: std::fmt::Debug
|
||||
+ Clone
|
||||
+ Send
|
||||
+ From<Self::Config>
|
||||
+ From<Self::ConfigDiff>
|
||||
+ Serialize
|
||||
+ MaybeNone
|
||||
@@ -158,6 +161,7 @@ pub trait ResourceSync: Sized {
|
||||
}
|
||||
}
|
||||
|
||||
/// Gets all the resources to update, logging along the way.
|
||||
pub fn get_updates<Resource: ResourceSync>(
|
||||
resources: Vec<ResourceToml<Resource::PartialConfig>>,
|
||||
delete: bool,
|
||||
@@ -179,6 +183,11 @@ pub fn get_updates<Resource: ResourceSync>(
|
||||
for mut resource in resources {
|
||||
match map.get(&resource.name) {
|
||||
Some(original) => {
|
||||
// First merge toml resource config (partial) onto default resource config.
|
||||
// Makes sure things that aren't defined in toml (come through as None) actually get removed.
|
||||
let config: Resource::Config = resource.config.into();
|
||||
resource.config = config.into();
|
||||
|
||||
let diff = Resource::get_diff(
|
||||
original.config.clone(),
|
||||
resource.config,
|
||||
|
||||
@@ -61,10 +61,27 @@ pub struct AlerterConfig {
|
||||
pub endpoint: AlerterEndpoint,
|
||||
}
|
||||
|
||||
impl AlerterConfig {
|
||||
pub fn builder() -> AlerterConfigBuilder {
|
||||
AlerterConfigBuilder::default()
|
||||
}
|
||||
}
|
||||
|
||||
fn default_enabled() -> bool {
|
||||
true
|
||||
}
|
||||
|
||||
impl Default for AlerterConfig {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
enabled: default_enabled(),
|
||||
alert_types: Default::default(),
|
||||
resources: Default::default(),
|
||||
endpoint: Default::default(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ENDPOINTS
|
||||
|
||||
#[typeshare]
|
||||
|
||||
@@ -182,6 +182,30 @@ fn default_webhook_enabled() -> bool {
|
||||
true
|
||||
}
|
||||
|
||||
impl Default for BuildConfig {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
builder_id: Default::default(),
|
||||
skip_secret_interp: Default::default(),
|
||||
version: Default::default(),
|
||||
repo: Default::default(),
|
||||
branch: default_branch(),
|
||||
commit: Default::default(),
|
||||
github_account: Default::default(),
|
||||
docker_account: Default::default(),
|
||||
docker_organization: Default::default(),
|
||||
pre_build: Default::default(),
|
||||
build_path: default_build_path(),
|
||||
dockerfile_path: default_dockerfile_path(),
|
||||
build_args: Default::default(),
|
||||
labels: Default::default(),
|
||||
extra_args: Default::default(),
|
||||
use_buildx: Default::default(),
|
||||
webhook_enabled: default_webhook_enabled(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[typeshare]
|
||||
#[derive(Debug, Clone, Copy, Default, Serialize, Deserialize)]
|
||||
pub struct BuildActionState {
|
||||
|
||||
@@ -46,6 +46,12 @@ pub enum BuilderConfig {
|
||||
Aws(AwsBuilderConfig),
|
||||
}
|
||||
|
||||
impl Default for BuilderConfig {
|
||||
fn default() -> Self {
|
||||
Self::Aws(Default::default())
|
||||
}
|
||||
}
|
||||
|
||||
/// Partial representation of [BuilderConfig]
|
||||
#[typeshare]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, EnumVariants)]
|
||||
|
||||
@@ -169,6 +169,30 @@ fn default_network() -> String {
|
||||
String::from("host")
|
||||
}
|
||||
|
||||
impl Default for DeploymentConfig {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
server_id: Default::default(),
|
||||
send_alerts: default_send_alerts(),
|
||||
image: Default::default(),
|
||||
skip_secret_interp: Default::default(),
|
||||
redeploy_on_build: Default::default(),
|
||||
term_signal_labels: default_term_signal_labels(),
|
||||
termination_signal: Default::default(),
|
||||
termination_timeout: default_termination_timeout(),
|
||||
ports: Default::default(),
|
||||
volumes: Default::default(),
|
||||
environment: Default::default(),
|
||||
labels: Default::default(),
|
||||
network: default_network(),
|
||||
restart: Default::default(),
|
||||
command: Default::default(),
|
||||
extra_args: Default::default(),
|
||||
docker_account: Default::default(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[typeshare]
|
||||
#[derive(
|
||||
Serialize, Deserialize, Debug, Clone, PartialEq, EnumVariants,
|
||||
|
||||
@@ -51,9 +51,7 @@ pub type _PartialProcedureConfig = PartialProcedureConfig;
|
||||
|
||||
/// Config for the [Procedure]
|
||||
#[typeshare]
|
||||
#[derive(
|
||||
Debug, Clone, Default, Serialize, Deserialize, Partial, Builder,
|
||||
)]
|
||||
#[derive(Debug, Clone, Serialize, Deserialize, Partial, Builder)]
|
||||
#[partial_derive(Debug, Clone, Default, Serialize, Deserialize)]
|
||||
#[partial(skip_serializing_none, from, diff)]
|
||||
pub struct ProcedureConfig {
|
||||
@@ -69,10 +67,25 @@ pub struct ProcedureConfig {
|
||||
pub webhook_enabled: bool,
|
||||
}
|
||||
|
||||
impl ProcedureConfig {
|
||||
pub fn builder() -> ProcedureConfigBuilder {
|
||||
ProcedureConfigBuilder::default()
|
||||
}
|
||||
}
|
||||
|
||||
fn default_webhook_enabled() -> bool {
|
||||
true
|
||||
}
|
||||
|
||||
impl Default for ProcedureConfig {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
stages: Default::default(),
|
||||
webhook_enabled: default_webhook_enabled(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// A single stage of a procedure. Runs a list of executions in parallel.
|
||||
#[typeshare]
|
||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||
@@ -83,6 +96,7 @@ pub struct ProcedureStage {
|
||||
#[serde(default = "default_enabled")]
|
||||
pub enabled: bool,
|
||||
/// The executions in the stage
|
||||
#[serde(default)]
|
||||
pub executions: Vec<EnabledExecution>,
|
||||
}
|
||||
|
||||
|
||||
@@ -132,6 +132,21 @@ fn default_webhook_enabled() -> bool {
|
||||
true
|
||||
}
|
||||
|
||||
impl Default for RepoConfig {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
server_id: Default::default(),
|
||||
repo: Default::default(),
|
||||
branch: default_branch(),
|
||||
commit: Default::default(),
|
||||
github_account: Default::default(),
|
||||
on_clone: Default::default(),
|
||||
on_pull: Default::default(),
|
||||
webhook_enabled: default_webhook_enabled(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[typeshare]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Copy, Default)]
|
||||
pub struct RepoActionState {
|
||||
|
||||
@@ -182,6 +182,28 @@ fn default_disk_critical() -> f64 {
|
||||
95.0
|
||||
}
|
||||
|
||||
impl Default for ServerConfig {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
address: Default::default(),
|
||||
enabled: default_enabled(),
|
||||
stats_monitoring: default_stats_monitoring(),
|
||||
auto_prune: default_auto_prune(),
|
||||
send_unreachable_alerts: default_send_alerts(),
|
||||
send_cpu_alerts: default_send_alerts(),
|
||||
send_mem_alerts: default_send_alerts(),
|
||||
send_disk_alerts: default_send_alerts(),
|
||||
region: Default::default(),
|
||||
cpu_warning: default_cpu_warning(),
|
||||
cpu_critical: default_cpu_critical(),
|
||||
mem_warning: default_mem_warning(),
|
||||
mem_critical: default_mem_critical(),
|
||||
disk_warning: default_disk_warning(),
|
||||
disk_critical: default_disk_critical(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Current pending actions on the server.
|
||||
#[typeshare]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Copy, Default)]
|
||||
|
||||
@@ -65,6 +65,12 @@ pub struct AwsServerTemplateConfig {
|
||||
pub volumes: Vec<AwsVolume>,
|
||||
}
|
||||
|
||||
impl AwsServerTemplateConfig {
|
||||
pub fn builder() -> AwsServerTemplateConfigBuilder {
|
||||
AwsServerTemplateConfigBuilder::default()
|
||||
}
|
||||
}
|
||||
|
||||
fn default_region() -> String {
|
||||
String::from("us-east-1")
|
||||
}
|
||||
|
||||
@@ -79,6 +79,12 @@ pub struct HetznerServerTemplateConfig {
|
||||
pub port: i32,
|
||||
}
|
||||
|
||||
impl HetznerServerTemplateConfig {
|
||||
pub fn builder() -> HetznerServerTemplateConfigBuilder {
|
||||
HetznerServerTemplateConfigBuilder::default()
|
||||
}
|
||||
}
|
||||
|
||||
fn default_port() -> i32 {
|
||||
8120
|
||||
}
|
||||
|
||||
@@ -54,6 +54,12 @@ pub enum ServerTemplateConfig {
|
||||
Hetzner(hetzner::HetznerServerTemplateConfig),
|
||||
}
|
||||
|
||||
impl Default for ServerTemplateConfig {
|
||||
fn default() -> Self {
|
||||
Self::Aws(Default::default())
|
||||
}
|
||||
}
|
||||
|
||||
#[typeshare]
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, EnumVariants)]
|
||||
#[variant_derive(
|
||||
|
||||
Reference in New Issue
Block a user