Open si14 opened 2 years ago
I'm unable to reproduce this issue. The files permissions and ownership in the deploy are honored.
Maybe this has been fixed since you opened the issue. Maybe update your version and try again.
If you still have this issue, then provide more details on reproducing.
This still happens to me on the latest version from PyPI. I created a simple example repo. After running pyinfra inventory.py deploy.py
, everything is uploaded to the server. However, only files are given the specified permissions, while directories are set to 777
:
$ ls -al /opt/test/
total 12
drwxrwxrwx 3 root root 4096 Aug 9 19:25 ./
drwxr-xr-x 5 root root 4096 Aug 9 19:25 ../
-rw-r--r-- 1 root root 0 Aug 9 19:25 first.txt
drwxrwxrwx 2 root root 4096 Aug 9 19:25 nested/
-rw-r--r-- 1 root root 0 Aug 9 19:25 second.txt
$ ls -al /opt/test/nested/
total 8
drwxrwxrwx 2 root root 4096 Aug 9 19:25 ./
drwxrwxrwx 3 root root 4096 Aug 9 19:25 ../
-rw-r--r-- 1 root root 0 Aug 9 19:25 third.txt
Output of pyinfra --support
:
System: Windows
Platform: Windows-10-10.0.19044-SP0
Release: 10
Machine: AMD64
pyinfra: v2.3
Executable: C:\Users\filips\AppData\Local\Temp\pyinfra-permissions-bug\venv\Scripts\pyinfra.exe
Python: 3.10.5 (CPython, MSC v.1929 64 bit (AMD64))
Computer where I run pyinfra has Windows 10. Target host has Debian 11 and is accessed over SSH.
Changing the code to mode=mode or ...
for both yield from directory
-ies fixes the issue. However, it would probably be better to create an additional dir_mode
parameter, as sometimes you want directories to have different permissions than files (e.g, +x
attribute). I can create a PR for this.
files.sync
always applies host's file permission on the destination directory regardless ofmode
in the command: https://github.com/Fizzadar/pyinfra/blob/ff0913d6a172966760b63fe59e55dff9ea852e0d/pyinfra/operations/files.py#L573It might be the intended behaviour, but it's fairly surprising, as code like this
might lead to
staticweb
being listable for everyone on the target host.