Compare commits
	
		
			No commits in common. "df9e21807e9e159c36b979ff919b763555edd9dc" and "b1bf4fd4d5408c95ef96b0f3247c8ab62f56073d" have entirely different histories.
		
	
	
		
			df9e21807e
			...
			b1bf4fd4d5
		
	
		
| @ -3,6 +3,7 @@ use serde::Serialize; | |||||||
| 
 | 
 | ||||||
| use crate::topology::Topology; | use crate::topology::Topology; | ||||||
| 
 | 
 | ||||||
|  | use super::Application; | ||||||
| /// An ApplicationFeature provided by harmony, such as Backups, Monitoring, MultisiteAvailability,
 | /// An ApplicationFeature provided by harmony, such as Backups, Monitoring, MultisiteAvailability,
 | ||||||
| /// ContinuousIntegration, ContinuousDelivery
 | /// ContinuousIntegration, ContinuousDelivery
 | ||||||
| #[async_trait] | #[async_trait] | ||||||
|  | |||||||
| @ -3,7 +3,7 @@ use std::{backtrace, collections::HashMap}; | |||||||
| use k8s_openapi::{Metadata, NamespaceResourceScope, Resource}; | use k8s_openapi::{Metadata, NamespaceResourceScope, Resource}; | ||||||
| use log::debug; | use log::debug; | ||||||
| use serde::Serialize; | use serde::Serialize; | ||||||
| use serde_yaml::Value; | use serde_yaml::{Mapping, Value}; | ||||||
| use url::Url; | use url::Url; | ||||||
| 
 | 
 | ||||||
