fix: handle failed deletion
This commit is contained in:
@ -1,5 +1,5 @@
|
||||
use anyhow::Error;
|
||||
use chrono::{DateTime, Utc};
|
||||
use chrono::Utc;
|
||||
use clap::Parser;
|
||||
use config::{Config, File};
|
||||
use lnvps::api;
|
||||
|
@ -20,6 +20,19 @@ impl Cloudflare {
|
||||
forward_zone_id: forward_zone_id.to_owned(),
|
||||
}
|
||||
}
|
||||
|
||||
fn bail_error<T>(rsp: &CfResult<T>) -> anyhow::Result<()> {
|
||||
if !rsp.success {
|
||||
anyhow::bail!(
|
||||
"Error updating record: {:?}",
|
||||
rsp.errors
|
||||
.as_ref()
|
||||
.map(|e| e.iter().map(|i| i.message.clone()).collect::<Vec<String>>().join(", "))
|
||||
.unwrap_or_default()
|
||||
);
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
#[async_trait]
|
||||
@ -45,6 +58,7 @@ impl DnsServer for Cloudflare {
|
||||
},
|
||||
)
|
||||
.await?;
|
||||
Self::bail_error(&id_response)?;
|
||||
Ok(BasicRecord {
|
||||
name: id_response.result.name,
|
||||
value: id_response.result.content,
|
||||
@ -63,7 +77,8 @@ impl DnsServer for Cloudflare {
|
||||
"Deleting record: [{}] {} => {}",
|
||||
record.kind, record.name, record.value
|
||||
);
|
||||
self.api
|
||||
let res: CfResult<IdResult> = self
|
||||
.api
|
||||
.req(
|
||||
reqwest::Method::DELETE,
|
||||
&format!("/client/v4/zones/{}/dns_records/{}", zone_id, record_id),
|
||||
@ -75,6 +90,7 @@ impl DnsServer for Cloudflare {
|
||||
},
|
||||
)
|
||||
.await?;
|
||||
Self::bail_error(&res)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@ -101,6 +117,7 @@ impl DnsServer for Cloudflare {
|
||||
},
|
||||
)
|
||||
.await?;
|
||||
Self::bail_error(&id_response)?;
|
||||
Ok(BasicRecord {
|
||||
name: id_response.result.name,
|
||||
value: id_response.result.content,
|
||||
@ -122,8 +139,20 @@ struct CfRecord {
|
||||
pub id: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
struct IdResult {
|
||||
pub id: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
struct CfResult<T> {
|
||||
pub success: bool,
|
||||
pub errors: Option<Vec<CfError>>,
|
||||
pub result: T,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
struct CfError {
|
||||
pub code: i32,
|
||||
pub message: String,
|
||||
}
|
||||
|
@ -112,13 +112,17 @@ impl LNVpsProvisioner {
|
||||
if let Some(dns) = &self.dns {
|
||||
if let Some(_r) = &assignment.dns_reverse_ref {
|
||||
let rev = BasicRecord::reverse(assignment)?;
|
||||
dns.delete_record(&rev).await?;
|
||||
if let Err(e) = dns.delete_record(&rev).await {
|
||||
warn!("Failed to delete reverse record: {}", e);
|
||||
}
|
||||
assignment.dns_reverse_ref = None;
|
||||
assignment.dns_reverse = None;
|
||||
}
|
||||
if let Some(_r) = &assignment.dns_forward_ref {
|
||||
let rev = BasicRecord::forward(assignment)?;
|
||||
dns.delete_record(&rev).await?;
|
||||
if let Err(e) = dns.delete_record(&rev).await {
|
||||
warn!("Failed to delete forward record: {}", e);
|
||||
}
|
||||
assignment.dns_forward_ref = None;
|
||||
assignment.dns_forward = None;
|
||||
}
|
||||
|
Reference in New Issue
Block a user