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

Signed-off-by: Thomas Lamprecht <t.lampre...@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


_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to