From: Radoslaw Smigielski <[email protected]>

The '--format' option of 'domxml-from-native' command specifies the
native guest configuration format to import.

Partially-fixes: https://gitlab.com/libvirt/libvirt/-/work_items/9
Signed-off-by: Radoslaw Smigielski <[email protected]>
---
 tools/virsh-completer-domain.c | 36 ++++++++++++++++++++++++++++++++++
 tools/virsh-completer-domain.h |  5 +++++
 tools/virsh-domain.c           |  1 +
 3 files changed, 42 insertions(+)

diff --git a/tools/virsh-completer-domain.c b/tools/virsh-completer-domain.c
index 4c0ddb01d855..8154ba8d622c 100644
--- a/tools/virsh-completer-domain.c
+++ b/tools/virsh-completer-domain.c
@@ -1145,3 +1145,39 @@ virshDomainDisplayTypeCompleter(vshControl *ctl 
G_GNUC_UNUSED,
 
     return vshCommaStringListComplete(NULL, types);
 }
+
+
+char **
+virshDomainXMLNativeFormatCompleter(vshControl *ctl,
+                                    const vshCmd *cmd G_GNUC_UNUSED,
+                                    unsigned int flags)
+{
+    virshControl *priv = ctl->privData;
+    const char *hvType = NULL;
+    const char **formats = NULL;
+    static const char *xenFormats[] = {"xen-xl", "xen-xm", NULL};
+    static const char *lxcFormats[] = {"lxc-tools", NULL};
+    static const char *vmxFormats[] = {"vmware-vmx", NULL};
+    static const char *bhyveFormats[] = {"bhyve-argv", NULL};
+
+    virCheckFlags(0, NULL);
+
+    if (!priv->conn || virConnectIsAlive(priv->conn) <= 0)
+        return NULL;
+
+    if (!(hvType = virConnectGetType(priv->conn)))
+        return NULL;
+
+    if (STREQ(hvType, "Xen"))
+        formats = xenFormats;
+    else if (STREQ(hvType, "LXC"))
+        formats = lxcFormats;
+    else if (STREQ(hvType, "VMware") || STREQ(hvType, "ESX"))
+        formats = vmxFormats;
+    else if (STREQ(hvType, "BHYVE"))
+        formats = bhyveFormats;
+    else
+        return NULL;
+
+    return vshCommaStringListComplete(NULL, formats);
+}
diff --git a/tools/virsh-completer-domain.h b/tools/virsh-completer-domain.h
index 3aab7bedae20..40de90afb79f 100644
--- a/tools/virsh-completer-domain.h
+++ b/tools/virsh-completer-domain.h
@@ -209,3 +209,8 @@ char **
 virshDomainDisplayTypeCompleter(vshControl *ctl,
                                 const vshCmd *cmd,
                                 unsigned int flags);
+
+char **
+virshDomainXMLNativeFormatCompleter(vshControl *ctl,
+                                    const vshCmd *cmd,
+                                    unsigned int flags);
diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
index a546532b7dd2..abe3d0b3451e 100644
--- a/tools/virsh-domain.c
+++ b/tools/virsh-domain.c
@@ -10916,6 +10916,7 @@ static const vshCmdOptDef opts_domxmlfromnative[] = {
      .type = VSH_OT_STRING,
      .positional = true,
      .required = true,
+     .completer = virshDomainXMLNativeFormatCompleter,
      .help = N_("source config data format")
     },
     {.name = "config",
-- 
2.54.0

Reply via email to