From: "Fabian Grünbichler" <f.gruenbichler@proxmox.com>
To: Proxmox VE development discussion <pve-devel@lists.proxmox.com>
Subject: [pve-devel] applied-series: [PATCH v5 storage qemu-server container 0/9] move disk or volume to other guests
Date: Tue, 09 Nov 2021 17:52:14 +0100 [thread overview]
Message-ID: <1636476683.04zlsszb3q.astroid@nora.none> (raw)
In-Reply-To: <20211109145540.1422104-1-a.lauterer@proxmox.com>
with a small fixup for the ApiChangelog conflicts, and a more detailed
explanation in the pve-storage commit message. I'll likely do a few more
style follow-ups tomorrow ;)
On November 9, 2021 3:55 pm, Aaron Lauterer wrote:
> This version 5 came to be after Fabian did notice that exposing the
> 'find_free_volname' could cause some troubles down the line since it
> could be seen as an incompatible change in the storage API, especially
> of other parts will start using it as well.
>
> We discussed it off list and the current version is the result of that.
> We drop all of find_free_volname for now and change the parameters given
> to the rename functions which now take the source volid, target vmid and
> target volname. The latter two are either or optional. If the target
> vmid is not given, it will be set to the source vmid. If no target
> volname is given, the rename function will request the next free one
> itself within the storage plugin (find_free_diskname).
>
> This makes it possible to keep our storage api compatible and we can
> continue working on making it possible to give disk images a more custom
> name. The raname functions as implemented should be able to deal with
> this situation already (only did light testing on this).
>
> If, in the future it is necessary to have something like
> find_free_volname as part of the storage api, we can add it again at the
> right time, where a storage api version bump is okay.
>
> We will have to discuss if we want to use v5 or are okay with v4.
>
> Additionally I split up adding valid unused volume keys in the
> LXC/Config.pm into its own patch as it is on the Qemu side.
>
> Previous cover letter follows:
> ------------------------------
>
> This is the continuation of 'disk-reassign' but instead of a separate
> API endpoint we now follow the approach to make it part of the
> 'move-disk' and 'move-volume' endpoints for VMs and containers.
>
> The main idea is to make it easy to move a disk/volume to another guest.
> Currently this is a manual and error prone process that requires
> knowledge of how PVE handles disks/volumes and the mapping which guest
> they belong to.
>
> With this, the 'qm move-disk' and 'pct move-volume' are changed in the
> way that the storage parameter is optional as well as the new
> target-vmid and target-{disk,volume}. This will keep old calls to move the
> disk/volume to another storage working. To move to another guest, the
> storage needs to be omitted.
>
> The following storage types are implemented at the moment:
> * dir based ones
> * ZFS
> * (thin) LVM
> * Ceph RBD
>
> Most parts of the disk-reassign code has been taken and moved into the
> 'move_disk' and 'move_volume' endpoints with conditional checking if the
> reassign code or the move to other storage code is meant to run
> depending on the given parameters.
>
> Changes since v4:
> * remove find_free_volname completely
> * change rename functions to take either target_vmid or target_volname
> as parameter. The target_volname as parameter makes it possible to
> easily implement custom renaming in the future. If no target_volname
> is given, it will use find_free_diskname to find the next free one.
> * removed calls to find_free_volname in the container und qemu APIs
>
> Changes since v3:
> * added check if $vmid exists in $vmlist
> * added check if volume if part of a snapshot (containers, qemu already
> had it)
> * added section in storage/ApiChangeLog
> * code style issues
>
> Changes since v2:
> * fixed base image handling
> * fixed code style issues
>
> Changes since v1 [2] (thx @ Fabian_E for the reviews!):
> * drop exposed 'find_free_diskname' method
> * drop 'wants_fmt_suffix' method (not needed anymore)
> * introduce 'find_free_volname' which decides if only the diskname is
> needed or the longer path for directory based storages
> * use $source_volname instead of $source_volid -> avoids some extra
> calls to get to $source_volname again
> * make --target-{disk,volume} optional and fall back to source key
> * smaller fixes in code quality and using existing functions like
> 'parse_volname' instead of a custom regex (possible with the new
> changes)
>
>
> Changes since the RFC [1]:
> * added check if target guest is replicated and fail if storage does not
> support replication
> * only pass minimum of needed parameters to the storage layer and infer
> other needed information from that
> * lock storage and check if the volume aready exists (handling a
> possible race condition between calling find_free_disk and the actual
> renaming)
> * use a helper method to determine if the plugin needs the fmt suffix
> in the volume name
> * getting format of the source and pass it to find_free_disk
> * style fixes (long lines, multiline post-if, ...)
>
> [1] https://lists.proxmox.com/pipermail/pve-devel/2021-June/048400.html
> [2] https://lists.proxmox.com/pipermail/pve-devel/2021-July/049445.html
>
> storage: Aaron Lauterer (1):
> add disk rename feature
>
> ApiChangeLog | 10 ++++++++++
> PVE/Storage.pm | 25 ++++++++++++++++++++++--
> PVE/Storage/LVMPlugin.pm | 34 ++++++++++++++++++++++++++++++++
> PVE/Storage/LvmThinPlugin.pm | 1 +
> PVE/Storage/Plugin.pm | 38 ++++++++++++++++++++++++++++++++++++
> PVE/Storage/RBDPlugin.pm | 34 ++++++++++++++++++++++++++++++++
> PVE/Storage/ZFSPoolPlugin.pm | 31 +++++++++++++++++++++++++++++
> 7 files changed, 171 insertions(+), 2 deletions(-)
>
>
> qemu-server: Aaron Lauterer (4):
> cli: qm: change move_disk to move-disk
> Drive: add valid_drive_names_with_unused
> api: move-disk: add move to other VM
> api: move-disk: cleanup very long lines
>
> PVE/API2/Qemu.pm | 227 ++++++++++++++++++++++++++++++++++++++--
> PVE/CLI/qm.pm | 3 +-
> PVE/QemuServer/Drive.pm | 4 +
> 3 files changed, 223 insertions(+), 11 deletions(-)
>
> container: Aaron Lauterer (4):
> cli: pct: change move_volume to move-volume
> Config: add valid_volume_keys_with_unused
> api: move-volume: add move to another container
> api: move-volume: cleanup very long lines
>
> src/PVE/API2/LXC.pm | 302 ++++++++++++++++++++++++++++++++++++++----
> src/PVE/CLI/pct.pm | 3 +-
> src/PVE/LXC/Config.pm | 9 ++
> 3 files changed, 285 insertions(+), 29 deletions(-)
>
>
> --
> 2.30.2
>
>
>
> _______________________________________________
> pve-devel mailing list
> pve-devel@lists.proxmox.com
> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
>
>
>
prev parent reply other threads:[~2021-11-09 16:52 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-09 14:55 [pve-devel] " Aaron Lauterer
2021-11-09 14:55 ` [pve-devel] [PATCH v5 storage 1/9] add disk rename feature Aaron Lauterer
2021-11-09 14:55 ` [pve-devel] [PATCH v5 qemu-server 2/9] cli: qm: change move_disk to move-disk Aaron Lauterer
2021-11-09 14:55 ` [pve-devel] [PATCH v5 qemu-server 3/9] Drive: add valid_drive_names_with_unused Aaron Lauterer
2021-11-09 14:55 ` [pve-devel] [PATCH v5 qemu-server 4/9] api: move-disk: add move to other VM Aaron Lauterer
2021-11-09 14:55 ` [pve-devel] [PATCH v5 qemu-server 5/9] api: move-disk: cleanup very long lines Aaron Lauterer
2021-11-09 14:55 ` [pve-devel] [PATCH v5 container 6/9] cli: pct: change move_volume to move-volume Aaron Lauterer
2021-11-09 14:55 ` [pve-devel] [PATCH v5 container 7/9] Config: add valid_volume_keys_with_unused Aaron Lauterer
2021-11-09 14:55 ` [pve-devel] [PATCH v5 container 8/9] api: move-volume: add move to another container Aaron Lauterer
2021-11-09 14:55 ` [pve-devel] [PATCH v5 container 9/9] api: move-volume: cleanup very long lines Aaron Lauterer
2021-11-09 16:52 ` Fabian Grünbichler [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1636476683.04zlsszb3q.astroid@nora.none \
--to=f.gruenbichler@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.