[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