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 {
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();
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;