]> git.proxmox.com Git - pve-network.git/blobdiff - PVE/Network/SDN/Subnets.pm
controllers: evpn : use frr restart if reload fail
[pve-network.git] / PVE / Network / SDN / Subnets.pm
index 34b34504651ff09f8222c1ead94b5237761c9e18..6bb42e5b3f0563f0ca9a48735ce87505b67ab81f 100644 (file)
@@ -63,7 +63,7 @@ sub get_subnet {
 
     my $cfg = {};
     if($running) {
-       my $cfg = PVE::Network::SDN::config();
+       my $cfg = PVE::Network::SDN::running_config();
        $cfg = $cfg->{subnets};
     } else {
        $cfg = PVE::Network::SDN::Subnets::config();
@@ -165,6 +165,7 @@ sub add_subnet {
     my ($zone, $subnetid, $subnet) = @_;
 
     my $ipam = $zone->{ipam};
+    return if !$ipam;
     my $ipam_cfg = PVE::Network::SDN::Ipams::config();
     my $plugin_config = $ipam_cfg->{ids}->{$ipam};
     my $plugin = PVE::Network::SDN::Ipams::Plugin->lookup($plugin_config->{type});
@@ -175,6 +176,7 @@ sub del_subnet {
     my ($zone, $subnetid, $subnet) = @_;
 
     my $ipam = $zone->{ipam};
+    return if !$ipam;
     my $ipam_cfg = PVE::Network::SDN::Ipams::config();
     my $plugin_config = $ipam_cfg->{ids}->{$ipam};
     my $plugin = PVE::Network::SDN::Ipams::Plugin->lookup($plugin_config->{type});
@@ -182,7 +184,7 @@ sub del_subnet {
 }
 
 sub next_free_ip {
-    my ($zone, $subnetid, $subnet, $hostname, $mac, $description) = @_;
+    my ($zone, $subnetid, $subnet, $hostname, $mac, $description, $skipdns) = @_;
 
     my $cidr = undef;
     my $ip = undef;
@@ -197,7 +199,7 @@ sub next_free_ip {
     $hostname .= ".$dnszoneprefix" if $dnszoneprefix;
 
     #verify dns zones before ipam
-    verify_dns_zone($dnszone, $dns);
+    verify_dns_zone($dnszone, $dns) if !$skipdns;
 
     if($ipamid) {
        my $ipam_cfg = PVE::Network::SDN::Ipams::config();
@@ -213,10 +215,12 @@ sub next_free_ip {
     eval {
        my $reversednszone = get_reversedns_zone($subnetid, $subnet, $reversedns, $ip);
 
-       #add dns
-       add_dns_record($dnszone, $dns, $hostname, $ip);
-       #add reverse dns
-       add_dns_ptr_record($reversednszone, $dnszone, $reversedns, $hostname, $ip);
+       if(!$skipdns) {
+           #add dns
+           add_dns_record($dnszone, $dns, $hostname, $ip);
+           #add reverse dns
+           add_dns_ptr_record($reversednszone, $dnszone, $reversedns, $hostname, $ip);
+       }
     };
     if ($@) {
        #rollback
@@ -230,11 +234,11 @@ sub next_free_ip {
 }
 
 sub add_ip {
-    my ($zone, $subnetid, $subnet, $ip, $hostname, $mac, $description) = @_;
+    my ($zone, $subnetid, $subnet, $ip, $hostname, $mac, $description, $is_gateway, $skipdns) = @_;
 
     return if !$subnet || !$ip; 
 
-    my $ipaddr = new NetAddr::IP($ip);
+    my $ipaddr = NetAddr::IP->new($ip);
     $ip = $ipaddr->canon();
 
     my $ipamid = $zone->{ipam};
@@ -247,24 +251,30 @@ sub add_ip {
     $hostname .= ".$dnszoneprefix" if $dnszoneprefix;
 
     #verify dns zones before ipam
-    verify_dns_zone($dnszone, $dns);
-    verify_dns_zone($reversednszone, $reversedns);
+    if(!$skipdns) {
+       verify_dns_zone($dnszone, $dns);
+       verify_dns_zone($reversednszone, $reversedns);
+    }
 
     if ($ipamid) {
+
        my $ipam_cfg = PVE::Network::SDN::Ipams::config();
        my $plugin_config = $ipam_cfg->{ids}->{$ipamid};
        my $plugin = PVE::Network::SDN::Ipams::Plugin->lookup($plugin_config->{type});
+
        eval {
-           $plugin->add_ip($plugin_config, $subnetid, $subnet, $ip, $hostname, $mac, $description);
+           $plugin->add_ip($plugin_config, $subnetid, $subnet, $ip, $hostname, $mac, $description, $is_gateway);
        };
        die $@ if $@;
     }
 
     eval {
-       #add dns
-       add_dns_record($dnszone, $dns, $hostname, $ip);
-       #add reverse dns
-       add_dns_ptr_record($reversednszone, $dnszone, $reversedns, $hostname, $ip);
+       if(!$skipdns) {
+           #add dns
+           add_dns_record($dnszone, $dns, $hostname, $ip);
+           #add reverse dns
+           add_dns_ptr_record($reversednszone, $dnszone, $reversedns, $hostname, $ip);
+       }
     };
     if ($@) {
        #rollback
@@ -277,11 +287,11 @@ sub add_ip {
 }
 
 sub update_ip {
-    my ($zone, $subnetid, $subnet, $ip, $hostname, $oldhostname, $mac, $description) = @_;
+    my ($zone, $subnetid, $subnet, $ip, $hostname, $oldhostname, $mac, $description, $skipdns) = @_;
 
     return if !$subnet || !$ip; 
 
-    my $ipaddr = new NetAddr::IP($ip);
+    my $ipaddr = NetAddr::IP->new($ip);
     $ip = $ipaddr->canon();
 
     my $ipamid = $zone->{ipam};
@@ -294,8 +304,10 @@ sub update_ip {
     $hostname .= ".$dnszoneprefix" if $dnszoneprefix;
 
     #verify dns zones before ipam
-    verify_dns_zone($dnszone, $dns);
-    verify_dns_zone($reversednszone, $reversedns);
+    if(!$skipdns) {
+       verify_dns_zone($dnszone, $dns);
+       verify_dns_zone($reversednszone, $reversedns);
+    }
 
     if ($ipamid) {
        my $ipam_cfg = PVE::Network::SDN::Ipams::config();
@@ -310,22 +322,23 @@ sub update_ip {
     return if $hostname eq $oldhostname;
 
     eval {
-       #add dns
-       
-       del_dns_record($dnszone, $dns, $oldhostname, $ip);
-       add_dns_record($dnszone, $dns, $hostname, $ip);
-       #add reverse dns
-       del_dns_ptr_record($reversednszone, $reversedns, $ip);
-       add_dns_ptr_record($reversednszone, $dnszone, $reversedns, $hostname, $ip);
+       if(!$skipdns) {
+           #add dns
+           del_dns_record($dnszone, $dns, $oldhostname, $ip);
+           add_dns_record($dnszone, $dns, $hostname, $ip);
+           #add reverse dns
+           del_dns_ptr_record($reversednszone, $reversedns, $ip);
+           add_dns_ptr_record($reversednszone, $dnszone, $reversedns, $hostname, $ip);
+       }
     };
 }
 
 sub del_ip {
-    my ($zone, $subnetid, $subnet, $ip, $hostname) = @_;
+    my ($zone, $subnetid, $subnet, $ip, $hostname, $skipdns) = @_;
 
     return if !$subnet || !$ip;
 
-    my $ipaddr = new NetAddr::IP($ip);
+    my $ipaddr = NetAddr::IP->new($ip);
     $ip = $ipaddr->canon();
 
     my $ipamid = $zone->{ipam};
@@ -336,9 +349,10 @@ sub del_ip {
     my $dnszoneprefix = $subnet->{dnszoneprefix};
     $hostname .= ".$dnszoneprefix" if $dnszoneprefix;
 
-
-    verify_dns_zone($dnszone, $dns);
-    verify_dns_zone($reversednszone, $reversedns);
+    if(!$skipdns) {
+       verify_dns_zone($dnszone, $dns);
+       verify_dns_zone($reversednszone, $reversedns);
+    }
 
     if ($ipamid) {
        my $ipam_cfg = PVE::Network::SDN::Ipams::config();
@@ -348,8 +362,10 @@ sub del_ip {
     }
 
     eval {
-       del_dns_record($dnszone, $dns, $hostname, $ip);
-       del_dns_ptr_record($reversednszone, $reversedns, $ip);
+       if(!$skipdns) {
+           del_dns_record($dnszone, $dns, $hostname, $ip);
+           del_dns_ptr_record($reversednszone, $reversedns, $ip);
+       }
     };
     if ($@) {
        warn $@;