saltstack / saltstack/salt

[BUG] virt_query outputter returns traceback

Open
#65,841 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug needs-triage
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

  1. Connect a minion
  2. Run some VMs with Libvirt on the minion
  3. Try virt.query using --out=virt_query from 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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.