[pve-devel] applied: [PATCH network] api: fix reload all UPID handling

Thomas Lamprecht t.lamprecht at proxmox.com
Wed May 13 11:31:16 CEST 2020


run_command returns the exit code, we need to parse out the UPID from
the outfunc.

Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
---
 PVE/API2/Network/SDN.pm | 32 ++++++++++++++++++++------------
 1 file changed, 20 insertions(+), 12 deletions(-)

diff --git a/PVE/API2/Network/SDN.pm b/PVE/API2/Network/SDN.pm
index 4af2b6f..3f497fc 100644
--- a/PVE/API2/Network/SDN.pm
+++ b/PVE/API2/Network/SDN.pm
@@ -3,16 +3,17 @@ package PVE::API2::Network::SDN;
 use strict;
 use warnings;
 
-use PVE::SafeSyslog;
-use PVE::Tools;
 use PVE::Cluster qw(cfs_lock_file cfs_read_file cfs_write_file);
+use PVE::Exception qw(raise_param_exc);
+use PVE::JSONSchema qw(get_standard_option);
 use PVE::RESTHandler;
 use PVE::RPCEnvironment;
-use PVE::JSONSchema qw(get_standard_option);
-use PVE::Exception qw(raise_param_exc);
+use PVE::SafeSyslog;
+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::Controllers;
 
 use base qw(PVE::RESTHandler);
 
@@ -68,8 +69,14 @@ __PACKAGE__->register_method({
 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"]);
+    # FIXME: how to proxy to final node ?
+    my $upid;
+    run_command(['pvesh', 'set', "/nodes/$nodename/network"], outfunc => sub {
+	my $line = shift;
+	if ($line =~ /^["']?(UPID:[^\s"']+)["']?$/) {
+	    $upid = $1;
+	}
+    });
     #my $upid = PVE::API2::Network->reload_network_config(node => $nodename});
     my $res = PVE::Tools::upid_decode($upid);
 
@@ -101,13 +108,14 @@ __PACKAGE__->register_method ({
             $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); };
+	    for my $node (@$nodelist) {
+		my $pid = eval { $create_reload_network_worker->($node) };
 		warn $@ if $@;
-		next if !$pid;
 	    }
+
+	    # FIXME: use libpve-apiclient (like in cluster join) to create
+	    # tasks and moitor the tasks.
+
 	    return;
         };
 
-- 
2.20.1





More information about the pve-devel mailing list