feat: DNS A/PTR with Cloudflare
This commit is contained in:
@ -104,6 +104,9 @@ pub trait LNVpsDb: Sync + Send {
|
||||
/// List VM ip assignments
|
||||
async fn insert_vm_ip_assignment(&self, ip_assignment: &VmIpAssignment) -> Result<u64>;
|
||||
|
||||
/// Update VM ip assignments
|
||||
async fn update_vm_ip_assignment(&self, ip_assignment: &VmIpAssignment) -> Result<()>;
|
||||
|
||||
/// List VM ip assignments
|
||||
async fn list_vm_ip_assignments(&self, vm_id: u64) -> Result<Vec<VmIpAssignment>>;
|
||||
|
||||
|
@ -226,11 +226,26 @@ pub struct Vm {
|
||||
|
||||
#[derive(FromRow, Clone, Debug, Default)]
|
||||
pub struct VmIpAssignment {
|
||||
/// Unique id of this assignment
|
||||
pub id: u64,
|
||||
/// VM id this IP is assigned to
|
||||
pub vm_id: u64,
|
||||
/// IP range id
|
||||
pub ip_range_id: u64,
|
||||
/// The IP address (v4/v6)
|
||||
pub ip: String,
|
||||
/// If this record was freed
|
||||
pub deleted: bool,
|
||||
/// External ID pointing to a static arp entry on the router
|
||||
pub arp_ref: Option<String>,
|
||||
/// Forward DNS FQDN
|
||||
pub dns_forward: Option<String>,
|
||||
/// External ID pointing to the forward DNS entry for this IP
|
||||
pub dns_forward_ref: Option<String>,
|
||||
/// Reverse DNS FQDN
|
||||
pub dns_reverse: Option<String>,
|
||||
/// External ID pointing to the reverse DNS entry for this IP
|
||||
pub dns_reverse_ref: Option<String>,
|
||||
}
|
||||
|
||||
impl Display for VmIpAssignment {
|
||||
|
@ -290,17 +290,38 @@ impl LNVpsDb for LNVpsDbMysql {
|
||||
|
||||
async fn insert_vm_ip_assignment(&self, ip_assignment: &VmIpAssignment) -> Result<u64> {
|
||||
Ok(sqlx::query(
|
||||
"insert into vm_ip_assignment(vm_id,ip_range_id,ip) values(?, ?, ?) returning id",
|
||||
"insert into vm_ip_assignment(vm_id,ip_range_id,ip,arp_ref,dns_forward,dns_forward_ref,dns_reverse,dns_reverse_ref) values(?,?,?,?,?,?,?,?) returning id",
|
||||
)
|
||||
.bind(ip_assignment.vm_id)
|
||||
.bind(ip_assignment.ip_range_id)
|
||||
.bind(&ip_assignment.ip)
|
||||
.bind(&ip_assignment.arp_ref)
|
||||
.bind(&ip_assignment.dns_forward)
|
||||
.bind(&ip_assignment.dns_forward_ref)
|
||||
.bind(&ip_assignment.dns_reverse)
|
||||
.bind(&ip_assignment.dns_reverse_ref)
|
||||
.fetch_one(&self.db)
|
||||
.await
|
||||
.map_err(Error::new)?
|
||||
.try_get(0)?)
|
||||
}
|
||||
|
||||
async fn update_vm_ip_assignment(&self, ip_assignment: &VmIpAssignment) -> Result<()> {
|
||||
sqlx::query(
|
||||
"update vm_ip_assignment set arp_ref = ?, dns_forward = ?, dns_forward_ref = ?, dns_reverse = ?, dns_reverse_ref = ? where id = ?",
|
||||
)
|
||||
.bind(&ip_assignment.arp_ref)
|
||||
.bind(&ip_assignment.dns_forward)
|
||||
.bind(&ip_assignment.dns_forward_ref)
|
||||
.bind(&ip_assignment.dns_reverse)
|
||||
.bind(&ip_assignment.dns_reverse_ref)
|
||||
.bind(&ip_assignment.id)
|
||||
.execute(&self.db)
|
||||
.await
|
||||
.map_err(Error::new)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn list_vm_ip_assignments(&self, vm_id: u64) -> Result<Vec<VmIpAssignment>> {
|
||||
sqlx::query_as("select * from vm_ip_assignment where vm_id = ? and deleted = 0")
|
||||
.bind(vm_id)
|
||||
|
Reference in New Issue
Block a user