From nobody Mon Sep 16 19:24:18 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 17169799093352.639505698732478; Wed, 29 May 2024 03:51:49 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 09C071A23; Wed, 29 May 2024 06:51:48 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id A912C1A14; Wed, 29 May 2024 06:50:41 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 47C691A03; Wed, 29 May 2024 06:50:39 -0400 (EDT) Received: from mail-oa1-f42.google.com (mail-oa1-f42.google.com [209.85.160.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 811EB1A11 for ; Wed, 29 May 2024 06:50:37 -0400 (EDT) Received: by mail-oa1-f42.google.com with SMTP id 586e51a60fabf-24caa67cc01so790953fac.2 for ; Wed, 29 May 2024 03:50:37 -0700 (PDT) Received: from level1.debian ([14.139.82.6]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-6f8fcbeea11sm7981284b3a.98.2024.05.29.03.50.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 May 2024 03:50:35 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1716979836; x=1717584636; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=OqvbqSEFf6V2KHp0hIHqFt28nHQ+SH11YPVjBBxF6UE=; b=SB4bU4IixtQyrZoCLp+I+2K2k24dNj9I/w6tLZbCimW0VVRQORLDJYy+zywqHVtbWJ 5Pkl956EZP/uhjgzL9Qze5t/KPrIKRdG5CG3eI4gVC4VMFAS18m8VvbRUQgUnM2E1GUZ QY4gKKZXmMKN0pS623eFqIyZEzdA1dB3ytu6Gd6q4qOCyxxJCZi/txfsgmeuod4kb4Ru bSQcZJBDWjwVwZPgpphmdBUiARspFSVPFn+AoueTLVlg38H7oq4kYKJj3tVMCU60XJ0i m94vj5TFEBu80rK4eI4+dvm6rzDqgCL02YrxVdeXQe1dU1KX4XL0TfK6XQ9UuK4mzB7c IajQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1716979836; x=1717584636; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=OqvbqSEFf6V2KHp0hIHqFt28nHQ+SH11YPVjBBxF6UE=; b=vL6Nxn35r6BMs5BlsQL83dQPmG01WcESD+eJg46uzyZH0gQBkAZsycpkPSJUFgsLG3 A3c/erCVPicPqWQvmZbw73m2mzlTxBw3D+te7rNtObAYzyJPTHittvwcqYJ2Df26pWJn 2VXaMe3o9SqtTz1ImOjvjKHLwc69i4QM1yi/fww0ath6b9D24dZzxhEUPkmVohKw9YXs 2FO7Oc+HtGTemCY8xohpBInZ1DaG6vJ2O3HutgKnQ1V21EPtY002UnTa8XZpOHhRBQGH Gph+zGTnagXe5KiDR5iRWddtTi7XUjjlttVTf3wAAWfbh8IDLEi5ewiiKcIswH6ZWppC fqbQ== X-Gm-Message-State: AOJu0YxOuTYG7ZGNI9x0tm6NEza8gkzkUZSbe4leEv1KoudpF1pZ15w0 u7aMIYOuKcYp3umAxr11+QDoXqa7Vq39rmaOjXI/rLthhqblxLC2h6c6sw/k X-Google-Smtp-Source: AGHT+IGzI37AB4YF/Rx8czLEN5Q6DyUg28fgIOzmRlvzdPNm8R20WMPnmmpN5UwdvODTDRHNMyj+bg== X-Received: by 2002:a05:6871:613:b0:24f:d73d:c21c with SMTP id 586e51a60fabf-24fd73dc290mr11042663fac.15.1716979836086; Wed, 29 May 2024 03:50:36 -0700 (PDT) From: Abhiram Tilak To: devel@lists.libvirt.org Subject: [PATCH v2] virsh: Provide completer for some pool-X-as commands Date: Wed, 29 May 2024 06:49:06 -0400 Message-Id: <20240529104903.196494-1-atp.exp@gmail.com> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: JNT5WVMZE242RHFLSFM4VJGDPXW6BZLB X-Message-ID-Hash: JNT5WVMZE242RHFLSFM4VJGDPXW6BZLB X-MailFrom: atp.exp@gmail.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: Abhiram Tilak X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1716979910826100001 Content-Type: text/plain; charset="utf-8" Provides completers for auth-type and source-format commands for virsh pool-create-as and pool-define-as commands. Use Empty completers for options where completions are not required. Related Issue: https://gitlab.com/libvirt/libvirt/-/issues/9 Signed-off-by: Abhiram Tilak --- Changes in v2: - Fix all formatting errors - Change some options using Empty completers, to use LocalPath completers. - Add completers for AdapterName and AdapterParent using information from node devices. src/libvirt_private.syms | 2 + tools/virsh-completer-pool.c | 128 +++++++++++++++++++++++++++++++++++ tools/virsh-completer-pool.h | 20 ++++++ tools/virsh-pool.c | 9 +++ 4 files changed, 159 insertions(+) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index f0f7aa8654..fcb0ef7afe 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1117,6 +1117,8 @@ virStorageAuthDefCopy; virStorageAuthDefFormat; virStorageAuthDefFree; virStorageAuthDefParse; +virStorageAuthTypeFromString; +virStorageAuthTypeToString; virStorageFileFeatureTypeFromString; virStorageFileFeatureTypeToString; virStorageFileFormatTypeFromString; diff --git a/tools/virsh-completer-pool.c b/tools/virsh-completer-pool.c index 3568bb985b..7db2a20347 100644 --- a/tools/virsh-completer-pool.c +++ b/tools/virsh-completer-pool.c @@ -23,6 +23,7 @@ #include "virsh-completer-pool.h" #include "virsh-util.h" #include "conf/storage_conf.h" +#include "conf/node_device_conf.h" #include "virsh-pool.h" #include "virsh.h" =20 @@ -106,3 +107,130 @@ virshPoolTypeCompleter(vshControl *ctl, =20 return virshCommaStringListComplete(type_str, (const char **)tmp); } + + +char ** +virshPoolFormatCompleter(vshControl *ctl G_GNUC_UNUSED, + const vshCmd *cmd G_GNUC_UNUSED, + unsigned int flags) +{ + size_t i =3D 0; + size_t j =3D 0; + g_auto(GStrv) tmp =3D NULL; + size_t nformats =3D VIR_STORAGE_POOL_FS_LAST + VIR_STORAGE_POOL_NETFS_= LAST + + VIR_STORAGE_POOL_DISK_LAST + VIR_STORAGE_POOL_LOGICAL_LAST; + + virCheckFlags(0, NULL); + + tmp =3D g_new0(char *, nformats + 1); + + /* Club all PoolFormats for completion */ + for (i =3D 0; i < VIR_STORAGE_POOL_FS_LAST; i++) + tmp[j++] =3D g_strdup(virStoragePoolFormatFileSystemTypeToString(i= )); + + for (i =3D 0; i < VIR_STORAGE_POOL_NETFS_LAST; i++) + tmp[j++] =3D g_strdup(virStoragePoolFormatFileSystemNetTypeToStrin= g(i)); + + for (i =3D 1; i < VIR_STORAGE_POOL_DISK_LAST; i++) + tmp[j++] =3D g_strdup(virStoragePoolFormatDiskTypeToString(i)); + + for (i =3D 1; i < VIR_STORAGE_POOL_LOGICAL_LAST; i++) + tmp[j++] =3D g_strdup(virStoragePoolFormatLogicalTypeToString(i)); + + return g_steal_pointer(&tmp); +} + + +char ** +virshPoolAuthTypeCompleter(vshControl *ctl G_GNUC_UNUSED, + const vshCmd *cmd G_GNUC_UNUSED, + unsigned int flags) +{ + size_t i =3D 0; + g_auto(GStrv) tmp =3D NULL; + + virCheckFlags(0, NULL); + + tmp =3D g_new0(char *, VIR_STORAGE_AUTH_TYPE_LAST + 1); + + for (i =3D 0; i < VIR_STORAGE_AUTH_TYPE_LAST; i++) + tmp[i] =3D g_strdup(virStorageAuthTypeToString(i)); + + return g_steal_pointer(&tmp); +} + + +char ** +virshAdapterNameCompleter(vshControl *ctl, + const vshCmd *cmd G_GNUC_UNUSED, + unsigned int flags) +{ + virshControl *priv =3D ctl->privData; + virNodeDevicePtr *devs =3D NULL; + int ndevs =3D 0; + size_t i =3D 0; + char **ret =3D NULL; + g_auto(GStrv) tmp =3D NULL; + + virCheckFlags(0, NULL); + + if (!priv->conn || virConnectIsAlive(priv->conn) <=3D 0) + return NULL; + + flags |=3D VIR_CONNECT_LIST_NODE_DEVICES_CAP_SCSI_HOST; + if ((ndevs =3D virConnectListAllNodeDevices(priv->conn, &devs, flags))= < 0) + return NULL; + + tmp =3D g_new0(char *, ndevs + 1); + + for (i =3D 0; i < ndevs; i++) { + const char *name =3D virNodeDeviceGetName(devs[i]); + + tmp[i] =3D g_strdup(name); + } + + ret =3D g_steal_pointer(&tmp); + + for (i =3D 0; i < ndevs; i++) + virshNodeDeviceFree(devs[i]); + g_free(devs); + return ret; +} + + +char ** +virshAdapterParentCompleter(vshControl *ctl, + const vshCmd *cmd G_GNUC_UNUSED, + unsigned int flags) +{ + virshControl *priv =3D ctl->privData; + virNodeDevicePtr *devs =3D NULL; + int ndevs =3D 0; + size_t i =3D 0; + char **ret =3D NULL; + g_auto(GStrv) tmp =3D NULL; + + virCheckFlags(0, NULL); + + if (!priv->conn || virConnectIsAlive(priv->conn) <=3D 0) + return NULL; + + flags |=3D VIR_CONNECT_LIST_NODE_DEVICES_CAP_VPORTS; + if ((ndevs =3D virConnectListAllNodeDevices(priv->conn, &devs, flags))= < 0) + return NULL; + + tmp =3D g_new0(char *, ndevs + 1); + + for (i =3D 0; i < ndevs; i++) { + const char *name =3D virNodeDeviceGetName(devs[i]); + + tmp[i] =3D g_strdup(name); + } + + ret =3D g_steal_pointer(&tmp); + + for (i =3D 0; i < ndevs; i++) + virshNodeDeviceFree(devs[i]); + g_free(devs); + return ret; +} diff --git a/tools/virsh-completer-pool.h b/tools/virsh-completer-pool.h index bff3e5742b..eccc08a73f 100644 --- a/tools/virsh-completer-pool.h +++ b/tools/virsh-completer-pool.h @@ -40,3 +40,23 @@ char ** virshPoolTypeCompleter(vshControl *ctl, const vshCmd *cmd, unsigned int flags); + +char ** +virshPoolFormatCompleter(vshControl *ctl, + const vshCmd *cmd, + unsigned int flags); + +char ** +virshPoolAuthTypeCompleter(vshControl *ctl, + const vshCmd *cmd, + unsigned int flags); + +char ** +virshAdapterNameCompleter(vshControl *ctl, + const vshCmd *cmd, + unsigned int flags); + +char ** +virshAdapterParentCompleter(vshControl *ctl, + const vshCmd *cmd, + unsigned int flags); diff --git a/tools/virsh-pool.c b/tools/virsh-pool.c index f9aad8ded0..0cbd1417e6 100644 --- a/tools/virsh-pool.c +++ b/tools/virsh-pool.c @@ -80,31 +80,37 @@ {.name =3D "source-path", \ .type =3D VSH_OT_STRING, \ .unwanted_positional =3D true, \ + .completer =3D virshCompletePathLocalExisting, \ .help =3D N_("source path for underlying storage") \ }, \ {.name =3D "source-dev", \ .type =3D VSH_OT_STRING, \ .unwanted_positional =3D true, \ + .completer =3D virshCompletePathLocalExisting, \ .help =3D N_("source device for underlying storage") \ }, \ {.name =3D "source-name", \ .type =3D VSH_OT_STRING, \ .unwanted_positional =3D true, \ + .completer =3D virshCompleteEmpty, \ .help =3D N_("source name for underlying storage") \ }, \ {.name =3D "target", \ .type =3D VSH_OT_STRING, \ .unwanted_positional =3D true, \ + .completer =3D virshCompletePathLocalExisting, \ .help =3D N_("target for underlying storage") \ }, \ {.name =3D "source-format", \ .type =3D VSH_OT_STRING, \ .unwanted_positional =3D true, \ + .completer =3D virshPoolFormatCompleter, \ .help =3D N_("format for underlying storage") \ }, \ {.name =3D "auth-type", \ .type =3D VSH_OT_STRING, \ .unwanted_positional =3D true, \ + .completer =3D virshPoolAuthTypeCompleter, \ .help =3D N_("auth type to be used for underlying storage") \ }, \ {.name =3D "auth-username", \ @@ -126,6 +132,7 @@ {.name =3D "adapter-name", \ .type =3D VSH_OT_STRING, \ .unwanted_positional =3D true, \ + .completer =3D virshAdapterNameCompleter, \ .help =3D N_("adapter name to be used for underlying storage") \ }, \ {.name =3D "adapter-wwnn", \ @@ -141,6 +148,7 @@ {.name =3D "adapter-parent", \ .type =3D VSH_OT_STRING, \ .unwanted_positional =3D true, \ + .completer =3D virshAdapterParentCompleter, \ .help =3D N_("adapter parent scsi_hostN to be used for underlying vHB= A storage") \ }, \ {.name =3D "adapter-parent-wwnn", \ @@ -161,6 +169,7 @@ {.name =3D "source-protocol-ver", \ .type =3D VSH_OT_STRING, \ .unwanted_positional =3D true, \ + .completer =3D virshCompleteEmpty, \ .help =3D N_("nfsvers value for NFS pool mount option") \ }, \ {.name =3D "source-initiator", \ --=20 2.39.2