fixme: current using pvesh Signed-off-by: Alexandre Derumier <aderum...@odiso.com> --- PVE/API2/Network/SDN.pm | 65 +++++++++++++++++++++++++++++ PVE/API2/Network/SDN/Controllers.pm | 24 ----------- PVE/API2/Network/SDN/Vnets.pm | 24 ----------- PVE/API2/Network/SDN/Zones.pm | 24 ----------- 4 files changed, 65 insertions(+), 72 deletions(-)
diff --git a/PVE/API2/Network/SDN.pm b/PVE/API2/Network/SDN.pm index 512e0b2..66856c5 100644 --- a/PVE/API2/Network/SDN.pm +++ b/PVE/API2/Network/SDN.pm @@ -65,5 +65,70 @@ __PACKAGE__->register_method({ return $res; }}); +my $create_reload_network_worker = sub { + my ($nodename) = @_; + + #fixme: how to proxy to final node ? + my $upid = PVE::Tools::run_command(['pvesh', 'set', "/nodes/$nodename/network"]); + #my $upid = PVE::API2::Network->reload_network_config(node => $nodename}); + my $res = PVE::Tools::upid_decode($upid); + + return $res->{pid}; +}; + +__PACKAGE__->register_method ({ + name => 'reload', + protected => 1, + path => '', + method => 'PUT', + description => "Apply sdn controller changes && reload.", +# permissions => { +# check => ['perm', '/cluster/sdn/controllers', ['SDN.Allocate']], +# }, + parameters => { + additionalProperties => 0, + }, + returns => { + type => 'string', + }, + code => sub { + my ($param) = @_; + + my $rpcenv = PVE::RPCEnvironment::get(); + my $authuser = $rpcenv->get_user(); + + 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"; + } + + if (-e "/etc/pve/sdn/zones.cfg.new") { + rename("/etc/pve/sdn/zones.cfg.new", "/etc/pve/sdn/zones.cfg") + || die "applying sdn/zones.cfg changes failed - $!\n"; + } + + if (-e "/etc/pve/sdn/vnets.cfg.new") { + rename("/etc/pve/sdn/vnets.cfg.new", "/etc/pve/sdn/vnets.cfg") + || die "applying sdn/vnets.cfg changes failed - $!\n"; + } + + my $code = sub { + $rpcenv->{type} = 'priv'; # to start tasks in background + PVE::Cluster::check_cfs_quorum(); + my $nodelist = PVE::Cluster::get_nodelist(); + foreach my $node (@$nodelist) { + + my $pid; + eval { $pid = &$create_reload_network_worker($node); }; + warn $@ if $@; + next if !$pid; + } + return; + }; + + return $rpcenv->fork_worker('reloadnetworkall', undef, $authuser, $code); + + }}); + 1; diff --git a/PVE/API2/Network/SDN/Controllers.pm b/PVE/API2/Network/SDN/Controllers.pm index 99fd138..7b8356d 100644 --- a/PVE/API2/Network/SDN/Controllers.pm +++ b/PVE/API2/Network/SDN/Controllers.pm @@ -152,30 +152,6 @@ __PACKAGE__->register_method ({ 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, diff --git a/PVE/API2/Network/SDN/Vnets.pm b/PVE/API2/Network/SDN/Vnets.pm index 0526b06..bb3415f 100644 --- a/PVE/API2/Network/SDN/Vnets.pm +++ b/PVE/API2/Network/SDN/Vnets.pm @@ -133,30 +133,6 @@ __PACKAGE__->register_method ({ return undef; }}); -__PACKAGE__->register_method ({ - name => 'apply_configuration', - protected => 1, - path => '', - method => 'PUT', - description => "Apply sdn vnet changes.", -# permissions => { -# check => ['perm', '/cluster/sdn/vnets', ['SDN.Allocate']], -# }, - parameters => { - additionalProperties => 0, - }, - returns => { type => 'null' }, - code => sub { - my ($param) = @_; - - die "no sdn vnet changes to apply" if !-e "/etc/pve/sdn/vnets.cfg.new"; - rename("/etc/pve/sdn/vnets.cfg.new", "/etc/pve/sdn/vnets.cfg") - || die "applying sdn/vnets.cfg changes failed - $!\n"; - - - return undef; - }}); - __PACKAGE__->register_method ({ name => 'revert_configuration', protected => 1, diff --git a/PVE/API2/Network/SDN/Zones.pm b/PVE/API2/Network/SDN/Zones.pm index a447813..ce99bd8 100644 --- a/PVE/API2/Network/SDN/Zones.pm +++ b/PVE/API2/Network/SDN/Zones.pm @@ -155,30 +155,6 @@ __PACKAGE__->register_method ({ return undef; }}); -__PACKAGE__->register_method ({ - name => 'apply_configuration', - protected => 1, - path => '', - method => 'PUT', - description => "Apply sdn zone changes.", -# permissions => { -# check => ['perm', '/cluster/sdn/zones', ['SDN.Allocate']], -# }, - parameters => { - additionalProperties => 0, - }, - returns => { type => 'null' }, - code => sub { - my ($param) = @_; - - die "no sdn zone changes to apply" if !-e "/etc/pve/sdn/zones.cfg.new"; - rename("/etc/pve/sdn/zones.cfg.new", "/etc/pve/sdn/zones.cfg") - || die "applying sdn/zones.cfg changes failed - $!\n"; - - - return undef; - }}); - __PACKAGE__->register_method ({ name => 'revert_configuration', protected => 1, -- 2.20.1 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel