pyinfra
pyinfra copied to clipboard
files.sync does not remove existing symlinks
Describe the bug
As the title describes, using the files.sync
operation on a remote directory which contains symlinks that are not present in the local version, they are not deleted.
To Reproduce
- Create a file
files/update-motd.d/something
(put anything in it, its irrelevant) - For example, run the following against a ubuntu 22.04 host:
files.sync(
name="Update MOTD",
src="files/update-motd.d/",
dest="/etc/update-motd.d",
delete=True,
)
This will leave the /etc/update-motd.d
directory as follows:
/etc/update-motd.d/
something
50-landscape-sysinfo
the latter is a symlink. This should be reproducible for any directory which contains such a symlink that is not present locally, though.
Expected behavior
I'm not sure the expected behavior would be to have the symlink be removed, but IMO there should at least be an option for it.
Meta
Running pyinfra v2.9, installed from pip
I see why this is happening. However, I'm not sure how @Fizzadar wants this operation to handle symlinks. It's an easy fix if Fizzadar wants this operation to handle symlinks.
Maybe this isn't as straight forward as I first thought. In any case, we still need to know if the sync
operation should be expanded to handle symlinks.
Yes I think it should. Ideally the sync op should be like rsync’s archive mode I think.