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();
return ($subnetid, $subnet);
}
-my $verify_dns_zone = sub {
+sub verify_dns_zone {
my ($zone, $dns) = @_;
return if !$zone || !$dns;
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;
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;
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;
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;
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;
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) = @_;
$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();
}
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
}
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
}
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();
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);
};
}
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();
}
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 $@;