]> git.proxmox.com Git - pve-network.git/blobdiff - PVE/Network/SDN.pm
subnet: disable route option for now and add dns domain format
[pve-network.git] / PVE / Network / SDN.pm
index 2b423a7ebbd1d9a3e4e59ea7ca626157735bebd2..85faca06b49ddfff42eff5422881f5e0b95eb285 100644 (file)
@@ -12,6 +12,30 @@ use PVE::Network::SDN::Zones;
 use PVE::Tools qw(extract_param dir_glob_regex run_command);
 use PVE::Cluster qw(cfs_read_file cfs_write_file cfs_lock_file);
 
+
+my $version_cfg = "sdn/.version";
+
+my $parse_version_cfg = sub {
+    my ($filename, $raw) = @_;
+
+    return 0 if !defined($raw) || $raw eq '';
+
+    warn "invalid sdn version '$raw'" if $raw !~ m/\d+$/;
+
+    return $raw,
+};
+
+my $write_version_cfg = sub {
+    my ($filename, $version) = @_;
+
+    warn "invalid sdn version" if $version !~ m/\d+$/;
+
+    return $version;
+};
+
+PVE::Cluster::cfs_register_file($version_cfg, $parse_version_cfg, $write_version_cfg);
+
+
 # improve me : move status code inside plugins ?
 
 sub ifquery_check {
@@ -46,6 +70,29 @@ sub status {
     return($zone_status, $vnet_status);
 }
 
+
+sub increase_version {
+
+    my $version = cfs_read_file($version_cfg);
+    if ($version) {
+       $version++;
+    } else {
+       $version = 1;
+    }
+
+    cfs_write_file($version_cfg, $version);
+}
+
+sub lock_sdn_config {
+    my ($code, $errmsg) = @_;
+
+    cfs_lock_file($version_cfg, undef, $code);
+
+    if (my $err = $@) {
+        $errmsg ? die "$errmsg: $err" : die $err;
+    }
+}
+
 sub get_local_vnets {
 
     my $rpcenv = PVE::RPCEnvironment::get();
@@ -79,5 +126,19 @@ sub get_local_vnets {
     return $vnets;
 }
 
+sub generate_zone_config {
+    my $raw_config = PVE::Network::SDN::Zones::generate_etc_network_config();
+    PVE::Network::SDN::Zones::write_etc_network_config($raw_config);
+}
+
+sub generate_controller_config {
+    my ($reload) = @_;
+
+    my $raw_config = PVE::Network::SDN::Controllers::generate_controller_config();
+    PVE::Network::SDN::Controllers::write_controller_config($raw_config);
+
+    PVE::Network::SDN::Controllers::reload_controller() if $reload;
+}
+
 1;