salt icon indicating copy to clipboard operation
salt copied to clipboard

[BUG] win_wua.available exception when no patches are available

Open brettgilmer opened this issue 1 year ago • 1 comments

Description

Setup WIndows 11 23h2 update, no available patches according to Windows UI salt-call win_wua.available seen in salt 3004.2 and 3006.5 this seems new.....

(Please provide relevant configs and/or SLS files (be sure to remove sensitive info. There is no general set-up of Salt.)

Please be as specific as possible and give set-up details.

  • [X ] 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 WIndows 11 23h2 update, no available patches according to Windows UI salt-call win_wua.available

Expected behavior No exception, an empty-list of available patches

Screenshots

C:\>salt-call win_wua.available 09:33:08 - ERROR - salt._logging.impl - An un-handled exception was caught by Salt's global exception handler: AttributeError: <unknown>.IsHidden Traceback (most recent call last): File "C:\Salt\lib\runpy.py", line 196, in _run_module_as_main return _run_code(code, main_globals, None, File "C:\Salt\lib\runpy.py", line 86, in _run_code exec(code, run_globals) File "C:\Salt\salt-call.exe\__main__.py", line 7, in <module> sys.exit(salt_call()) File "C:\Salt\lib\site-packages\salt\scripts.py", line 443, in salt_call client.run() File "C:\Salt\lib\site-packages\salt\cli\call.py", line 50, in run caller.run() File "C:\Salt\lib\site-packages\salt\cli\caller.py", line 95, in run ret = self.call() File "C:\Salt\lib\site-packages\salt\cli\caller.py", line 202, in call ret["return"] = self.minion.executors[fname]( File "C:\Salt\lib\site-packages\salt\loader\lazy.py", line 159, in __call__ ret = self.loader.run(run_func, *args, **kwargs) File "C:\Salt\lib\site-packages\salt\loader\lazy.py", line 1245, in run return self._last_context.run(self._run_as, _func_or_method, *args, **kwargs) File "C:\Salt\lib\site-packages\salt\loader\lazy.py", line 1260, in _run_as return _func_or_method(*args, **kwargs) File "C:\Salt\Lib\site-packages\salt\executors\direct_call.py", line 10, in execute return func(*args, **kwargs) File "C:\Salt\lib\site-packages\salt\loader\lazy.py", line 159, in __call__ ret = self.loader.run(run_func, *args, **kwargs) File "C:\Salt\lib\site-packages\salt\loader\lazy.py", line 1245, in run return self._last_context.run(self._run_as, _func_or_method, *args, **kwargs) File "C:\Salt\lib\site-packages\salt\loader\lazy.py", line 1260, in _run_as return _func_or_method(*args, **kwargs) File "C:\Salt\Lib\site-packages\salt\modules\win_wua.py", line 269, in available updates = wua.available( File "C:\Salt\lib\site-packages\salt\utils\win_update.py", line 531, in available if salt.utils.data.is_true(update.IsHidden) and skip_hidden: File "C:\Salt\lib\site-packages\win32com\client\dynamic.py", line 639, in __getattr__ raise AttributeError("%s.%s" % (self._username_, attr)) AttributeError: <unknown>.IsHidden (impl.py->__global_logging_exception_handler:1069) Traceback (most recent call last): File "C:\Salt\lib\runpy.py", line 196, in _run_module_as_main return _run_code(code, main_globals, None, File "C:\Salt\lib\runpy.py", line 86, in _run_code exec(code, run_globals) File "C:\Salt\salt-call.exe\__main__.py", line 7, in <module> File "C:\Salt\lib\site-packages\salt\scripts.py", line 443, in salt_call client.run() File "C:\Salt\lib\site-packages\salt\cli\call.py", line 50, in run caller.run() File "C:\Salt\lib\site-packages\salt\cli\caller.py", line 95, in run ret = self.call() File "C:\Salt\lib\site-packages\salt\cli\caller.py", line 202, in call ret["return"] = self.minion.executors[fname]( File "C:\Salt\lib\site-packages\salt\loader\lazy.py", line 159, in __call__ ret = self.loader.run(run_func, *args, **kwargs) File "C:\Salt\lib\site-packages\salt\loader\lazy.py", line 1245, in run return self._last_context.run(self._run_as, _func_or_method, *args, **kwargs) File "C:\Salt\lib\site-packages\salt\loader\lazy.py", line 1260, in _run_as return _func_or_method(*args, **kwargs) File "C:\Salt\Lib\site-packages\salt\executors\direct_call.py", line 10, in execute return func(*args, **kwargs) File "C:\Salt\lib\site-packages\salt\loader\lazy.py", line 159, in __call__ ret = self.loader.run(run_func, *args, **kwargs) File "C:\Salt\lib\site-packages\salt\loader\lazy.py", line 1245, in run return self._last_context.run(self._run_as, _func_or_method, *args, **kwargs) File "C:\Salt\lib\site-packages\salt\loader\lazy.py", line 1260, in _run_as return _func_or_method(*args, **kwargs) File "C:\Salt\Lib\site-packages\salt\modules\win_wua.py", line 269, in available updates = wua.available( File "C:\Salt\lib\site-packages\salt\utils\win_update.py", line 531, in available if salt.utils.data.is_true(update.IsHidden) and skip_hidden: File "C:\Salt\lib\site-packages\win32com\client\dynamic.py", line 639, in __getattr__ raise AttributeError("%s.%s" % (self._username_, attr)) AttributeError: <unknown>.IsHidden

Versions Report

C:>salt-call --versions-report Salt Version: Salt: 3006.5

Python Version: Python: 3.10.13 (heads/main:5600dd9, Nov 15 2023, 04:42:06) [MSC v.1937 64 bit (AMD64)]

Dependency Versions: cffi: 1.14.6 cherrypy: 18.6.1 dateutil: 2.8.1 docker-py: Not Installed gitdb: 4.0.7 gitpython: Not Installed Jinja2: 3.1.2 libgit2: Not Installed looseversion: 1.0.2 M2Crypto: Not Installed Mako: Not Installed msgpack: 1.0.2 msgpack-pure: Not Installed mysql-python: Not Installed packaging: 22.0 pycparser: 2.21 pycrypto: Not Installed pycryptodome: 3.10.1 pygit2: Not Installed python-gnupg: 0.4.8 PyYAML: 6.0.1 PyZMQ: 25.0.2 relenv: 0.14.2 smmap: 4.0.0 timelib: 0.2.4 Tornado: 4.5.3 ZMQ: 4.3.4

System Versions: dist: locale: cp1252 machine: AMD64 release: 10 system: Windows version: 10 10.0.22621 SP0 Multiprocessor Free

PASTE HERE

Additional context I wrote my own script based on what salt is doing, and I see that my "updates" array below contains a list of CDispatch objects, but they seem to be corrupted... I can not access any fields within them without throwing an exception.

` def dbg(): import pywintypes import salt.utils.winapi import salt.utils.win_update as win_update import salt.utils.data import win32com.client

with salt.utils.winapi.Com():
    # Create a session with the Windows Update Agent
    session = win32com.client.Dispatch("Microsoft.Update.Session")

    # Create Collection for Updates
    updates = win32com.client.Dispatch("Microsoft.Update.UpdateColl")


search_string = "Type='Software' or Type='Driver'"

# Create searcher object
searcher = session.CreateUpdateSearcher()
searcher.Online = True
session.ClientApplicationID = "Salt: Load Updates"

# Load all updates into the updates collection
try:
    results = searcher.Search(search_string)
    if results.Updates.Count == 0:
        log.debug("No Updates found for:\n\t\t%s", search_string)
        return f"No Updates found: {search_string}"
except pywintypes.com_error as error:
    log.error("Search Failed:")
    return "forked it"

updates = results.Updates

for update in updates:
    log.error(f"class= {update.__class__.__name__}")


return None

`

brettgilmer avatar Jul 16 '24 16:07 brettgilmer

Same error on 3007.1

  • VM (KVM, libvirtd (libvirt) 10.6.0)
C:\Windows\System32>salt-call --versions-report
Salt Version:
          Salt: 3007.1

Python Version:
        Python: 3.10.14 (heads/main:c1ec015, Apr  3 2024, 21:36:37) [MSC v.1938 64 bit (AMD64)]

Dependency Versions:
          cffi: 1.16.0
      cherrypy: 18.8.0
      dateutil: 2.8.2
     docker-py: Not Installed
         gitdb: 4.0.10
     gitpython: Not Installed
        Jinja2: 3.1.4
       libgit2: Not Installed
  looseversion: 1.3.0
      M2Crypto: Not Installed
          Mako: Not Installed
       msgpack: 1.0.7
  msgpack-pure: Not Installed
  mysql-python: Not Installed
     packaging: 23.1
     pycparser: 2.21
      pycrypto: Not Installed
  pycryptodome: 3.19.1
        pygit2: Not Installed
  python-gnupg: 0.5.2
        PyYAML: 6.0.1
         PyZMQ: 25.1.2
        relenv: 0.16.0
         smmap: 5.0.1
       timelib: 0.3.0
       Tornado: 6.3.3
           ZMQ: 4.3.4

Salt Package Information:
  Package Type: onedir

System Versions:
          dist:
        locale: utf-8
       machine: AMD64
       release: 10
        system: Windows
       version: 10 10.0.22631 SP0 Multiprocessor Free`

ERROR

C:\Windows\System32>salt-call win_wua.available
[ERROR   ] An un-handled exception was caught by Salt's global exception handler:
AttributeError: <unknown>.IsHidden
Traceback (most recent call last):
  File "C:\Program Files\Salt Project\Salt\Lib\runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Program Files\Salt Project\Salt\Lib\runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "C:\Program Files\Salt Project\Salt\salt-call.exe\__main__.py", line 7, in <module>
    sys.exit(salt_call())
  File "C:\Program Files\Salt Project\Salt\Lib\site-packages\salt\scripts.py", line 441, in salt_call
    client.run()
  File "C:\Program Files\Salt Project\Salt\Lib\site-packages\salt\cli\call.py", line 50, in run
    caller.run()
  File "C:\Program Files\Salt Project\Salt\Lib\site-packages\salt\cli\caller.py", line 95, in run
    ret = self.call()
  File "C:\Program Files\Salt Project\Salt\Lib\site-packages\salt\cli\caller.py", line 200, in call
    ret["return"] = self.minion.executors[fname](
  File "C:\Program Files\Salt Project\Salt\Lib\site-packages\salt\loader\lazy.py", line 160, in __call__
    ret = self.loader.run(run_func, *args, **kwargs)
  File "C:\Program Files\Salt Project\Salt\Lib\site-packages\salt\loader\lazy.py", line 1269, in run
    return self._last_context.run(self._run_as, _func_or_method, *args, **kwargs)
  File "C:\Program Files\Salt Project\Salt\Lib\site-packages\salt\loader\lazy.py", line 1284, in _run_as
    return _func_or_method(*args, **kwargs)
  File "C:\Program Files\Salt Project\Salt\Lib\site-packages\salt\executors\direct_call.py", line 10, in execute
    return func(*args, **kwargs)
  File "C:\Program Files\Salt Project\Salt\Lib\site-packages\salt\loader\lazy.py", line 160, in __call__
    ret = self.loader.run(run_func, *args, **kwargs)
  File "C:\Program Files\Salt Project\Salt\Lib\site-packages\salt\loader\lazy.py", line 1269, in run
    return self._last_context.run(self._run_as, _func_or_method, *args, **kwargs)
  File "C:\Program Files\Salt Project\Salt\Lib\site-packages\salt\loader\lazy.py", line 1284, in _run_as
    return _func_or_method(*args, **kwargs)
  File "C:\Program Files\Salt Project\Salt\Lib\site-packages\salt\modules\win_wua.py", line 270, in available
    updates = wua.available(
  File "C:\Program Files\Salt Project\Salt\Lib\site-packages\salt\utils\win_update.py", line 532, in available
    if salt.utils.data.is_true(update.IsHidden) and skip_hidden:
  File "C:\Program Files\Salt Project\Salt\Lib\site-packages\win32com\client\dynamic.py", line 638, in __getattr__
    raise AttributeError("%s.%s" % (self._username_, attr))
AttributeError: <unknown>.IsHidden
Traceback (most recent call last):
  File "C:\Program Files\Salt Project\Salt\Lib\runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Program Files\Salt Project\Salt\Lib\runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "C:\Program Files\Salt Project\Salt\salt-call.exe\__main__.py", line 7, in <module>
  File "C:\Program Files\Salt Project\Salt\Lib\site-packages\salt\scripts.py", line 441, in salt_call
    client.run()
  File "C:\Program Files\Salt Project\Salt\Lib\site-packages\salt\cli\call.py", line 50, in run
    caller.run()
  File "C:\Program Files\Salt Project\Salt\Lib\site-packages\salt\cli\caller.py", line 95, in run
    ret = self.call()
  File "C:\Program Files\Salt Project\Salt\Lib\site-packages\salt\cli\caller.py", line 200, in call
    ret["return"] = self.minion.executors[fname](
  File "C:\Program Files\Salt Project\Salt\Lib\site-packages\salt\loader\lazy.py", line 160, in __call__
    ret = self.loader.run(run_func, *args, **kwargs)
  File "C:\Program Files\Salt Project\Salt\Lib\site-packages\salt\loader\lazy.py", line 1269, in run
    return self._last_context.run(self._run_as, _func_or_method, *args, **kwargs)
  File "C:\Program Files\Salt Project\Salt\Lib\site-packages\salt\loader\lazy.py", line 1284, in _run_as
    return _func_or_method(*args, **kwargs)
  File "C:\Program Files\Salt Project\Salt\Lib\site-packages\salt\executors\direct_call.py", line 10, in execute
    return func(*args, **kwargs)
  File "C:\Program Files\Salt Project\Salt\Lib\site-packages\salt\loader\lazy.py", line 160, in __call__
    ret = self.loader.run(run_func, *args, **kwargs)
  File "C:\Program Files\Salt Project\Salt\Lib\site-packages\salt\loader\lazy.py", line 1269, in run
    return self._last_context.run(self._run_as, _func_or_method, *args, **kwargs)
  File "C:\Program Files\Salt Project\Salt\Lib\site-packages\salt\loader\lazy.py", line 1284, in _run_as
    return _func_or_method(*args, **kwargs)
  File "C:\Program Files\Salt Project\Salt\Lib\site-packages\salt\modules\win_wua.py", line 270, in available
    updates = wua.available(
  File "C:\Program Files\Salt Project\Salt\Lib\site-packages\salt\utils\win_update.py", line 532, in available
    if salt.utils.data.is_true(update.IsHidden) and skip_hidden:
  File "C:\Program Files\Salt Project\Salt\Lib\site-packages\win32com\client\dynamic.py", line 638, in __getattr__
    raise AttributeError("%s.%s" % (self._username_, attr))
AttributeError: <unknown>.IsHidden

farax4de avatar Aug 26 '24 18:08 farax4de

This was fixed on the 3006.x branch. It is part of a merge forward into 3007.x and will be a part of 3006.10 and 3007.2 releases

twangboy avatar Sep 16 '24 22:09 twangboy