[BUG] virt_query outputter returns traceback
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 15.7k
- Forks
- 5.6k
- Avg merge
- 2d 44m
- Merged PRs (30d)
- 80
Description
Description
root@witch1 ~# salt-run --out=virt_query virt.query host=squanchy.infra.opensuse.org
[ERROR ] Nested output failed:
Traceback (most recent call last):
File "/usr/lib/python3.6/site-packages/salt/output/__init__.py", line 36, in try_printout
printout = get_printout(out, opts)(data, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/loader/lazy.py", line 149, in __call__
return self.loader.run(run_func, *args, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/loader/lazy.py", line 1234, in run
return self._last_context.run(self._run_as, _func_or_method, *args, **kwargs)
File "/usr/lib/python3.6/site-packages/contextvars/__init__.py", line 38, in run
return callable(*args, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/loader/lazy.py", line 1249, in _run_as
return _func_or_method(*args, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/output/virt_query.py", line 15, in output
for id_ in data["data"]:
KeyError: 'data'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.6/site-packages/salt/output/__init__.py", line 42, in try_printout
printout = get_printout("nested", opts)(data, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/loader/lazy.py", line 149, in __call__
return self.loader.run(run_func, *args, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/loader/lazy.py", line 1234, in run
return self._last_context.run(self._run_as, _func_or_method, *args, **kwargs)
File "/usr/lib/python3.6/site-packages/contextvars/__init__.py", line 38, in run
return callable(*args, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/loader/lazy.py", line 1249, in _run_as
return _func_or_method(*args, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/output/virt_query.py", line 15, in output
for id_ in data["data"]:
KeyError: 'data'
[ERROR ] Nested output failed:
Traceback (most recent call last):
File "/usr/lib/python3.6/site-packages/salt/output/__init__.py", line 36, in try_printout
printout = get_printout(out, opts)(data, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/loader/lazy.py", line 149, in __call__
return self.loader.run(run_func, *args, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/loader/lazy.py", line 1234, in run
return self._last_context.run(self._run_as, _func_or_method, *args, **kwargs)
File "/usr/lib/python3.6/site-packages/contextvars/__init__.py", line 38, in run
return callable(*args, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/loader/lazy.py", line 1249, in _run_as
return _func_or_method(*args, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/output/virt_query.py", line 15, in output
for id_ in data["data"]:
TypeError: string indices must be integers
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.6/site-packages/salt/output/__init__.py", line 42, in try_printout
printout = get_printout("nested", opts)(data, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/loader/lazy.py", line 149, in __call__
return self.loader.run(run_func, *args, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/loader/lazy.py", line 1234, in run
return self._last_context.run(self._run_as, _func_or_method, *args, **kwargs)
File "/usr/lib/python3.6/site-packages/contextvars/__init__.py", line 38, in run
return callable(*args, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/loader/lazy.py", line 1249, in _run_as
return _func_or_method(*args, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/output/virt_query.py", line 15, in output
for id_ in data["data"]:
TypeError: string indices must be integers
[ERROR ] An un-handled exception was caught by Salt's global exception handler:
TypeError: string indices must be integers
Traceback (most recent call last):
File "/usr/lib/python3.6/site-packages/salt/output/__init__.py", line 36, in try_printout
printout = get_printout(out, opts)(data, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/loader/lazy.py", line 149, in __call__
return self.loader.run(run_func, *args, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/loader/lazy.py", line 1234, in run
return self._last_context.run(self._run_as, _func_or_method, *args, **kwargs)
File "/usr/lib/python3.6/site-packages/contextvars/__init__.py", line 38, in run
return callable(*args, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/loader/lazy.py", line 1249, in _run_as
return _func_or_method(*args, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/output/virt_query.py", line 15, in output
for id_ in data["data"]:
TypeError: string indices must be integers
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.6/site-packages/salt/output/__init__.py", line 42, in try_printout
printout = get_printout("nested", opts)(data, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/loader/lazy.py", line 149, in __call__
return self.loader.run(run_func, *args, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/loader/lazy.py", line 1234, in run
return self._last_context.run(self._run_as, _func_or_method, *args, **kwargs)
File "/usr/lib/python3.6/site-packages/contextvars/__init__.py", line 38, in run
return callable(*args, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/loader/lazy.py", line 1249, in _run_as
return _func_or_method(*args, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/output/virt_query.py", line 15, in output
for id_ in data["data"]:
TypeError: string indices must be integers
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/bin/salt-run", line 9, in <module>
salt_run()
File "/usr/lib/python3.6/site-packages/salt/scripts.py", line 457, in salt_run
client.run()
File "/usr/lib/python3.6/site-packages/salt/cli/run.py", line 34, in run
ret = runner.run()
File "/usr/lib/python3.6/site-packages/salt/runner.py", line 308, in run
daemonize=False,
File "/usr/lib/python3.6/site-packages/salt/client/mixins.py", line 540, in _proc_function
return instance.low(fun, low)
File "/usr/lib/python3.6/site-packages/salt/client/mixins.py", line 436, in low
namespaced_event.fire_event(data, "ret")
File "/usr/lib/python3.6/site-packages/salt/utils/event.py", line 1033, in fire_event
self.print_func(tag, data)
File "/usr/lib/python3.6/site-packages/salt/client/mixins.py", line 640, in print_async_event
salt.output.display_output(event_data, outputter, self.opts)
File "/usr/lib/python3.6/site-packages/salt/output/__init__.py", line 88, in display_output
display_data = try_printout(data, out, opts, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/output/__init__.py", line 47, in try_printout
printout = get_printout("raw", opts)(data, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/loader/lazy.py", line 149, in __call__
return self.loader.run(run_func, *args, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/loader/lazy.py", line 1234, in run
return self._last_context.run(self._run_as, _func_or_method, *args, **kwargs)
File "/usr/lib/python3.6/site-packages/contextvars/__init__.py", line 38, in run
return callable(*args, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/loader/lazy.py", line 1249, in _run_as
return _func_or_method(*args, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/output/virt_query.py", line 15, in output
for id_ in data["data"]:
TypeError: string indices must be integers
Traceback (most recent call last):
File "/usr/lib/python3.6/site-packages/salt/output/__init__.py", line 36, in try_printout
printout = get_printout(out, opts)(data, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/loader/lazy.py", line 149, in __call__
return self.loader.run(run_func, *args, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/loader/lazy.py", line 1234, in run
return self._last_context.run(self._run_as, _func_or_method, *args, **kwargs)
File "/usr/lib/python3.6/site-packages/contextvars/__init__.py", line 38, in run
return callable(*args, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/loader/lazy.py", line 1249, in _run_as
return _func_or_method(*args, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/output/virt_query.py", line 15, in output
for id_ in data["data"]:
TypeError: string indices must be integers
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.6/site-packages/salt/output/__init__.py", line 42, in try_printout
printout = get_printout("nested", opts)(data, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/loader/lazy.py", line 149, in __call__
return self.loader.run(run_func, *args, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/loader/lazy.py", line 1234, in run
return self._last_context.run(self._run_as, _func_or_method, *args, **kwargs)
File "/usr/lib/python3.6/site-packages/contextvars/__init__.py", line 38, in run
return callable(*args, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/loader/lazy.py", line 1249, in _run_as
return _func_or_method(*args, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/output/virt_query.py", line 15, in output
for id_ in data["data"]:
TypeError: string indices must be integers
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/bin/salt-run", line 9, in <module>
salt_run()
File "/usr/lib/python3.6/site-packages/salt/scripts.py", line 457, in salt_run
client.run()
File "/usr/lib/python3.6/site-packages/salt/cli/run.py", line 34, in run
ret = runner.run()
File "/usr/lib/python3.6/site-packages/salt/runner.py", line 308, in run
daemonize=False,
File "/usr/lib/python3.6/site-packages/salt/client/mixins.py", line 540, in _proc_function
return instance.low(fun, low)
File "/usr/lib/python3.6/site-packages/salt/client/mixins.py", line 436, in low
namespaced_event.fire_event(data, "ret")
File "/usr/lib/python3.6/site-packages/salt/utils/event.py", line 1033, in fire_event
self.print_func(tag, data)
File "/usr/lib/python3.6/site-packages/salt/client/mixins.py", line 640, in print_async_event
salt.output.display_output(event_data, outputter, self.opts)
File "/usr/lib/python3.6/site-packages/salt/output/__init__.py", line 88, in display_output
display_data = try_printout(data, out, opts, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/output/__init__.py", line 47, in try_printout
printout = get_printout("raw", opts)(data, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/loader/lazy.py", line 149, in __call__
return self.loader.run(run_func, *args, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/loader/lazy.py", line 1234, in run
return self._last_context.run(self._run_as, _func_or_method, *args, **kwargs)
File "/usr/lib/python3.6/site-packages/contextvars/__init__.py", line 38, in run
return callable(*args, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/loader/lazy.py", line 1249, in _run_as
return _func_or_method(*args, **kwargs)
File "/usr/lib/python3.6/site-packages/salt/output/virt_query.py", line 15, in output
for id_ in data["data"]:
TypeError: string indices must be integers
Setup
Not applicable / nothing was configured in Salt for this.
Please be as specific as possible and give set-up details.
- on-prem machine
- VM (Virtualbox, KVM, etc. please specify)
- VM running on a cloud service, please be explicit and add details
- container (Kubernetes, Docker, containerd, etc. please specify)
- or a combination, please be explicit
- jails if it is FreeBSD
- classic packaging
- onedir packaging
- used bootstrap to install
Steps to Reproduce the behavior
- Connect a minion
- Run some VMs with Libvirt on the minion
- Try
virt.queryusing--out=virt_queryfrom the master
Expected behavior
No errors. :(
Screenshots
Text output above should suffice.
Versions Report
salt --versions-report
(Provided by running salt --versions-report. Please also mention any differences in master/minion versions.)# salt --versions-report
Salt Version:
Salt: 3006.0
Python Version:
Python: 3.6.15 (default, Sep 23 2021, 15:41:43) [GCC]
Dependency Versions:
cffi: 1.13.2
cherrypy: unknown
dateutil: 2.8.1
docker-py: Not Installed
gitdb: Not Installed
gitpython: Not Installed
Jinja2: 2.10.1
libgit2: 1.3.0
looseversion: 1.0.2
M2Crypto: 0.38.0
Mako: Not Installed
msgpack: 0.5.6
msgpack-pure: Not Installed
mysql-python: Not Installed
packaging: 21.3
pycparser: 2.17
pycrypto: Not Installed
pycryptodome: Not Installed
pygit2: 1.7.0
python-gnupg: Not Installed
PyYAML: 5.4.1
PyZMQ: 17.1.2
relenv: Not Installed
smmap: Not Installed
timelib: Not Installed
Tornado: 4.5.3
ZMQ: 4.2.3
System Versions:
dist: opensuse-leap 15.5
locale: UTF-8
machine: x86_64
release: 5.14.21-150500.55.39-default
system: Linux
version: openSUSE Leap 15.5
Note I also tried the virt_query.py from the master branch as of commit d9b50659b2be467f31d59245e70202fbabc83092.
Additional context
I will propose a patch for this.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reproducing the reported command, salt-run --out=virt_query virt.query host=squanchy.infra.opensuse.org, and read salt/output/virt_query.py, especially its handling of data. Determine the expected behavior for the response shapes shown by the traceback, then verify the command no longer emits an outputter traceback.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- cli
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100