qvm-ls: add filtering by tags

This commit is contained in:
Patrik Hagara 2018-08-23 22:42:22 +02:00
szülő 584bd052ed
commit cd4424235b
Nem található kulcs ehhez az aláíráshoz az adatbázisban
GPG kulcs azonosító: 5C1E71DF031F9AE5
3 fájl változott, egészen pontosan 68 új sor hozzáadva és 1 régi sor törölve

Fájl megtekintése

@ -6,7 +6,7 @@
Synopsis Synopsis
-------- --------
:command:`qvm-ls` [-h] [--verbose] [--quiet] [--help-columns] [--help-formats] [--format *FORMAT* | --fields *FIELD*,...] :command:`qvm-ls` [-h] [--verbose] [--quiet] [--help-columns] [--help-formats] [--format *FORMAT* | --fields *FIELD*,...] [--tags *TAG* [*TAG* ...]]
Options Options
------- -------
@ -43,6 +43,10 @@ Options
:option:`--format`. All columns along with short descriptions can be listed :option:`--format`. All columns along with short descriptions can be listed
with :option:`--help-columns`. with :option:`--help-columns`.
.. option:: --tags TAG ...
Shows only VMs having specific tag(s).
.. option:: --raw-data .. option:: --raw-data
Output data in easy to parse format. Table header is skipped and columns are Output data in easy to parse format. Table header is skipped and columns are

Fájl megtekintése

@ -121,6 +121,60 @@ class TC_50_List(qubesadmin.tests.QubesTestCase):
'test-vm\n') 'test-vm\n')
class TC_70_Tags(qubesadmin.tests.QubesTestCase):
def setUp(self):
self.app = TestApp()
self.app.domains = TestVMCollection(
[
(
'dom0',
TestVM(
'dom0',
tags=['my'],
label='black'
)
),
(
'test-vm',
TestVM(
'test-vm',
tags=['not-my', 'other'],
label='red',
netvm=TestVM('sys-firewall'),
template=TestVM('template')
)
),
]
)
def test_100_tag(self):
with qubesadmin.tests.tools.StdoutBuffer() as stdout:
qubesadmin.tools.qvm_ls.main(['--tags', 'my'], app=self.app)
self.assertEqual(stdout.getvalue(),
'NAME STATE CLASS LABEL TEMPLATE NETVM\n'
'dom0 Running TestVM black - -\n')
def test_100_tag_nomatch(self):
with qubesadmin.tests.tools.StdoutBuffer() as stdout:
qubesadmin.tools.qvm_ls.main(['--tags', 'nx'], app=self.app)
self.assertEqual(stdout.getvalue(),
'NAME STATE CLASS LABEL TEMPLATE NETVM\n')
def test_100_tags(self):
with qubesadmin.tests.tools.StdoutBuffer() as stdout:
qubesadmin.tools.qvm_ls.main(['--tags', 'my', 'other'], app=self.app)
self.assertEqual(stdout.getvalue(),
'NAME STATE CLASS LABEL TEMPLATE NETVM\n'
'dom0 Running TestVM black - -\n'
'test-vm Running TestVM red template sys-firewall\n')
def test_100_tags_nomatch(self):
with qubesadmin.tests.tools.StdoutBuffer() as stdout:
qubesadmin.tools.qvm_ls.main(['--tags', 'nx1', 'nx2'], app=self.app)
self.assertEqual(stdout.getvalue(),
'NAME STATE CLASS LABEL TEMPLATE NETVM\n')
class TC_90_List_with_qubesd_calls(qubesadmin.tests.QubesTestCase): class TC_90_List_with_qubesd_calls(qubesadmin.tests.QubesTestCase):
def test_100_list_with_status(self): def test_100_list_with_status(self):
self.app.expected_calls[ self.app.expected_calls[

Fájl megtekintése

@ -528,6 +528,9 @@ def get_parser():
help='user specified format (see available columns below)') help='user specified format (see available columns below)')
parser.add_argument('--tags', nargs='+', metavar='TAG',
help='show only VMs having specific tag(s)')
parser.add_argument('--raw-data', action='store_true', parser.add_argument('--raw-data', action='store_true',
help='Display specify data of specified VMs. Intended for ' help='Display specify data of specified VMs. Intended for '
'bash-parsing.') 'bash-parsing.')
@ -605,6 +608,12 @@ def main(args=None, app=None):
domains = args.domains domains = args.domains
else: else:
domains = args.app.domains domains = args.app.domains
if args.tags:
# filter only VMs having at least one of the specified tags
domains = [dom for dom in domains
if set(dom.tags).intersection(set(args.tags))]
table = Table(domains, columns, spinner, args.raw_data) table = Table(domains, columns, spinner, args.raw_data)
table.write_table(sys.stdout) table.write_table(sys.stdout)