]> git.proxmox.com Git - pve-network.git/blobdiff - PVE/Network/SDN/Subnets.pm
subnets/ipam : fix is_gateway
[pve-network.git] / PVE / Network / SDN / Subnets.pm
index 5446044fa01f07cb51f6a3d31bd2d53db00988cf..0231822ce0a2493cff5894ca140501b90ec9ec8b 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();
@@ -94,7 +94,7 @@ sub find_ip_subnet {
     return ($subnetid, $subnet);
 }
 
-my $verify_dns_zone = sub {
+sub verify_dns_zone {
     my ($zone, $dns) = @_;
 
     return if !$zone || !$dns;
@@ -103,9 +103,9 @@ my $verify_dns_zone = sub {
     my $plugin_config = $dns_cfg->{ids}->{$dns};
     my $plugin = PVE::Network::SDN::Dns::Plugin->lookup($plugin_config->{type});
     $plugin->verify_zone($plugin_config, $zone);
-};
+}
 
-my $get_reversedns_zone = sub {
+sub get_reversedns_zone {
     my ($subnetid, $subnet, $dns, $ip) = @_;
 
     return if !$subnetid || !$dns || !$ip;
@@ -114,9 +114,9 @@ my $get_reversedns_zone = sub {
     my $plugin_config = $dns_cfg->{ids}->{$dns};
     my $plugin = PVE::Network::SDN::Dns::Plugin->lookup($plugin_config->{type});
     $plugin->get_reversedns_zone($plugin_config, $subnetid, $subnet, $ip);
-};
+}
 
-my $add_dns_record = sub {
+sub add_dns_record {
     my ($zone, $dns, $hostname, $ip) = @_;
     return if !$zone || !$dns || !$hostname || !$ip;
 
@@ -125,9 +125,9 @@ my $add_dns_record = sub {
     my $plugin = PVE::Network::SDN::Dns::Plugin->lookup($plugin_config->{type});
     $plugin->add_a_record($plugin_config, $zone, $hostname, $ip);
 
-};
+}
 
-my $add_dns_ptr_record = sub {
+sub add_dns_ptr_record {
     my ($reversezone, $zone, $dns, $hostname, $ip) = @_;
 
     return if !$zone || !$reversezone || !$dns || !$hostname || !$ip;
@@ -137,9 +137,9 @@ my $add_dns_ptr_record = sub {
     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 {
+sub del_dns_record {
     my ($zone, $dns, $hostname, $ip) = @_;
 
     return if !$zone || !$dns || !$hostname || !$ip;
@@ -148,9 +148,9 @@ my $del_dns_record = sub {
     my $plugin_config = $dns_cfg->{ids}->{$dns};
     my $plugin = PVE::Network::SDN::Dns::Plugin->lookup($plugin_config->{type});
     $plugin->del_a_record($plugin_config, $zone, $hostname, $ip);
-};
+}
 
-my $del_dns_ptr_record = sub {
+sub del_dns_ptr_record {
     my ($reversezone, $dns, $ip) = @_;
 
     return if !$reversezone || !$dns || !$ip;
@@ -159,7 +159,29 @@ my $del_dns_ptr_record = sub {
     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 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});
+    $plugin->add_subnet($plugin_config, $subnetid, $subnet);
+}
+
+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});
+    $plugin->del_subnet($plugin_config, $subnetid, $subnet);
+}
 
 sub next_free_ip {
     my ($zone, $subnetid, $subnet, $hostname, $mac, $description) = @_;
@@ -177,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($ipamid) {
        my $ipam_cfg = PVE::Network::SDN::Ipams::config();
@@ -191,12 +213,12 @@ sub next_free_ip {
     }
 
     eval {
-       my $reversednszone = &$get_reversedns_zone($subnetid, $subnet, $reversedns, $ip);
+       my $reversednszone = get_reversedns_zone($subnetid, $subnet, $reversedns, $ip);
 
        #add dns
-       &$add_dns_record($dnszone, $dns, $hostname, $ip);
+       add_dns_record($dnszone, $dns, $hostname, $ip);
        #add reverse dns
-       &$add_dns_ptr_record($reversednszone, $dnszone, $reversedns, $hostname, $ip);
+       add_dns_ptr_record($reversednszone, $dnszone, $reversedns, $hostname, $ip);
     };
     if ($@) {
        #rollback
@@ -210,41 +232,43 @@ 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) = @_;
 
     return if !$subnet || !$ip; 
 
-    my $ipaddr = new NetAddr::IP($ip);
+    my $ipaddr = NetAddr::IP->new($ip);
     $ip = $ipaddr->canon();
 
     my $ipamid = $zone->{ipam};
     my $dns = $zone->{dns};
     my $dnszone = $zone->{dnszone};
     my $reversedns = $zone->{reversedns};
-    my $reversednszone = &$get_reversedns_zone($subnetid, $subnet, $reversedns, $ip);
+    my $reversednszone = get_reversedns_zone($subnetid, $subnet, $reversedns, $ip);
     my $dnszoneprefix = $subnet->{dnszoneprefix};
 
     $hostname .= ".$dnszoneprefix" if $dnszoneprefix;
 
     #verify dns zones before ipam
-    &$verify_dns_zone($dnszone, $dns);
-    &$verify_dns_zone($reversednszone, $reversedns);
+    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_dns_record($dnszone, $dns, $hostname, $ip);
        #add reverse dns
-       &$add_dns_ptr_record($reversednszone, $dnszone, $reversedns, $hostname, $ip);
+       add_dns_ptr_record($reversednszone, $dnszone, $reversedns, $hostname, $ip);
     };
     if ($@) {
        #rollback
@@ -257,25 +281,25 @@ sub add_ip {
 }
 
 sub update_ip {
-    my ($zone, $subnetid, $subnet, $ip, $hostname, $mac, $description) = @_;
+    my ($zone, $subnetid, $subnet, $ip, $hostname, $oldhostname, $mac, $description) = @_;
 
     return if !$subnet || !$ip; 
 
-    my $ipaddr = new NetAddr::IP($ip);
+    my $ipaddr = NetAddr::IP->new($ip);
     $ip = $ipaddr->canon();
 
     my $ipamid = $zone->{ipam};
     my $dns = $zone->{dns};
     my $dnszone = $zone->{dnszone};
     my $reversedns = $zone->{reversedns};
-    my $reversednszone = &$get_reversedns_zone($subnetid, $subnet, $reversedns, $ip);
+    my $reversednszone = get_reversedns_zone($subnetid, $subnet, $reversedns, $ip);
     my $dnszoneprefix = $subnet->{dnszoneprefix};
 
     $hostname .= ".$dnszoneprefix" if $dnszoneprefix;
 
     #verify dns zones before ipam
-    &$verify_dns_zone($dnszone, $dns);
-    &$verify_dns_zone($reversednszone, $reversedns);
+    verify_dns_zone($dnszone, $dns);
+    verify_dns_zone($reversednszone, $reversedns);
 
     if ($ipamid) {
        my $ipam_cfg = PVE::Network::SDN::Ipams::config();
@@ -287,11 +311,16 @@ sub update_ip {
        die $@ if $@;
     }
 
+    return if $hostname eq $oldhostname;
+
     eval {
        #add dns
-       &$add_dns_record($dnszone, $dns, $hostname, $ip);
+       
+       del_dns_record($dnszone, $dns, $oldhostname, $ip);
+       add_dns_record($dnszone, $dns, $hostname, $ip);
        #add reverse dns
-       &$add_dns_ptr_record($reversednszone, $dnszone, $reversedns, $hostname, $ip);
+       del_dns_ptr_record($reversednszone, $reversedns, $ip);
+       add_dns_ptr_record($reversednszone, $dnszone, $reversedns, $hostname, $ip);
     };
 }
 
@@ -300,20 +329,20 @@ sub del_ip {
 
     return if !$subnet || !$ip;
 
-    my $ipaddr = new NetAddr::IP($ip);
+    my $ipaddr = NetAddr::IP->new($ip);
     $ip = $ipaddr->canon();
 
     my $ipamid = $zone->{ipam};
     my $dns = $zone->{dns};
     my $dnszone = $zone->{dnszone};
     my $reversedns = $zone->{reversedns};
-    my $reversednszone = &$get_reversedns_zone($subnetid, $subnet, $reversedns, $ip);
+    my $reversednszone = get_reversedns_zone($subnetid, $subnet, $reversedns, $ip);
     my $dnszoneprefix = $subnet->{dnszoneprefix};
     $hostname .= ".$dnszoneprefix" if $dnszoneprefix;
 
 
-    &$verify_dns_zone($dnszone, $dns);
-    &$verify_dns_zone($reversednszone, $reversedns);
+    verify_dns_zone($dnszone, $dns);
+    verify_dns_zone($reversednszone, $reversedns);
 
     if ($ipamid) {
        my $ipam_cfg = PVE::Network::SDN::Ipams::config();
@@ -323,8 +352,8 @@ sub del_ip {
     }
 
     eval {
-       &$del_dns_record($dnszone, $dns, $hostname, $ip);
-       &$del_dns_ptr_record($reversednszone, $reversedns, $ip);
+       del_dns_record($dnszone, $dns, $hostname, $ip);
+       del_dns_ptr_record($reversednszone, $reversedns, $ip);
     };
     if ($@) {
        warn $@;