Browse Source

qvm-device: handle 'list-device-classes' and 'list-classes'

QubesOS/qubes-issues#5213
Frédéric Pierret (fepitre) 4 years ago
parent
commit
41c6fbed72
2 changed files with 16 additions and 0 deletions
  1. 1 0
      qubesadmin/qubesadmin
  2. 15 0
      qubesadmin/tools/qvm_device.py

+ 1 - 0
qubesadmin/qubesadmin

@@ -0,0 +1 @@
+/home/user/qubes-builder/qubes-src/core-admin-client/qubesadmin

+ 15 - 0
qubesadmin/tools/qvm_device.py

@@ -263,6 +263,9 @@ def get_parser(device_class=None):
     attach_parser.set_defaults(func=attach_device)
     detach_parser.set_defaults(func=detach_device)
 
+    parser.add_argument('--list-device-classes', action='store_true',
+                        default=False)
+
     return parser
 
 
@@ -272,7 +275,13 @@ def main(args=None, app=None):
     devclass = None
     if basename.startswith('qvm-') and basename != 'qvm-device':
         devclass = basename[4:]
+
     args = get_parser(devclass).parse_args(args, app=app)
+
+    if args.list_device_classes:
+        print('\n'.join(qubesadmin.Qubes().list_deviceclass()))
+        return 0
+
     try:
         args.func(args)
     except qubesadmin.exc.QubesException as e:
@@ -282,4 +291,10 @@ def main(args=None, app=None):
 
 
 if __name__ == '__main__':
+    # Special treatment for '--list-device-classes' (alias --list-classes)
+    curr_action = sys.argv[1:]
+    if set(curr_action).intersection(
+            {'--list-device-classes', '--list-classes'}):
+        sys.exit(main(args=['', '--list-device-classes']))
+
     sys.exit(main())