| use crate::modules::application::features::CDApplicationConfig; | use crate::modules::application::features::CDApplicationConfig; | ||||||
| @ -186,7 +186,7 @@ impl ArgoApplication { | |||||||
|         let project = &self.project; |         let project = &self.project; | ||||||
|         let source = &self.source; |         let source = &self.source; | ||||||
| 
 | 
 | ||||||
|         let yaml_str = format!( |         let mut yaml_str = format!( | ||||||
|             r#" |             r#" | ||||||
| apiVersion: argoproj.io/v1alpha1 | apiVersion: argoproj.io/v1alpha1 | ||||||
| kind: Application | kind: Application | ||||||
| @ -210,148 +210,20 @@ spec: | |||||||
| "#
 | "#
 | ||||||
|         ); |         ); | ||||||
| 
 | 
 | ||||||
|         let mut yaml_value: Value = |         yaml_str.push_str( | ||||||
|             serde_yaml::from_str(yaml_str.as_str()).expect("couldn't parse string to YAML"); |             &serde_yaml::to_string(&source.clone()) | ||||||
| 
 |                 .expect("couldn't serialize source to yaml string"), | ||||||
|         let mut spec = yaml_value |  | ||||||
|             .get_mut("spec") |  | ||||||
|             .expect("couldn't get spec from yaml") |  | ||||||
|             .as_mapping_mut() |  | ||||||
|             .expect("couldn't unwrap spec as mutable mapping"); |  | ||||||
| 
 |  | ||||||
|         let source = |  | ||||||
|             serde_yaml::to_value(&self.source).expect("couldn't serialize source to value"); |  | ||||||
|         let sync_policy = serde_yaml::to_value(&self.sync_policy) |  | ||||||
|             .expect("couldn't serialize sync_policy to value"); |  | ||||||
|         let revision_history_limit = serde_yaml::to_value(&self.revision_history_limit) |  | ||||||
|             .expect("couldn't serialize revision_history_limit to value"); |  | ||||||
| 
 |  | ||||||
|         spec.insert( |  | ||||||
|             serde_yaml::to_value("source").expect("string to value failed"), |  | ||||||
|             source, |  | ||||||
|         ); |         ); | ||||||
|         spec.insert( |         yaml_str.push_str( | ||||||
|             serde_yaml::to_value("syncPolicy").expect("string to value failed"), |             &serde_yaml::to_string(&self.sync_policy) | ||||||
|             sync_policy, |                 .expect("couldn't serialize sync policy to yaml string"), | ||||||
|         ); |         ); | ||||||
|         spec.insert( |         yaml_str.push_str( | ||||||
|             serde_yaml::to_value("revisionHistoryLimit") |             &serde_yaml::to_string(&self.revision_history_limit) | ||||||
|                 .expect("couldn't convert str to yaml value"), |                 .expect("couldn't serialize revision history to yaml string"), | ||||||
|             revision_history_limit, |  | ||||||
|         ); |         ); | ||||||
| 
 | 
 | ||||||
|         debug!("spec: {}", serde_yaml::to_string(spec).unwrap()); |         debug!("yaml serialize of :\n{yaml_str}"); | ||||||
|         debug!( |         serde_yaml::from_str(&yaml_str).expect("Couldn't parse YAML") | ||||||
|             "entire yaml_value: {}", |  | ||||||
|             serde_yaml::to_string(&yaml_value).unwrap() |  | ||||||
|         ); |  | ||||||
| 
 |  | ||||||
|         yaml_value |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| #[cfg(test)] |  | ||||||
| mod tests { |  | ||||||
|     use url::Url; |  | ||||||
| 
 |  | ||||||
|     use crate::modules::application::features::{ |  | ||||||
|         ArgoApplication, Automated, Backoff, Helm, Retry, Source, SyncPolicy, |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     #[test] |  | ||||||
|     fn test_argo_application_to_yaml_happy_path() { |  | ||||||
|         let app = ArgoApplication { |  | ||||||
|             name: "test".to_string(), |  | ||||||
|             namespace: Some("test-ns".to_string()), |  | ||||||
|             project: "test-project".to_string(), |  | ||||||
|             source: Source { |  | ||||||
|                 repo_url: Url::parse("http://test").unwrap(), |  | ||||||
|                 target_revision: None, |  | ||||||
|                 chart: "test-chart".to_string(), |  | ||||||
|                 helm: Helm { |  | ||||||
|                     pass_credentials: None, |  | ||||||
|                     parameters: vec![], |  | ||||||
|                     file_parameters: vec![], |  | ||||||
|                     release_name: Some("test-release-neame".to_string()), |  | ||||||
|                     value_files: vec![], |  | ||||||
|                     ignore_missing_value_files: None, |  | ||||||
|                     values: None, |  | ||||||
|                     values_object: None, |  | ||||||
|                     skip_crds: None, |  | ||||||
|                     skip_schema_validation: None, |  | ||||||
|                     version: None, |  | ||||||
|                     kube_version: None, |  | ||||||
|                     api_versions: vec![], |  | ||||||
|                     namespace: None, |  | ||||||
|                 }, |  | ||||||
|             }, |  | ||||||
|             sync_policy: SyncPolicy { |  | ||||||
|                 automated: Automated { |  | ||||||
|                     prune: false, |  | ||||||
|                     self_heal: false, |  | ||||||
|                     allow_empty: false, |  | ||||||
|                 }, |  | ||||||
|                 sync_options: vec![], |  | ||||||
|                 retry: Retry { |  | ||||||
|                     limit: 5, |  | ||||||
|                     backoff: Backoff { |  | ||||||
|                         duration: "5s".to_string(), |  | ||||||
|                         factor: 2, |  | ||||||
|                         max_duration: "3m".to_string(), |  | ||||||
|                     }, |  | ||||||
|                 }, |  | ||||||
|             }, |  | ||||||
|             revision_history_limit: 10, |  | ||||||
|         }; |  | ||||||
| 
 |  | ||||||
|         let expected_yaml_output = r#"apiVersion: argoproj.io/v1alpha1
 |  | ||||||
| kind: Application |  | ||||||
| metadata: |  | ||||||
|   name: test |  | ||||||
|   namespace: test-ns |  | ||||||
| spec: |  | ||||||
|   project: test-project |  | ||||||
|   destination: |  | ||||||
|     server: https://kubernetes.default.svc
 |  | ||||||
|     namespace: test-ns |  | ||||||
|   source: |  | ||||||
|     repoUrl: http://test/
 |  | ||||||
|     targetRevision: null |  | ||||||
|     chart: test-chart |  | ||||||
|     helm: |  | ||||||
|       passCredentials: null |  | ||||||
|       parameters: [] |  | ||||||
|       fileParameters: [] |  | ||||||
|       releaseName: test-release-neame |  | ||||||
|       valueFiles: [] |  | ||||||
|       ignoreMissingValueFiles: null |  | ||||||
|       values: null |  | ||||||
|       valuesObject: null |  | ||||||
|       skipCrds: null |  | ||||||
|       skipSchemaValidation: null |  | ||||||
|       version: null |  | ||||||
|       kubeVersion: null |  | ||||||
|       apiVersions: [] |  | ||||||
|       namespace: null |  | ||||||
|   syncPolicy: |  | ||||||
|     automated: |  | ||||||
|       prune: false |  | ||||||
|       selfHeal: false |  | ||||||
|       allowEmpty: false |  | ||||||
|     syncOptions: [] |  | ||||||
|     retry: |  | ||||||
|       limit: 5 |  | ||||||
|       backoff: |  | ||||||
|         duration: 5s |  | ||||||
|         factor: 2 |  | ||||||
|         maxDuration: 3m |  | ||||||
|   revisionHistoryLimit: 10"#;
 |  | ||||||
| 
 |  | ||||||
|         assert_eq!( |  | ||||||
|             expected_yaml_output.trim(), |  | ||||||
|             serde_yaml::to_string(&app.clone().to_yaml()) |  | ||||||
|                 .unwrap() |  | ||||||
|                 .trim() |  | ||||||
|         ); |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -2,7 +2,7 @@ use async_trait::async_trait; | |||||||
| use log::info; | use log::info; | ||||||
| 
 | 
 | ||||||
| use crate::{ | use crate::{ | ||||||
|     modules::application::ApplicationFeature, |     modules::application::{Application, ApplicationFeature}, | ||||||
|     topology::{K8sclient, Topology}, |     topology::{K8sclient, Topology}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -10,7 +10,7 @@ use crate::{ | |||||||
|     modules::monitoring::alert_rule::prometheus_alert_rule::AlertManagerRuleGroup, |     modules::monitoring::alert_rule::prometheus_alert_rule::AlertManagerRuleGroup, | ||||||
|     score, |     score, | ||||||
|     topology::{ |     topology::{ | ||||||
|         HelmCommand, Topology, |         HelmCommand, K8sAnywhereTopology, Topology, | ||||||
|         installable::Installable, |         installable::Installable, | ||||||
|         oberservability::monitoring::{AlertReceiver, AlertRule, AlertSender}, |         oberservability::monitoring::{AlertReceiver, AlertRule, AlertSender}, | ||||||
|         tenant::TenantManager, |         tenant::TenantManager, | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user