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