diff --git a/crates/wadm/src/scaler/secretscaler.rs b/crates/wadm/src/scaler/secretscaler.rs index 60d4be81..c597d573 100644 --- a/crates/wadm/src/scaler/secretscaler.rs +++ b/crates/wadm/src/scaler/secretscaler.rs @@ -1,7 +1,8 @@ use anyhow::Result; use async_trait::async_trait; +use serde::{Deserialize, Serialize}; use std::{ - collections::HashMap, + collections::{BTreeMap, HashMap}, hash::{DefaultHasher, Hash, Hasher}, }; use tokio::sync::RwLock; @@ -29,6 +30,13 @@ pub struct SecretScaler { policy: Policy, } +#[derive(Deserialize, Serialize)] +struct PolicyProperties { + #[serde(rename = "type")] + policy_type: String, + properties: BTreeMap, +} + impl SecretScaler { pub fn new( secret_name: String, @@ -107,7 +115,7 @@ impl Scaler for SecretScaler { (Ok(_config), scaler_config) => { debug!(self.secret_name, "Putting secret"); - let cfg = merge_policy_config(&self.policy, &scaler_config)?; + let cfg = merge_policy_properties(&self.policy, &scaler_config)?; *self.status.write().await = StatusInfo::reconciling("Secret out of sync"); Ok(vec![Command::PutConfig(PutConfig { @@ -131,21 +139,24 @@ impl Scaler for SecretScaler { } } -fn merge_policy_config( +fn merge_policy_properties( policy: &Policy, reference: &SecretSourceProperty, ) -> anyhow::Result> { let mut cfg: HashMap = reference.clone().try_into()?; - let mut p = policy.properties.clone(); - p.insert("type".to_string(), policy.policy_type.clone()); - let policy_json = serde_json::to_string(&p)?; - cfg.insert("policy".to_string(), policy_json); + + let properties = PolicyProperties { + policy_type: policy.policy_type.clone(), + properties: policy.properties.clone(), + }; + let policy_json = serde_json::to_string(&properties)?; + cfg.insert("policy_properties".to_string(), policy_json); Ok(cfg) } #[cfg(test)] mod test { - use super::merge_policy_config; + use super::merge_policy_properties; use crate::{ commands::{Command, PutConfig}, @@ -192,7 +203,7 @@ mod test { StatusType::Reconciling ); - let cfg = merge_policy_config(&policy, &secret.source).expect("failed to merge policy"); + let cfg = merge_policy_properties(&policy, &secret.source).expect("failed to merge policy"); assert_eq!( secret_scaler