* [PATCH nvmetcli 1/2] nvmetcli: Expose ls to dump UI configuration
@ 2017-10-17 10:34 Sagi Grimberg
2017-10-17 10:34 ` [PATCH nvmetcli 2/2] nvmetcli: decorate namespace, subsystem and port UI Sagi Grimberg
0 siblings, 1 reply; 2+ messages in thread
From: Sagi Grimberg @ 2017-10-17 10:34 UTC (permalink / raw)
for running: nvmetcli ls
Signed-off-by: Sagi Grimberg <sagi at grimberg.me>
---
nvmetcli | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/nvmetcli b/nvmetcli
index 5378365eb91f..951b6431e6f0 100755
--- a/nvmetcli
+++ b/nvmetcli
@@ -554,6 +554,7 @@ def usage():
print("syntax: %s save [file_to_save_to]" % sys.argv[0])
print(" %s restore [file_to_restore_from]" % sys.argv[0])
print(" %s clear" % sys.argv[0])
+ print(" %s ls" % sys.argv[0])
sys.exit(-1)
@@ -577,7 +578,14 @@ def clear(unused):
nvme.Root().clear_existing()
-funcs = dict(save=save, restore=restore, clear=clear)
+def ls(unused):
+ shell = configshell.shell.ConfigShell('~/.nvmetcli')
+ UIRootNode(shell)
+ shell.run_cmdline("ls")
+ sys.exit(0)
+
+
+funcs = dict(save=save, restore=restore, clear=clear, ls=ls)
def main():
--
2.7.4
^ permalink raw reply related [flat|nested] 2+ messages in thread
* [PATCH nvmetcli 2/2] nvmetcli: decorate namespace, subsystem and port UI
2017-10-17 10:34 [PATCH nvmetcli 1/2] nvmetcli: Expose ls to dump UI configuration Sagi Grimberg
@ 2017-10-17 10:34 ` Sagi Grimberg
0 siblings, 0 replies; 2+ messages in thread
From: Sagi Grimberg @ 2017-10-17 10:34 UTC (permalink / raw)
Display some info on the on the UI node.
Signed-off-by: Sagi Grimberg <sagi at grimberg.me>
---
nvmetcli | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/nvmetcli b/nvmetcli
index 951b6431e6f0..ae86e89b61aa 100755
--- a/nvmetcli
+++ b/nvmetcli
@@ -24,7 +24,10 @@ import os
import sys
import configshell_fb as configshell
import nvmet as nvme
+import uuid
+def ngiud_set(nguid):
+ return any(c.isdigit() and c != '0' for c in nguid)
class UINode(configshell.node.ConfigNode):
def __init__(self, name, parent=None, cfnode=None, shell=None):
@@ -160,6 +163,13 @@ class UISubsystemNode(UINode):
UINamespacesNode(self)
UIAllowedHostsNode(self)
+ def summary(self):
+ info = []
+ info.append("version=" + self.cfnode.get_attr("attr","version"))
+ info.append("allow_any=" + self.cfnode.get_attr("attr","allow_any_host"))
+ info.append("serial=" + self.cfnode.get_attr("attr","serial"))
+ return (", ".join(info), True)
+
class UINamespacesNode(UINode):
def __init__(self, parent):
@@ -247,6 +257,19 @@ class UINamespaceNode(UINode):
raise configshell.ExecutionError(
"The Namespace could not be disabled.")
+ def summary(self):
+ info = []
+ info.append("path=" + self.cfnode.get_attr("device", "path"))
+ ns_uuid = self.cfnode.get_attr("device", "uuid")
+ if uuid.UUID(ns_uuid).int != 0:
+ info.append("uuid=" + str(ns_uuid))
+ ns_nguid = self.cfnode.get_attr("device", "nguid")
+ if ngiud_set(ns_nguid):
+ info.append("nguid=" + ns_nguid)
+ info.append("enabled" if self.cfnode.get_enable() else "disabled")
+ ns_enabled = self.cfnode.get_enable()
+ return (", ".join(info), True if ns_enabled == 1 else ns_enabled)
+
class UIAllowedHostsNode(UINode):
def __init__(self, parent):
@@ -361,6 +384,13 @@ class UIPortNode(UINode):
return "enabled"
return "disabled"
+ def summary(self):
+ info = []
+ info.append("traddr=" + self.cfnode.get_attr("addr", "traddr"))
+ info.append("trsvcid=" + self.cfnode.get_attr("addr", "trsvcid"))
+ info.append("trtype=" + self.cfnode.get_attr("addr", "trtype"))
+ return (", ".join(info), True)
+
class UIPortSubsystemsNode(UINode):
def __init__(self, parent):
--
2.7.4
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-10-17 10:34 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-10-17 10:34 [PATCH nvmetcli 1/2] nvmetcli: Expose ls to dump UI configuration Sagi Grimberg
2017-10-17 10:34 ` [PATCH nvmetcli 2/2] nvmetcli: decorate namespace, subsystem and port UI Sagi Grimberg
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).