From 39cb3b0048a4728f28c4deb66e4bd7e72cc68ee4 Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Thu, 24 Apr 2025 10:17:23 -0400 Subject: [PATCH 1/3] scripts: Remove unused kdevops_storage_pool_user variable I would like to reuse this variable name. Two places define it, currently, but otherwise it appears to be unused. Clean up: Remove the places that define the variable. Signed-off-by: Chuck Lever --- scripts/guestfs.Makefile | 1 - scripts/vagrant.Makefile | 2 -- 2 files changed, 3 deletions(-) diff --git a/scripts/guestfs.Makefile b/scripts/guestfs.Makefile index 3dad6a14f..43bbea4fd 100644 --- a/scripts/guestfs.Makefile +++ b/scripts/guestfs.Makefile @@ -10,7 +10,6 @@ export KDEVOPS_PROVISIONED_SSH := $(KDEVOPS_PROVISIONED_SSH_DEFAULT_GUARD) GUESTFS_ARGS += guestfs_path='$(TOPDIR_PATH)/guestfs' GUESTFS_ARGS += data_home_dir=/home/kdevops GUESTFS_ARGS += virtbuilder_os_version=$(CONFIG_VIRT_BUILDER_OS_VERSION) -GUESTFS_ARGS += kdevops_storage_pool_user='$(USER)' GUESTFS_ARGS += libvirt_provider=True diff --git a/scripts/vagrant.Makefile b/scripts/vagrant.Makefile index fc69fb91f..e43a21d3c 100644 --- a/scripts/vagrant.Makefile +++ b/scripts/vagrant.Makefile @@ -30,8 +30,6 @@ else VAGRANT_PRIVATE_BOX_DEPS := endif -VAGRANT_ARGS += kdevops_storage_pool_user='$(USER)' - ifeq (y,$(CONFIG_LIBVIRT)) VAGRANT_ARGS += libvirt_provider=True From c50856dcc5c98f63fd244795ab39c893eebcba08 Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Thu, 24 Apr 2025 10:17:24 -0400 Subject: [PATCH 2/3] Kconfig: Define KDEVOPS_STORAGE_POOL_USER via Kconfig Prepare to replace the "kdevops" string in the storage pool path with the name of the user account running kdevops. First step is to define a Kconfig variable for the storage pool user. For the moment, the storage pool user name defaults to the same string it is currently. I would love for there to be a way to provide an actual pathname in CONFIG_KDEVOPS_STORAGE_POOL_PATH. I haven't found a way so far. Signed-off-by: Chuck Lever --- kconfigs/Kconfig.libvirt | 15 ++++++++++----- scripts/bringup_guestfs.sh | 3 +-- scripts/destroy_guestfs.sh | 2 +- scripts/guestfs.Makefile | 2 +- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/kconfigs/Kconfig.libvirt b/kconfigs/Kconfig.libvirt index cba8abf1e..04abadff4 100644 --- a/kconfigs/Kconfig.libvirt +++ b/kconfigs/Kconfig.libvirt @@ -164,11 +164,6 @@ config LIBVIRT_STORAGE_POOL_PATH default LIBVIRT_STORAGE_POOL_PATH_CUSTOM if LIBVIRT && LIBVIRT_STORAGE_POOL_PATH_CUSTOM_MANUAL default VIRTUALBOX_STORAGE_POOL_PATH_CUSTOM if VAGRANT_VIRTUALBOX -config KDEVOPS_STORAGE_POOL_PATH - string - output yaml - default "{{ libvirt_storage_pool_path }}/kdevops" - config QEMU_BIN_PATH string default QEMU_BIN_PATH_LIBVIRT if LIBVIRT @@ -1104,6 +1099,16 @@ config LIBVIRT_STORAGE_POOL_NAME For instance you may want to use a volume name of "data2" for a path on a partition on /data2/ or something like that. +config KDEVOPS_STORAGE_POOL_USER + string + output yaml + default "kdevops" + +config KDEVOPS_STORAGE_POOL_PATH + string + output yaml + default "{{ libvirt_storage_pool_path }}/{{ kdevops_storage_pool_user }}" + source "kconfigs/Kconfig.libvirt.zns" source "kconfigs/Kconfig.libvirt.largeio" source "kconfigs/Kconfig.libvirt.cxl" diff --git a/scripts/bringup_guestfs.sh b/scripts/bringup_guestfs.sh index 4c238a839..7cafa7ffa 100755 --- a/scripts/bringup_guestfs.sh +++ b/scripts/bringup_guestfs.sh @@ -14,8 +14,7 @@ IMG_FMT="qcow2" if [ "${CONFIG_LIBVIRT_EXTRA_DRIVE_FORMAT_RAW}" = "y" ]; then IMG_FMT="raw" fi -STORAGETOPDIR="${CONFIG_LIBVIRT_STORAGE_POOL_PATH}" -STORAGEDIR="${STORAGETOPDIR}/kdevops/guestfs" +STORAGEDIR="${CONFIG_LIBVIRT_STORAGE_POOL_PATH}/${CONFIG_KDEVOPS_STORAGE_POOL_USER}/guestfs" QEMU_GROUP=$CONFIG_LIBVIRT_QEMU_GROUP GUESTFSDIR="${TOPDIR}/guestfs" OS_VERSION=${CONFIG_VIRT_BUILDER_OS_VERSION} diff --git a/scripts/destroy_guestfs.sh b/scripts/destroy_guestfs.sh index ee5dc2b57..dfbb4f15f 100755 --- a/scripts/destroy_guestfs.sh +++ b/scripts/destroy_guestfs.sh @@ -7,7 +7,7 @@ source ${TOPDIR}/scripts/lib.sh export LIBVIRT_DEFAULT_URI=$CONFIG_LIBVIRT_URI -STORAGEDIR="${CONFIG_LIBVIRT_STORAGE_POOL_PATH}/kdevops/guestfs" +STORAGEDIR="${CONFIG_LIBVIRT_STORAGE_POOL_PATH}/${CONFIG_KDEVOPS_STORAGE_POOL_USER}/guestfs" GUESTFSDIR="${TOPDIR}/guestfs" if [ -f "$GUESTFSDIR/kdevops_nodes.yaml" ]; then diff --git a/scripts/guestfs.Makefile b/scripts/guestfs.Makefile index 43bbea4fd..8d4aac3e3 100644 --- a/scripts/guestfs.Makefile +++ b/scripts/guestfs.Makefile @@ -99,4 +99,4 @@ destroy_guestfs: PHONY += destroy_guestfs cleancache: - $(Q)rm -f $(subst ",,$(CONFIG_LIBVIRT_STORAGE_POOL_PATH))/kdevops/guestfs/base_images/* + $(Q)rm -f $(CONFIG_LIBVIRT_STORAGE_POOL_PATH)/$(CONFIG_KDEVOPS_STORAGE_POOL_USER)/guestfs/base_images/* From e600c647bf6efbf2cc89f911f9af1672dd17418f Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Thu, 24 Apr 2025 10:17:25 -0400 Subject: [PATCH 3/3] guestfs: Per-user storage pools I'd like to be able to run more than one instance of kdevops per physical host. Currently the kdevops guestfs set-up steers all storage pool activity into ${STORAGE_POOL}/kdevops/guestfs, which means there's a good chance that two different logged-in users will create virtual machines whose names (and block devices) conflict. So far I haven't been able to get the other storage pool-related settings to add sufficient uniqueness to prevent this conflict. Instead, optionally replace the "kdevops" string in the storage pool path with the name of the user account running kdevops. Default behavior is to continue using "kdevops". Suggested-by: Luis Chamberlain Signed-off-by: Chuck Lever --- kconfigs/Kconfig.libvirt | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/kconfigs/Kconfig.libvirt b/kconfigs/Kconfig.libvirt index 04abadff4..14620c9d2 100644 --- a/kconfigs/Kconfig.libvirt +++ b/kconfigs/Kconfig.libvirt @@ -1099,10 +1099,47 @@ config LIBVIRT_STORAGE_POOL_NAME For instance you may want to use a volume name of "data2" for a path on a partition on /data2/ or something like that. +choice + prompt "Storage pool user name to use" + default KDEVOPS_STORAGE_POOL_USER_DEFAULT + help + The storage pool user is name of the local user ID that has + access to the libvirt storage pool to be used by kdevops. + + When there is only one user running kdevops on a system, + the default setting should work. To enable multiple users + to run kdevops on the same system, select + KDEVOPS_STORAGE_POOL_USER_AUTO. + +config KDEVOPS_STORAGE_POOL_USER_DEFAULT + bool "default" + help + The default storage pool user name is always "kdevops". + +config KDEVOPS_STORAGE_POOL_USER_AUTO + bool "auto" + help + Kdevops selects the storage pool user name. + +config KDEVOPS_STORAGE_POOL_USER_CUSTOM + bool "custom" + help + Set a fixed custom storage pool user name. + +endchoice + +config KDEVOPS_STORAGE_POOL_USER_CUSTOM_NAME + string "Storage pool user name" + depends on KDEVOPS_STORAGE_POOL_USER_CUSTOM + help + Set the name of the storage pool user. + config KDEVOPS_STORAGE_POOL_USER string output yaml - default "kdevops" + default "kdevops" if KDEVOPS_STORAGE_POOL_USER_DEFAULT + default $(shell, echo $USER) if KDEVOPS_STORAGE_POOL_USER_AUTO + default KDEVOPS_STORAGE_POOL_USER_CUSTOM_NAME if KDEVOPS_STORAGE_POOL_USER_CUSTOM config KDEVOPS_STORAGE_POOL_PATH string