On Wed, Nov 25, 2015 at 14:11:08 -0500, John Ferlan wrote:
> https://bugzilla.redhat.com/show_bug.cgi?id=830056
> 
> Utilize recently added VIR_STORAGE_POOL_CREATE_WITH_BUILD* flags in
> order to pass the flags along to the virStoragePoolCreateXML and
> virStoragePoolCreate API's.
> 
> This affects the 'virsh pool-create', 'virsh pool-create-as', and
> 'virsh pool-start' commands.  While it could be argued that pool-start
> doesn't need the flags, they could prove useful for someone trying to
> do one command build --overwrite and start command processing or
> essentially starting with a clean slate.
> 
> NB:
> This patch is loosely based upon code originally authored by Osier
> Yang that were not reviewed and pushed, see:
> 
> https://www.redhat.com/archives/libvir-list/2012-July/msg00497.html
> Signed-off-by: John Ferlan <jfer...@redhat.com>
> ---
>  tools/virsh-pool.c | 73 
> +++++++++++++++++++++++++++++++++++++++++++++++++++---
>  tools/virsh.pod    | 25 ++++++++++++++++++-
>  2 files changed, 94 insertions(+), 4 deletions(-)
> 
> diff --git a/tools/virsh-pool.c b/tools/virsh-pool.c
> index cb91cd3..1bb987d 100644
> --- a/tools/virsh-pool.c
> +++ b/tools/virsh-pool.c
> @@ -47,6 +47,13 @@
>       .help = N_("file containing an XML pool description")    \
>      },                                                        \
>  
> +#define OPT_BUILD_COMMON                                      \
> +    {.name = "build",                                         \
> +     .type = VSH_OT_BOOL,                                     \
> +     .flags = 0,                                              \
> +     .help = N_("build the pool as normal")                   \
> +    },                                                        \
> +
>  #define OPT_NO_OVERWRITE_COMMON                                   \
>      {.name = "no-overwrite",                                      \
>       .type = VSH_OT_BOOL,                                         \
> @@ -235,6 +242,9 @@ static const vshCmdInfo info_pool_create[] = {
>  
>  static const vshCmdOptDef opts_pool_create[] = {
>      OPT_FILE_COMMON
> +    OPT_BUILD_COMMON
> +    OPT_NO_OVERWRITE_COMMON
> +    OPT_OVERWRITE_COMMON
> 

These look terrible without commas between entries.

>      {.name = NULL}
>  };
> @@ -246,15 +256,32 @@ cmdPoolCreate(vshControl *ctl, const vshCmd *cmd)
>      const char *from = NULL;
>      bool ret = true;
>      char *buffer;
> +    bool build;
> +    bool overwrite;
> +    bool no_overwrite;
> +    unsigned int flags = 0;
>      virshControlPtr priv = ctl->privData;
>  
>      if (vshCommandOptStringReq(ctl, cmd, "file", &from) < 0)
>          return false;
>  
> +    build = vshCommandOptBool(cmd, "build");
> +    overwrite = vshCommandOptBool(cmd, "overwrite");
> +    no_overwrite = vshCommandOptBool(cmd, "no-overwrite");
> +
> +    VSH_EXCLUSIVE_OPTIONS_VAR(overwrite, no_overwrite);

This should be used only if the name of the variable matches the name of
the option flag since the variable name is used in the error message in
place of the option flag name.

> +
> +    if (build)
> +        flags |= VIR_STORAGE_POOL_CREATE_WITH_BUILD;
> +    if (overwrite)
> +        flags |= VIR_STORAGE_POOL_CREATE_WITH_BUILD_OVERWRITE;
> +    if (no_overwrite)
> +        flags |= VIR_STORAGE_POOL_CREATE_WITH_BUILD_NO_OVERWRITE;
> +
>      if (virFileReadAll(from, VSH_MAX_XML_FILE, &buffer) < 0)
>          return false;
>  
> -    pool = virStoragePoolCreateXML(priv->conn, buffer, 0);
> +    pool = virStoragePoolCreateXML(priv->conn, buffer, flags);
>      VIR_FREE(buffer);
>  
>      if (pool != NULL) {
> @@ -386,6 +413,9 @@ static const vshCmdInfo info_pool_create_as[] = {
>  
>  static const vshCmdOptDef opts_pool_create_as[] = {
>      OPTS_POOL_COMMON_X_AS
> +    OPT_BUILD_COMMON
> +    OPT_NO_OVERWRITE_COMMON
> +    OPT_OVERWRITE_COMMON
>  
>      {.name = NULL}
>  };
> @@ -397,8 +427,25 @@ cmdPoolCreateAs(vshControl *ctl, const vshCmd *cmd)
>      const char *name;
>      char *xml;
>      bool printXML = vshCommandOptBool(cmd, "print-xml");
> +    bool build;
> +    bool overwrite;
> +    bool no_overwrite;
> +    unsigned int flags = 0;
>      virshControlPtr priv = ctl->privData;
>  
> +    build = vshCommandOptBool(cmd, "build");
> +    overwrite = vshCommandOptBool(cmd, "overwrite");
> +    no_overwrite = vshCommandOptBool(cmd, "no-overwrite");
> +
> +    VSH_EXCLUSIVE_OPTIONS_VAR(overwrite, no_overwrite);

See above.

> +
> +    if (build)
> +        flags |= VIR_STORAGE_POOL_CREATE_WITH_BUILD;
> +    if (overwrite)
> +        flags |= VIR_STORAGE_POOL_CREATE_WITH_BUILD_OVERWRITE;
> +    if (no_overwrite)
> +        flags |= VIR_STORAGE_POOL_CREATE_WITH_BUILD_NO_OVERWRITE;
> +
>      if (!virshBuildPoolXML(ctl, cmd, &name, &xml))
>          return false;
> 

Peter

Attachment: signature.asc
Description: Digital signature

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to