[pve-devel] applied: [PATCH pve-manager] pvesh: proxy : display result if not json

Thomas Lamprecht t.lamprecht at proxmox.com
Mon Feb 10 11:40:11 CET 2020


On 2/10/20 9:16 AM, Alexandre Derumier wrote:
> When a remote node not return a json, we got and error.
> 
> This is fixing this:
> 
> pvesh set /nodes/localname/network
> UPID:kvmformation2:0034937B:09352894:5E41106C:srvreload:networking:root at pam:
> 
> pvesh set /nodes/remotenode/network
> JSON text must be an object or array (but found number, string, true, false or null, use allow_nonref to allow this) at /usr/share/perl5/PVE/CLI/pvesh.pm line 125.
> 
> This patch simply return raw result if it's not a json
> 
> Signed-off-by: Alexandre Derumier <aderumier at odiso.com>
> ---
>  PVE/CLI/pvesh.pm | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/PVE/CLI/pvesh.pm b/PVE/CLI/pvesh.pm
> index 9b8e3245..56d32c3f 100755
> --- a/PVE/CLI/pvesh.pm
> +++ b/PVE/CLI/pvesh.pm
> @@ -122,7 +122,14 @@ sub proxy_handler {
>      PVE::Tools::run_command($remcmd, errmsg => "proxy handler failed",
>  			    outfunc => sub { $json .= shift });
>  
> -    return decode_json($json);
> +    my $decoded_json = undef;
> +    eval {
> +	$decoded_json = decode_json($json);
> +    };
> +    if ($@) {
> +	return $json;
> +    }
> +    return $decoded_json;
>  }
>  
>  sub extract_children {
> 

applied, with a followup. $json as name for the possible not-JSON data was a bit
confusing IMO. Also, one can use the fact that the last statement in an eval get's
returned from it and thus write:

my $decoded_json = eval { decode_json($json) };

it's slightly cleaner and shorter to read, but just a nit-pick :-) Thanks!



More information about the pve-devel mailing list