[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] xl: Change output from xl -N create to be more useful



On Fri, Jun 26, 2015 at 03:29:15PM +0100, Ian Jackson wrote:
> Currently, xl -N create produces:
> 
>     {
>         "domid": null,
>         "config": {
>             "c_info": {
>                 "type": "pv",
>      [etc]
>     }
> 
> The domid is always NULL (as the domain has not been created at this
> stage).
> 
> This is annoying if you want to take this output and use it for some
> actually useful purpose like domain creation: either it needs to be
> massaged, or the the consuming tool needs to be taught to look inside
> the json object for the `config' element (which IMO makes no sense as
> an interface).
> 
> We would like to be able to pass libxl json configs around sensibly.
> In the future maybe xl will grow an option to create a domain from a
> json config, and this is currently something I want to be able to have
> a test tool do.
> 
> Note that this change is NOT BACKWARDS COMPATIBLE.  But it would only
> adversely affects anyone who uses `xl -N create' and then saves and
> processes the JSON.  (The output from xl list et al is not changed; it
> normally needs the domid.)  Such a user should probably have already
> have complained about the infelicitous output.  If they haven't it
> would be simple enough for them to bookend the output so as to provide
> compatible output.
> 
> If this backward compatibility problem is considered a blocker for
> this patch, then I will respin, with one of the following two
> workarounds:
>   - A new option to force sane output
>   - Generate output which contains the domain config twice,
>     once directly in the main struct, and a copy in "config"

I don't think keeping a broken interface for the sake of backward
compatibility is worth it.

> 
> Signed-off-by: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
> CC: Ian Campbell <ian.campbell@xxxxxxxxxx>
> CC: Wei Liu <wei.liu2@xxxxxxxxxx>
> CC: Euan Harris <euan.harris@xxxxxxxxxx>
> ---
>  tools/libxl/xl_cmdimpl.c |   17 ++++++++++++++---
>  1 file changed, 14 insertions(+), 3 deletions(-)
> 
> diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
> index c858068..9e9ee5e 100644
> --- a/tools/libxl/xl_cmdimpl.c
> +++ b/tools/libxl/xl_cmdimpl.c
> @@ -2687,9 +2687,20 @@ static uint32_t create_domain(struct domain_create 
> *dom_info)
>          }
>      }
>  
> -    if (debug || dom_info->dryrun)
> -        printf_info(default_output_format, -1, &d_config,
> -                    debug ? stderr : stdout);
> +    if (debug || dom_info->dryrun) {
> +        FILE *cfg_print_fh = debug ? stderr : stdout;
> +        if (default_output_format == OUTPUT_FORMAT_SXP) {
> +            printf_info_sexp(-1, &d_config, cfg_print_fh);
> +        } else {
> +            char *json = libxl_domain_config_to_json(ctx, &d_config);
> +            fputs(json, stdout);
> +            free(json);
> +            if (ferror(stdout) || fflush(stdout)) {
> +                perror("stdout"); exit(-1);
> +            }
> +        }
> +    }
> +
>  

Actually you may want to update main_config_update, which also prints
out domain configuration. Then remove the will-be-defunct
printf_info{,_one_json}.

Wei.

>      ret = 0;
>      if (dom_info->dryrun)
> -- 
> 1.7.10.4

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.