From: Alexandre Derumier Date: Mon, 5 Oct 2020 15:08:59 +0000 (+0200) Subject: subnets: move api to /sdn/vnet//subnets && make vnet option not optionnal X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=3926d9a7b6b235e7f07313ce8bd9086bd0405bac;p=mirror%2Fpve-network.git subnets: move api to /sdn/vnet//subnets && make vnet option not optionnal Signed-off-by: Alexandre Derumier --- diff --git a/PVE/API2/Network/SDN.pm b/PVE/API2/Network/SDN.pm index 4aef654..7292257 100644 --- a/PVE/API2/Network/SDN.pm +++ b/PVE/API2/Network/SDN.pm @@ -14,7 +14,6 @@ use PVE::Tools qw(run_command); use PVE::API2::Network::SDN::Controllers; use PVE::API2::Network::SDN::Vnets; use PVE::API2::Network::SDN::Zones; -use PVE::API2::Network::SDN::Subnets; use PVE::API2::Network::SDN::Ipams; use PVE::API2::Network::SDN::Dns; @@ -35,11 +34,6 @@ __PACKAGE__->register_method ({ path => 'controllers', }); -__PACKAGE__->register_method ({ - subclass => "PVE::API2::Network::SDN::Subnets", - path => 'subnets', -}); - __PACKAGE__->register_method ({ subclass => "PVE::API2::Network::SDN::Ipams", path => 'ipams', @@ -79,7 +73,6 @@ __PACKAGE__->register_method({ { id => 'vnets' }, { id => 'zones' }, { id => 'controllers' }, - { id => 'subnets' }, { id => 'ipams' }, { id => 'dns' }, ]; diff --git a/PVE/API2/Network/SDN/Subnets.pm b/PVE/API2/Network/SDN/Subnets.pm index f06a6ee..5899a1a 100644 --- a/PVE/API2/Network/SDN/Subnets.pm +++ b/PVE/API2/Network/SDN/Subnets.pm @@ -44,6 +44,9 @@ __PACKAGE__->register_method ({ }, parameters => { additionalProperties => 0, + properties => { + vnet => get_standard_option('pve-sdn-vnet-id'), + }, }, returns => { type => 'array', @@ -59,6 +62,7 @@ __PACKAGE__->register_method ({ my $rpcenv = PVE::RPCEnvironment::get(); my $authuser = $rpcenv->get_user(); + my $vnetid = $param->{vnet}; my $cfg = PVE::Network::SDN::Subnets::config(); @@ -66,9 +70,10 @@ __PACKAGE__->register_method ({ my $res = []; foreach my $id (@sids) { my $privs = [ 'SDN.Audit', 'SDN.Allocate' ]; - next if !$rpcenv->check_any($authuser, "/sdn/subnets/$id", $privs, 1); + next if !$rpcenv->check_any($authuser, "/sdn/vnets/$vnetid/subnets/$id", $privs, 1); my $scfg = &$api_sdn_subnets_config($cfg, $id); + next if !$scfg->{vnet} || $scfg->{vnet} ne $vnetid; push @$res, $scfg; } @@ -81,12 +86,13 @@ __PACKAGE__->register_method ({ method => 'GET', description => "Read sdn subnet configuration.", permissions => { - check => ['perm', '/sdn/subnets/{subnet}', ['SDN.Allocate']], + check => ['perm', '/sdn/vnets/{vnet}/subnets/{subnet}', ['SDN.Allocate']], }, parameters => { additionalProperties => 0, properties => { + vnet => get_standard_option('pve-sdn-vnet-id'), subnet => get_standard_option('pve-sdn-subnet-id', { completion => \&PVE::Network::SDN::Subnets::complete_sdn_subnets, }), @@ -97,8 +103,11 @@ __PACKAGE__->register_method ({ my ($param) = @_; my $cfg = PVE::Network::SDN::Subnets::config(); + my $scfg = &$api_sdn_subnets_config($cfg, $param->{subnet}); + + raise_param_exc({ vnet => "wrong vnet"}) if $param->{vnet} ne $scfg->{vnet}; - return &$api_sdn_subnets_config($cfg, $param->{subnet}); + return $scfg; }}); __PACKAGE__->register_method ({ @@ -108,7 +117,7 @@ __PACKAGE__->register_method ({ method => 'POST', description => "Create a new sdn subnet object.", permissions => { - check => ['perm', '/sdn/subnets', ['SDN.Allocate']], + check => ['perm', '/sdn/vnets/{vnet}/subnets', ['SDN.Allocate']], }, parameters => PVE::Network::SDN::SubnetPlugin->createSchema(), returns => { type => 'null' }, @@ -162,7 +171,7 @@ __PACKAGE__->register_method ({ method => 'PUT', description => "Update sdn subnet object configuration.", permissions => { - check => ['perm', '/sdn/subnets', ['SDN.Allocate']], + check => ['perm', '/sdn/vnets/{vnet}/subnets', ['SDN.Allocate']], }, parameters => PVE::Network::SDN::SubnetPlugin->updateSchema(), returns => { type => 'null' }, @@ -217,11 +226,12 @@ __PACKAGE__->register_method ({ method => 'DELETE', description => "Delete sdn subnet object configuration.", permissions => { - check => ['perm', '/sdn/subnets', ['SDN.Allocate']], + check => ['perm', '/sdn/vnets/{vnet}/subnets', ['SDN.Allocate']], }, parameters => { additionalProperties => 0, properties => { + vnet => get_standard_option('pve-sdn-vnet-id'), subnet => get_standard_option('pve-sdn-subnet-id', { completion => \&PVE::Network::SDN::Subnets::complete_sdn_subnets, }), diff --git a/PVE/API2/Network/SDN/Vnets.pm b/PVE/API2/Network/SDN/Vnets.pm index 58ec21f..4836500 100644 --- a/PVE/API2/Network/SDN/Vnets.pm +++ b/PVE/API2/Network/SDN/Vnets.pm @@ -12,6 +12,7 @@ use PVE::Network::SDN::Zones::Plugin; use PVE::Network::SDN::Vnets; use PVE::Network::SDN::VnetPlugin; use PVE::Network::SDN::Subnets; +use PVE::API2::Network::SDN::Subnets; use Storable qw(dclone); use PVE::JSONSchema qw(get_standard_option); @@ -21,6 +22,11 @@ use PVE::RESTHandler; use base qw(PVE::RESTHandler); +__PACKAGE__->register_method ({ + subclass => "PVE::API2::Network::SDN::Subnets", + path => '{vnet}/subnets', +}); + my $api_sdn_vnets_config = sub { my ($cfg, $id) = @_; diff --git a/PVE/Network/SDN/SubnetPlugin.pm b/PVE/Network/SDN/SubnetPlugin.pm index ef0b962..44751e9 100644 --- a/PVE/Network/SDN/SubnetPlugin.pm +++ b/PVE/Network/SDN/SubnetPlugin.pm @@ -94,6 +94,7 @@ sub properties { sub options { return { + vnet => { optional => 0 }, gateway => { optional => 1 }, # routes => { optional => 1 }, snat => { optional => 1 },