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

Re: [Xen-devel] [PATCH 10 of 10] libxl: "script:" prefix in block device description to setup vbd by hotplug scripts



On Thu, 2011-06-02 at 23:35 +0100, Marek Marczykowski wrote:
> # HG changeset patch
> # User Marek Marczykowski <marmarek@xxxxxxxxxxxx>
> # Date 1306963204 -7200
> # Node ID 1e3bf3cb3944402e01c57c400a02fe4293153458
> # Parent  10bdf8aa5b8a1cb2178f2b9cbcc9ce2fd5644403
> libxl: "script:" prefix in block device description to setup vbd by hotplug 
> scripts
> 
> Implements old behaviour of block-attach - only write parameters to xenstore
> and left all work for hotplug scripts. Allows to directly reuse xen block
> scripts (and maybe some custom ones). Example use:
> 
> xl block-attach vm "script:nbd 1.1.1.1 9999" xvdg w
> 
> Signed-off-by: Marek Marczykowski <marmarek@xxxxxxxxxxxx>

I didn't review this one, I think it probably interacts badly with (or
more likely is obsoleted by) Ian Jackson's recent disk parsing cleanup
series.

Ian.

> 
> diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
> --- a/tools/libxl/libxl.c
> +++ b/tools/libxl/libxl.c
> @@ -896,6 +896,13 @@
>          }
>      }
>  
> +    if (disk->backend == DISK_BACKEND_SCRIPT) {
> +        delimiter = strchr(file_name, ':');
> +        if (!delimiter)
> +            return ERROR_INVAL;
> +        return 0;
> +    }
> +
>      if ( stat(file_name, &stat_buf) != 0 ) {
>          LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "failed to stat %s", 
> file_name);
>          return ERROR_INVAL;
> @@ -965,6 +972,24 @@
>  
>              device.backend_kind = DEVICE_VBD;
>              break;
> +        case DISK_BACKEND_SCRIPT:
> +                     {
> +                             char *delimiter;
> +                             backend_type = libxl__strdup(&gc, 
> disk->pdev_path);
> +                             delimiter = strchr(backend_type, ':');
> +                             if (!delimiter) {
> +                                     rc = ERROR_FAIL;
> +                                     goto out_free;
> +                             }
> +                             *delimiter = '\0';
> +                             flexarray_append(back, "params");
> +                             flexarray_append(back, delimiter+1);
> +                flexarray_append(back, "scripted");
> +                flexarray_append(back, "1");
> +
> +                             device.backend_kind = DEVICE_VBD;
> +                     }
> +            break;
>          case DISK_BACKEND_TAP:
>              if (libxl__blktap_enabled(&gc) && disk->format != 
> DISK_FORMAT_EMPTY) {
>                  const char *dev = libxl__blktap_devpath(&gc,
> @@ -1060,7 +1085,7 @@
>      device.backend_domid    = disk->backend_domid;
>      device.backend_devid    = devid;
>      device.backend_kind     = 
> -        (disk->backend == DISK_BACKEND_PHY) ? DEVICE_VBD : DEVICE_TAP;
> +        (disk->backend == DISK_BACKEND_PHY || disk->backend == 
> DISK_BACKEND_SCRIPT) ? DEVICE_VBD : DEVICE_TAP;
>      device.domid            = disk->domid;
>      device.devid            = devid;
>      device.kind             = DEVICE_VBD;
> diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
> --- a/tools/libxl/libxl.h
> +++ b/tools/libxl/libxl.h
> @@ -185,6 +185,7 @@
>      DISK_BACKEND_PHY,
>      DISK_BACKEND_TAP,
>      DISK_BACKEND_QDISK,
> +    DISK_BACKEND_SCRIPT,
>  } libxl_disk_backend;
>  
>  typedef enum {
> diff --git a/tools/libxl/libxl_device.c b/tools/libxl/libxl_device.c
> --- a/tools/libxl/libxl_device.c
> +++ b/tools/libxl/libxl_device.c
> @@ -139,6 +139,7 @@
>          case DISK_BACKEND_QDISK: return "qdisk";
>          case DISK_BACKEND_TAP: return "tap";
>          case DISK_BACKEND_PHY: return "phy";
> +        case DISK_BACKEND_SCRIPT: return "script";
>          default: return NULL;
>      }
>  }
> diff --git a/tools/libxl/libxl_utils.c b/tools/libxl/libxl_utils.c
> --- a/tools/libxl/libxl_utils.c
> +++ b/tools/libxl/libxl_utils.c
> @@ -282,6 +282,8 @@
>  
>      if (!strcmp(s, "phy")) {
>          *backend = DISK_BACKEND_PHY;
> +    } else if (!strcmp(s, "script")) {
> +        *backend = DISK_BACKEND_SCRIPT;
>      } else if (!strcmp(s, "file")) {
>          *backend = DISK_BACKEND_TAP;
>      } else if (!strcmp(s, "tap")) {
> @@ -553,8 +555,13 @@
>      disk->domid = domid;
>      be_path = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, 
> "%s/backend", diskpath));
>      disk->pdev_path = strdup(libxl__xs_read(&gc, XBT_NULL, 
> libxl__sprintf(&gc, "%s/params", be_path)));
> -    val = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/type", 
> be_path));
> -    libxl_string_to_backend(ctx, val, &(disk->backend));
> +    val = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/scripted", 
> be_path));
> +    if (val && atoi(val))
> +        disk->backend = DISK_BACKEND_SCRIPT;
> +    else {
> +        val = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/type", 
> be_path));
> +        libxl_string_to_backend(ctx, val, &(disk->backend));
> +    }
>      disk->vdev = strdup(libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, 
> "%s/dev", be_path)));
>      val = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/removable", 
> be_path));
>      disk->unpluggable = !strcmp(val, "1");
> diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
> --- a/tools/libxl/xl_cmdimpl.c
> +++ b/tools/libxl/xl_cmdimpl.c
> @@ -481,6 +481,10 @@
>                      state = DSTATE_PHYSPATH;
>                      disk->format = DISK_FORMAT_RAW;
>                      disk->backend = DISK_BACKEND_PHY;
> +                }else if ( !strcmp(tok, "script") ) {
> +                    state = DSTATE_PHYSPATH;
> +                    disk->format = DISK_FORMAT_RAW;
> +                    disk->backend = DISK_BACKEND_SCRIPT;
>                  }else if ( !strcmp(tok, "file") ) {
>                      state = DSTATE_PHYSPATH;
>                      disk->format = DISK_FORMAT_RAW;
> @@ -4435,6 +4439,8 @@
>      tok = strtok(argv[optind+1], ":");
>      if (!strcmp(tok, "phy")) {
>          disk.backend = DISK_BACKEND_PHY;
> +    } else if (!strcmp(tok, "script")) {
> +        disk.backend = DISK_BACKEND_SCRIPT;
>      } else if (!strcmp(tok, "file")) {
>          disk.backend = DISK_BACKEND_TAP;
>      } else if (!strcmp(tok, "tap")) {
> 
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

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