[pve-devel] applied: [pve-common] print_api_result: allow to pass undefined schema

Thomas Lamprecht t.lamprecht at proxmox.com
Mon Jul 30 16:05:08 CEST 2018


Am 07/30/2018 um 03:09 PM schrieb Dietmar Maurer:
> This is useful if we do not have a fixed schema, for example to
> print results from qemu agent commands.
> 
> Signed-off-by: Dietmar Maurer <dietmar at proxmox.com>
> ---
>   src/PVE/CLIFormatter.pm | 28 ++++++++++++++++++++++++++--
>   1 file changed, 26 insertions(+), 2 deletions(-)
> 
> diff --git a/src/PVE/CLIFormatter.pm b/src/PVE/CLIFormatter.pm
> index 2a2ff30..411da5d 100644
> --- a/src/PVE/CLIFormatter.pm
> +++ b/src/PVE/CLIFormatter.pm
> @@ -135,7 +135,8 @@ sub data_to_text {
>       }
>   
>       if (my $class = ref($data)) {
> -	return to_json($data, { canonical => 1 });
> +	# JSON::PP::Boolean requires allow_nonref
> +	return to_json($data, { allow_nonref => 1, canonical => 1 });
>       } else {
>   	return "$data";
>       }
> @@ -382,6 +383,23 @@ sub print_api_list {
>       print_text_table($data, $returnprops, $props_to_print, $options, $terminal_opts);
>   }
>   
> +my $guess_type = sub {
> +    my $data = shift;
> +
> +    return 'null' if !defined($data);
> +
> +    my $class = ref($data);
> +    return 'string' if !$class;
> +
> +    if ($class eq 'HASH') {
> +	return 'object';
> +    } elsif ($class eq 'ARRAY') {
> +	return 'array';
> +    } else {
> +	return 'string'; # better than nothing
> +    }
> +};
> +
>   sub print_api_result {
>       my ($data, $result_schema, $props_to_print, $options, $terminal_opts) = @_;
>   
> @@ -391,7 +409,13 @@ sub print_api_result {
>   
>       my $format = $options->{'output-format'} // 'text';
>   
> -    return if $result_schema->{type} eq 'null';
> +    if (!$result_schema) {
> +	return if $result_schema->{type} eq 'null';
> +    } else {
> +	my $type = $guess_type->($data);
> +	$result_schema = { type => $type };
> +	$result_schema->{items} = { type => $guess_type->($data->[0]) } if $type eq 'array';
> +    }
>   
>       if ($format eq 'yaml') {
>   	print encode('UTF-8', CPAN::Meta::YAML::Dump($data));
> 

ah yes, guest agent commands look now nicer, applied




More information about the pve-devel mailing list