Signed-off-by: Alexandre Derumier <aderum...@odiso.com> --- PVE/Network/SDN/Dns/PowerdnsPlugin.pm | 12 +++---- PVE/Network/SDN/SubnetPlugin.pm | 1 + PVE/Network/SDN/Subnets.pm | 50 ++++++++++++++++++--------- 3 files changed, 40 insertions(+), 23 deletions(-)
diff --git a/PVE/Network/SDN/Dns/PowerdnsPlugin.pm b/PVE/Network/SDN/Dns/PowerdnsPlugin.pm index 8c5dd90..f02c2f1 100644 --- a/PVE/Network/SDN/Dns/PowerdnsPlugin.pm +++ b/PVE/Network/SDN/Dns/PowerdnsPlugin.pm @@ -79,12 +79,12 @@ sub add_ptr_record { my $key = $plugin_config->{key}; my $ttl = $plugin_config->{ttl} ? $plugin_config->{ttl} : 14400; my $headers = ['Content-Type' => 'application/json; charset=UTF-8', 'X-API-Key' => $key]; + $hostname .= "."; - my $reverseip = join(".", reverse(split(/\./, $ip)))."in-addr.arpa."; - my $fqdn = $hostname.".".$zone."."; + my $reverseip = join(".", reverse(split(/\./, $ip))).".in-addr.arpa."; my $type = "PTR"; - my $record = { content => $fqdn, + my $record = { content => $hostname, disabled => JSON::false, name => $reverseip, type => $type, @@ -109,13 +109,13 @@ sub add_ptr_record { } sub del_a_record { - my ($class, $plugin_config, $zone, $hostname) = @_; + my ($class, $plugin_config, $zone, $hostname, $ip) = @_; my $url = $plugin_config->{url}; my $key = $plugin_config->{key}; my $headers = ['Content-Type' => 'application/json; charset=UTF-8', 'X-API-Key' => $key]; my $fqdn = $hostname.".".$zone."."; - my $type = "PTR"; + my $type = Net::IP::ip_is_ipv6($ip) ? "AAAA" : "A"; my $rrset = { name => $fqdn, type => $type, @@ -140,7 +140,7 @@ sub del_ptr_record { my $key = $plugin_config->{key}; my $headers = ['Content-Type' => 'application/json; charset=UTF-8', 'X-API-Key' => $key]; - my $reverseip = join(".", reverse(split(/\./, $ip)))."in-addr.arpa."; + my $reverseip = join(".", reverse(split(/\./, $ip))).".in-addr.arpa."; my $type = "PTR"; my $rrset = { name => $reverseip, diff --git a/PVE/Network/SDN/SubnetPlugin.pm b/PVE/Network/SDN/SubnetPlugin.pm index 6237867..b236c3f 100644 --- a/PVE/Network/SDN/SubnetPlugin.pm +++ b/PVE/Network/SDN/SubnetPlugin.pm @@ -142,6 +142,7 @@ sub on_update_hook { raise_param_exc({ dnszone => "missing dns zone"}) if $dns && !$dnszone; raise_param_exc({ reversedns => "missing dns provider"}) if $reversednszone && !$reversedns; raise_param_exc({ reversednszone => "missing dns zone"}) if $reversedns && !$reversednszone; + raise_param_exc({ reversedns => "missing forward dns zone"}) if $reversednszone && !$dnszone; if ($ipam) { my $ipam_cfg = PVE::Network::SDN::Ipams::config(); diff --git a/PVE/Network/SDN/Subnets.pm b/PVE/Network/SDN/Subnets.pm index d20af9e..626b71d 100644 --- a/PVE/Network/SDN/Subnets.pm +++ b/PVE/Network/SDN/Subnets.pm @@ -87,24 +87,33 @@ my $verify_dns_zone = sub { }; my $add_dns_record = sub { - my ($zone, $dns, $hostname, $dnszoneprefix, $ip, $reverse) = @_; - - return if !$zone || !$dns || !$hostname || !$ip; + my ($zone, $dns, $hostname, $dnszoneprefix, $ip) = @_; + return if !$zone || !$dns || !$hostname || !$ip; $hostname .= ".$dnszoneprefix" if $dnszoneprefix; my $dns_cfg = PVE::Network::SDN::Dns::config(); my $plugin_config = $dns_cfg->{ids}->{$dns}; my $plugin = PVE::Network::SDN::Dns::Plugin->lookup($plugin_config->{type}); - if($reverse) { - $plugin->add_ptr_record($plugin_config, $zone, $hostname, $ip); - } else { - $plugin->add_a_record($plugin_config, $zone, $hostname, $ip); - } + $plugin->add_a_record($plugin_config, $zone, $hostname, $ip); + +}; + +my $add_dns_ptr_record = sub { + my ($reversezone, $zone, $dns, $hostname, $dnszoneprefix, $ip) = @_; + + return if !$zone || !$reversezone || !$dns || !$hostname || !$ip; + + $hostname .= ".$dnszoneprefix" if $dnszoneprefix; + $hostname .= ".$zone"; + my $dns_cfg = PVE::Network::SDN::Dns::config(); + my $plugin_config = $dns_cfg->{ids}->{$dns}; + my $plugin = PVE::Network::SDN::Dns::Plugin->lookup($plugin_config->{type}); + $plugin->add_ptr_record($plugin_config, $reversezone, $hostname, $ip); }; my $del_dns_record = sub { - my ($zone, $dns, $hostname, $dnszoneprefix, $ip, $reverse) = @_; + my ($zone, $dns, $hostname, $dnszoneprefix, $ip) = @_; return if !$zone || !$dns || !$hostname || !$ip; @@ -113,11 +122,18 @@ my $del_dns_record = sub { my $dns_cfg = PVE::Network::SDN::Dns::config(); my $plugin_config = $dns_cfg->{ids}->{$dns}; my $plugin = PVE::Network::SDN::Dns::Plugin->lookup($plugin_config->{type}); - if($reverse) { - $plugin->del_ptr_record($plugin_config, $zone, $ip); - } else { - $plugin->del_a_record($plugin_config, $zone, $hostname); - } + $plugin->del_a_record($plugin_config, $zone, $hostname, $ip); +}; + +my $del_dns_ptr_record = sub { + my ($reversezone, $dns, $ip) = @_; + + return if !$reversezone || !$dns || !$ip; + + my $dns_cfg = PVE::Network::SDN::Dns::config(); + my $plugin_config = $dns_cfg->{ids}->{$dns}; + my $plugin = PVE::Network::SDN::Dns::Plugin->lookup($plugin_config->{type}); + $plugin->del_ptr_record($plugin_config, $reversezone, $ip); }; sub next_free_ip { @@ -152,7 +168,7 @@ sub next_free_ip { #add dns &$add_dns_record($dnszone, $dns, $hostname, $dnszoneprefix, $ip); #add reverse dns - &$add_dns_record($reversednszone, $reversedns, $hostname, $dnszoneprefix, $ip, 1); + &$add_dns_ptr_record($reversednszone, $dnszone, $reversedns, $hostname, $dnszoneprefix, $ip); }; if ($@) { #rollback @@ -195,7 +211,7 @@ sub add_ip { #add dns &$add_dns_record($dnszone, $dns, $hostname, $dnszoneprefix, $ip); #add reverse dns - &$add_dns_record($reversednszone, $reversedns, $hostname, $dnszoneprefix, $ip, 1); + &$add_dns_ptr_record($reversednszone, $dnszone, $reversedns, $hostname, $dnszoneprefix, $ip); }; if ($@) { #rollback @@ -231,7 +247,7 @@ sub del_ip { eval { &$del_dns_record($dnszone, $dns, $hostname, $dnszoneprefix, $ip); - &$del_dns_record($reversednszone, $reversedns, $hostname, $dnszoneprefix, $ip, 1); + &$del_dns_ptr_record($reversednszone, $reversedns, $ip); }; if ($@) { warn $@; -- 2.20.1 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel