[virt-tools-list] [PATCH] virt-install: avoid disk name collisions
Satoru SATOH
satoru.satoh at gmail.com
Thu Oct 4 10:45:57 UTC 2012
Hi,
The issue looks same as rhbz#857424:
https://bugzilla.redhat.com/show_bug.cgi?id=857424
My patch utilizes itertools.count and should avoid collisions also,
I guess.
- satoru
2012/10/4 Guido Günther <agx at sigxcpu.org>:
> When specifying multiple disks in pool without giving a name:
>
> virt-install \
> --disk=pool=test,bus=virtio,size=3.0,sparse=false
> --disk=pool=test,bus=virtio,size=3.0,sparse=false
> ...
>
> virt-install creates the names before hand which leads to name
> collisions later on. Avoid this by filling in a collision list
> with the image basenames.
>
> This is overly cautions but better than running into a name collision
> during the vm install.
> ---
> virt-install | 4 +++-
> virtinst/cli.py | 10 ++++++----
> 2 files changed, 9 insertions(+), 5 deletions(-)
>
> diff --git a/virt-install b/virt-install
> index cb42d56..12e65db 100755
> --- a/virt-install
> +++ b/virt-install
> @@ -134,7 +134,9 @@ def get_disk(diskopts, size, sparse, guest, is_file_path):
> if is_file_path:
> path = diskopts
> else:
> - dev, size = cli.parse_disk(guest, diskopts)
> + collidelist = [os.path.basename(disk.path) for disk in guest.disks]
> + dev, size = cli.parse_disk(guest, diskopts,
> + collidelist=collidelist)
> path = dev.path
> sparse = dev.sparse
>
> diff --git a/virtinst/cli.py b/virtinst/cli.py
> index c5b9b17..feb01ec 100644
> --- a/virtinst/cli.py
> +++ b/virtinst/cli.py
> @@ -1476,7 +1476,7 @@ def parse_security(guest, security):
> # --disk parsing #
> ##################
>
> -def _parse_disk_source(guest, path, pool, vol, size, fmt, sparse):
> +def _parse_disk_source(guest, path, pool, vol, size, fmt, sparse, collidelist=None):
> abspath = None
> volinst = None
> volobj = None
> @@ -1500,7 +1500,8 @@ def _parse_disk_source(guest, path, pool, vol, size, fmt, sparse):
> vname = virtinst.Storage.StorageVolume.find_free_name(conn=guest.conn,
> pool_name=pool,
> name=guest.name,
> - suffix=".img")
> + suffix=".img",
> + collidelist=collidelist)
> volinst = vc(pool_name=pool, name=vname, conn=guest.conn,
> allocation=0, capacity=(size and
> size * 1024 * 1024 * 1024))
> @@ -1528,7 +1529,7 @@ def _parse_disk_source(guest, path, pool, vol, size, fmt, sparse):
>
> return abspath, volinst, volobj
>
> -def parse_disk(guest, optstr, dev=None):
> +def parse_disk(guest, optstr, dev=None, collidelist=None):
> """
> helper to properly parse --disk options
> """
> @@ -1594,7 +1595,8 @@ def parse_disk(guest, optstr, dev=None):
> device = opt_get("device")
>
> abspath, volinst, volobj = _parse_disk_source(guest, path, pool, vol,
> - size, fmt, sparse)
> + size, fmt, sparse,
> + collidelist)
>
> if not dev:
> # Build a stub device that should always validate cleanly
> --
> 1.7.10.4
>
> _______________________________________________
> virt-tools-list mailing list
> virt-tools-list at redhat.com
> https://www.redhat.com/mailman/listinfo/virt-tools-list
More information about the virt-tools-list
mailing list