]> git.proxmox.com Git - pve-network.git/blobdiff - PVE/API2/Network/SDN/Controllers.pm
create /etc/pve/sdn directory
[pve-network.git] / PVE / API2 / Network / SDN / Controllers.pm
index 99fd1389b6241f15ef9a1efac867b35da58a1c71..e16619c6862e430751807ca88dd37f8c0b7cd7a7 100644 (file)
@@ -9,7 +9,7 @@ use PVE::Cluster qw(cfs_read_file cfs_write_file);
 use PVE::Network::SDN::Zones;
 use PVE::Network::SDN::Controllers;
 use PVE::Network::SDN::Controllers::Plugin;
-use PVE::Network::SDN::Controllers::FrrEvpnPlugin;
+use PVE::Network::SDN::Controllers::EvpnPlugin;
 use PVE::Network::SDN::Controllers::FaucetPlugin;
 
 use Storable qw(dclone);
@@ -38,7 +38,7 @@ __PACKAGE__->register_method ({
     method => 'GET',
     description => "SDN controllers index.",
     permissions => {
-       description => "Only list entries where you have 'SDN.Audit' or 'SDN.Allocate' permissions on '/cluster/sdn/controllers/<controller>'",
+       description => "Only list entries where you have 'SDN.Audit' or 'SDN.Allocate' permissions on '/sdn/controllers/<controller>'",
        user => 'all',
     },
     parameters => {
@@ -74,8 +74,8 @@ __PACKAGE__->register_method ({
        my @sids = PVE::Network::SDN::Controllers::sdn_controllers_ids($cfg);
        my $res = [];
        foreach my $id (@sids) {
-#          my $privs = [ 'SDN.Audit', 'SDN.Allocate' ];
-#          next if !$rpcenv->check_any($authuser, "/cluster/sdn/controllers/$id", $privs, 1);
+           my $privs = [ 'SDN.Audit', 'SDN.Allocate' ];
+           next if !$rpcenv->check_any($authuser, "/sdn/controllers/$id", $privs, 1);
 
            my $scfg = &$api_sdn_controllers_config($cfg, $id);
            next if $param->{type} && $param->{type} ne $scfg->{type};
@@ -93,9 +93,9 @@ __PACKAGE__->register_method ({
     path => '{controller}',
     method => 'GET',
     description => "Read sdn controller configuration.",
-#    permissions => {
-#      check => ['perm', '/cluster/sdn/controllers/{controller}', ['SDN.Allocate']],
-#   },
+    permissions => {
+       check => ['perm', '/sdn/controllers/{controller}', ['SDN.Allocate']],
+   },
 
     parameters => {
        additionalProperties => 0,
@@ -118,9 +118,9 @@ __PACKAGE__->register_method ({
     path => '',
     method => 'POST',
     description => "Create a new sdn controller object.",
-#    permissions => {
-#      check => ['perm', '/cluster/sdn/controllers', ['SDN.Allocate']],
-#    },
+    permissions => {
+       check => ['perm', '/sdn/controllers', ['SDN.Allocate']],
+    },
     parameters => PVE::Network::SDN::Controllers::Plugin->createSchema(),
     returns => { type => 'null' },
     code => sub {
@@ -132,59 +132,39 @@ __PACKAGE__->register_method ({
        my $plugin = PVE::Network::SDN::Controllers::Plugin->lookup($type);
        my $opts = $plugin->check_config($id, $param, 1, 1);
 
+        # create /etc/pve/sdn directory
+        PVE::Cluster::check_cfs_quorum();
+        mkdir("/etc/pve/sdn");
+
         PVE::Network::SDN::Controllers::lock_sdn_controllers_config(
            sub {
 
-               my $cfg = PVE::Network::SDN::Controllers::config();
+               my $controller_cfg = PVE::Network::SDN::Controllers::config();
 
                my $scfg = undef;
-               if ($scfg = PVE::Network::SDN::Controllers::sdn_controllers_config($cfg, $id, 1)) {
+               if ($scfg = PVE::Network::SDN::Controllers::sdn_controllers_config($controller_cfg, $id, 1)) {
                    die "sdn controller object ID '$id' already defined\n";
                }
 
-               $cfg->{ids}->{$id} = $opts;
-               $plugin->on_update_hook($id, $cfg);
+               $controller_cfg->{ids}->{$id} = $opts;
+               $plugin->on_update_hook($id, $controller_cfg);
 
-               PVE::Network::SDN::Controllers::write_config($cfg);
+               PVE::Network::SDN::Controllers::write_config($controller_cfg);
 
            }, "create sdn controller object failed");
 
        return undef;
     }});
 
-__PACKAGE__->register_method ({
-    name => 'apply_configuration',
-    protected => 1,
-    path => '',
-    method => 'PUT',
-    description => "Apply sdn controller changes.",
-#    permissions => {
-#      check => ['perm', '/cluster/sdn/controllers', ['SDN.Allocate']],
-#    },
-    parameters => {
-       additionalProperties => 0,
-    },
-    returns => { type => 'null' },
-    code => sub {
-       my ($param) = @_;
-
-       die "no sdn controller changes to apply" if !-e "/etc/pve/sdn/controllers.cfg.new";
-       rename("/etc/pve/sdn/controllers.cfg.new", "/etc/pve/sdn/controllers.cfg")
-           || die "applying sdn/controllers.cfg changes failed - $!\n";
-
-
-       return undef;
-    }});
-
 __PACKAGE__->register_method ({
     name => 'revert_configuration',
     protected => 1,
     path => '',
     method => 'DELETE',
     description => "Revert sdn controller changes.",
-#    permissions => {
-#      check => ['perm', '/cluster/sdn/controllers', ['SDN.Allocate']],
-#    },
+    permissions => {
+       check => ['perm', '/sdn/controllers', ['SDN.Allocate']],
+    },
     parameters => {
        additionalProperties => 0,
     },
@@ -204,9 +184,9 @@ __PACKAGE__->register_method ({
     path => '{controller}',
     method => 'PUT',
     description => "Update sdn controller object configuration.",
-#    permissions => {
-#      check => ['perm', '/cluster/sdn/controllers', ['SDN.Allocate']],
-#    },
+    permissions => {
+       check => ['perm', '/sdn/controllers', ['SDN.Allocate']],
+    },
     parameters => PVE::Network::SDN::Controllers::Plugin->updateSchema(),
     returns => { type => 'null' },
     code => sub {
@@ -218,11 +198,11 @@ __PACKAGE__->register_method ({
         PVE::Network::SDN::Controllers::lock_sdn_controllers_config(
         sub {
 
-           my $cfg = PVE::Network::SDN::Controllers::config();
+           my $controller_cfg = PVE::Network::SDN::Controllers::config();
 
-           PVE::SectionConfig::assert_if_modified($cfg, $digest);
+           PVE::SectionConfig::assert_if_modified($controller_cfg, $digest);
 
-           my $scfg = PVE::Network::SDN::Controllers::sdn_controllers_config($cfg, $id);
+           my $scfg = PVE::Network::SDN::Controllers::sdn_controllers_config($controller_cfg, $id);
 
            my $plugin = PVE::Network::SDN::Controllers::Plugin->lookup($scfg->{type});
            my $opts = $plugin->check_config($id, $param, 0, 1);
@@ -231,9 +211,9 @@ __PACKAGE__->register_method ({
                $scfg->{$k} = $opts->{$k};
            }
 
-           $plugin->on_update_hook($id, $cfg);
+           $plugin->on_update_hook($id, $controller_cfg);
 
-           PVE::Network::SDN::Controllers::write_config($cfg);
+           PVE::Network::SDN::Controllers::write_config($controller_cfg);
 
            }, "update sdn controller object failed");
 
@@ -246,9 +226,9 @@ __PACKAGE__->register_method ({
     path => '{controller}',
     method => 'DELETE',
     description => "Delete sdn controller object configuration.",
-#    permissions => {
-#      check => ['perm', '/cluster/sdn/controllers', ['SDN.Allocate']],
-#    },
+    permissions => {
+       check => ['perm', '/sdn/controllers', ['SDN.Allocate']],
+    },
     parameters => {
        additionalProperties => 0,
        properties => {
@@ -272,9 +252,9 @@ __PACKAGE__->register_method ({
 
                my $plugin = PVE::Network::SDN::Controllers::Plugin->lookup($scfg->{type});
 
-               my $transport_cfg = PVE::Network::SDN::Zones::config();
+               my $zone_cfg = PVE::Network::SDN::Zones::config();
 
-               $plugin->on_delete_hook($id, $transport_cfg);
+               $plugin->on_delete_hook($id, $zone_cfg);
 
                delete $cfg->{ids}->{$id};
                PVE::Network::SDN::Controllers::write_config($cfg);