Hello,
after upgrade to salt 3007.4, cp.push and cp.push_dir operations are broken, at least two scenarios don't work anymore:
1. cp.push to a subdirectory of default cache directory
working well:
/usr/bin/salt minion cp.push /path/to/file.txt upload_path='testfile.txt'
not working:
/usr/bin/salt minion cp.push /path/to/file.txt upload_path='tmp/testfile.txt'
solution:
$ diff /opt/saltstack/salt/lib/python3.10/site-packages/salt/master.py_orig /opt/saltstack/salt/lib/python3.10/site-packages/salt/master.py
1743c1743
< if not salt.utils.verify.clean_path(rpath, cpath):
---
> if not salt.utils.verify.clean_path(rpath, cpath, True):
2. cp.push_dir with globbing throws exception, even with the change in master.py following the previous case
not working:
/usr/bin/salt minion cp.push_dir /path/to/dir upload_path='tmp' glob='*.conf'
throws an exception:
The minion function caused an exception: Traceback (most recent call last):
File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/minion.py", line 2022, in _thread_return
return_data = minion_instance._execute_job_function(
File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/minion.py", line 1978, in _execute_job_function
return_data = self.executors[fname](opts, data, func, args, kwargs)
File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/loader/lazy.py", line 160, in __call__
ret = self.loader.run(run_func, *args, **kwargs)
File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/loader/lazy.py", line 1269, in run
return self._last_context.run(self._run_as, _func_or_method, *args, **kwargs)
File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/loader/lazy.py", line 1284, in _run_as
ret = _func_or_method(*args, **kwargs)
File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/executors/direct_call.py", line 10, in execute
return func(*args, **kwargs)
File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/loader/lazy.py", line 160, in __call__
ret = self.loader.run(run_func, *args, **kwargs)
File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/loader/lazy.py", line 1269, in run
return self._last_context.run(self._run_as, _func_or_method, *args, **kwargs)
File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/loader/lazy.py", line 1284, in _run_as
ret = _func_or_method(*args, **kwargs)
File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/modules/cp.py", line 1064, in push_dir
ret = push(tmpfile, upload_path=tmpupload_path)
File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/modules/cp.py", line 1004, in push
ret = channel.send(load)
File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/utils/asynchronous.py", line 139, in wrap
raise exc_info[1].with_traceback(exc_info[2])
File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/utils/asynchronous.py", line 147, in _target
result = io_loop.run_sync(lambda: getattr(self.obj, key)(*args, **kwargs))
File "/opt/saltstack/salt/lib/python3.10/site-packages/tornado/ioloop.py", line 539, in run_sync
return future_cell[0].result()
File "/opt/saltstack/salt/lib/python3.10/site-packages/tornado/gen.py", line 779, in run
yielded = self.gen.throw(exc)
File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/channel/client.py", line 353, in send
ret = yield self._crypted_transfer(load, timeout=timeout, raw=raw)
File "/opt/saltstack/salt/lib/python3.10/site-packages/tornado/gen.py", line 766, in run
value = future.result()
File "/opt/saltstack/salt/lib/python3.10/site-packages/tornado/gen.py", line 779, in run
yielded = self.gen.throw(exc)
File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/channel/client.py", line 307, in _crypted_transfer
ret = yield _do_transfer()
File "/opt/saltstack/salt/lib/python3.10/site-packages/tornado/gen.py", line 766, in run
value = future.result()
File "/opt/saltstack/salt/lib/python3.10/site-packages/tornado/gen.py", line 233, in wrapper
yielded = ctx_run(next, result)
File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/channel/client.py", line 289, in _do_transfer
self._package_load(load, nonce),
File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/channel/client.py", line 170, in _package_load
load["tok"] = self.auth.gen_token(b"salt")
File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/crypt.py", line 1112, in gen_token
return self.get_keys().encrypt(clear_tok)
File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/crypt.py", line 1088, in get_keys
user = self.opts.get("user", "root")
File "/opt/saltstack/salt/lib/python3.10/site-packages/salt/loader/context.py", line 88, in get
return self.value().get(key, default)
AttributeError: 'NoneType' object has no attribute 'get'
ERROR: Minions returned with non-zero exit code
I dind't find a solution for this case yet. Both master (Ubuntu 24.04) and minion (Ubuntu 22.04) have 3007.4 packages from
packages.broadcom.com.
Before there were 3007.1 on both master and minion, working well in these situations.
David