summaryrefslogtreecommitdiff
path: root/src/converge.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/converge.rs')
-rw-r--r--src/converge.rs29
1 files changed, 11 insertions, 18 deletions
diff --git a/src/converge.rs b/src/converge.rs
index 29c4878..d9a4188 100644
--- a/src/converge.rs
+++ b/src/converge.rs
@@ -4,22 +4,16 @@ use std::fmt::Debug;
use anyhow::Result;
use futures::try_join;
+use crate::apply::{Changes, Transaction};
use crate::autoscaling::{propose_asg_recordsets, AutoScaling};
use crate::ec2::Ec2;
use crate::route53::{zone_actual_recordsets, zone_for_name, ResourceRecordSet, Route53, Target};
-#[derive(Debug)]
-pub struct Changes<T> {
- pub zone_id: String,
- pub remove: T,
- pub insert: T,
-}
-
-pub async fn named_asg_changes<C>(
+pub async fn propose_transaction<C>(
aws_context: &C,
target: &Target,
asg_name: &str,
-) -> Result<Changes<impl IntoIterator<Item = ResourceRecordSet> + Debug>>
+) -> Result<Transaction<impl IntoIterator<Item = ResourceRecordSet> + Debug>>
where
C: AutoScaling + Ec2 + Route53,
{
@@ -30,12 +24,15 @@ where
zone_actual_recordsets(aws_context, &zone.id, target.name()),
)?;
- let changes = changes_for_records(&zone.id, &proposed, &actual);
- Ok(changes)
+ let changes = propose_changes(&proposed, &actual);
+ let transaction = Transaction {
+ zone_id: zone.id().into(),
+ changes,
+ };
+ Ok(transaction)
}
-fn changes_for_records<T>(
- zone_id: &str,
+fn propose_changes<T>(
intended: &HashSet<T>,
actual: &HashSet<T>,
) -> Changes<impl IntoIterator<Item = T> + Debug>
@@ -45,9 +42,5 @@ where
let remove: Vec<_> = actual.difference(intended).cloned().collect();
let insert: Vec<_> = intended.difference(actual).cloned().collect();
- Changes {
- zone_id: zone_id.into(),
- remove,
- insert,
- }
+ Changes { remove, insert }
}