@@ -22,6 +22,7 @@ const ENCRYPT_EMAIL: &str = "letsencrypt@rivet.gg";
2222async fn worker (
2323 ctx : & OperationContext < cluster:: msg:: datacenter_tls_issue:: Message > ,
2424) -> GlobalResult < ( ) > {
25+ tracing:: warn!( "temp disabled" ) ;
2526 return Ok ( ( ) ) ;
2627
2728 let datacenter_id = unwrap_ref ! ( ctx. datacenter_id) . as_uuid ( ) ;
@@ -237,9 +238,46 @@ async fn create_dns_record(
237238 priority : None ,
238239 } ,
239240 } )
240- . await ?;
241+ . await ;
242+
243+ match create_record_res {
244+ Ok ( create_record_res) => Ok ( create_record_res. result . id ) ,
245+ // Try to delete record on error
246+ Err ( err) => {
247+ if let cf_framework:: response:: ApiFailure :: Error (
248+ http:: status:: StatusCode :: BAD_REQUEST ,
249+ _,
250+ ) = err
251+ {
252+ tracing:: info!( %record_name, "failed to create dns record, trying to delete" ) ;
253+
254+ let list_records_res = client
255+ . request ( & cf:: dns:: ListDnsRecords {
256+ zone_identifier : zone_id,
257+ params : cf:: dns:: ListDnsRecordsParams {
258+ name : Some ( record_name. to_string ( ) ) ,
259+ record_type : Some ( cf:: dns:: DnsContent :: TXT {
260+ // We aren't filtering by content
261+ content : "" . to_string ( ) ,
262+ } ) ,
263+ per_page : Some ( 1 ) ,
264+ ..Default :: default ( )
265+ } ,
266+ } )
267+ . await ?;
268+
269+ if let Some ( record) = list_records_res. result . first ( ) {
270+ delete_dns_record ( client, zone_id, & record. id ) . await ?;
271+ tracing:: info!( %record_name, "deleted dns record" ) ;
272+ } else {
273+ tracing:: warn!( %record_name, "failed to get matching dns record" ) ;
274+ }
275+ }
241276
242- Ok ( create_record_res. result . id )
277+ // Throw error
278+ Err ( err. into ( ) )
279+ }
280+ }
243281}
244282
245283async fn delete_dns_record (
0 commit comments