Poniższy kod usuwa tylko pierwszy plik, który dostaje się do katalogu internetowego. Chcę usunąć wszystkie pliki i foldery w katalogu internetowym i zachować katalog WWW. Jak mogę to zrobić?
- name: remove web dir contents
file: path='/home/mydata/web/{{ item }}' state=absent
with_fileglob:
- /home/mydata/web/*
Uwaga: próbowałem rm -rf
użyć polecenia i powłoki, ale nie działają. Być może niewłaściwie ich używam.
Każda pomoc we właściwym kierunku zostanie doceniona.
Używam ansible 2.1.0.0
Odpowiedzi:
Poniższy kod usunie całą zawartość
artifact_path
Uwaga : spowoduje to również usunięcie katalogu.
źródło
rm -rf /
momentów w historiiwhen: artifact_path is defined and artifact_path != ""
Korzystanie z modułu powłoki ( również idempotentny ):
Najczystsze rozwiązanie, jeśli nie zależy Ci na dacie utworzenia i właścicielu / uprawnieniach:
źródło
shell
nacommand
i działaUsuń katalog (w zasadzie kopię https://stackoverflow.com/a/38201611/1695680 ), Ansible wykonuje tę operację
rmtree
pod maską.Jeśli nie masz luksusu usunięcia całego katalogu i odtworzenia go, możesz przeskanować go w poszukiwaniu plików (i katalogów) i usuwać je jeden po drugim. Co trochę potrwa. Prawdopodobnie chcesz się upewnić, że masz
[ssh_connection]\npipelining = True
włączony plik ansible.cfg.źródło
state=empty
Naprawdę nie podobało mi się rozwiązanie rm, a także ansibl ostrzega o używaniu rm. Oto jak to zrobić bez potrzeby rm i bez ostrzeżeń ansibli.
źródło: http://www.mydailytutorials.com/ansible-delete-multiple-files-directories-ansible/
źródło
spróbuj poniższego polecenia, powinno działać
źródło
with_items: "{{ contents.stdout_lines }}"
ls
„output” do pobierania nazw plików jest niebezpieczne, ponieważ nie wyświetla poprawnie nazw plików ze znakami specjalnymi, takimi jak znaki nowej linii.Na podstawie wszystkich komentarzy i sugestii utworzono całkowicie odnowioną i bezpieczną implementację:
źródło
register
forplugin_dir_deleted
, prawda?owner: dir_to_delete.stat.pw_name, group: dir_to_delete.stat.gr_name mode: dir_to_delete.stat.mode
ale nie udaje mi się z moją aktualną wersją Ansible :(Używanie pliku glob również zadziała. W opublikowanym kodzie występuje błąd składni. Zmodyfikowałem i przetestowałem to powinno działać.
źródło
with_fileglob
działa tylko na komputerze lokalnym, a nie zdalnym; czy to nie prawda?Podczas gdy Ansible wciąż debatuje nad wdrożeniem
state = empty
https://github.com/ansible/ansible-modules-core/issues/902Pamiętaj jednak, że dzięki synchronizacji powinieneś być w stanie poprawnie zsynchronizować swoje pliki (z usuwaniem).
źródło
Oto, co wymyśliłem:
Po pierwsze, otrzymujemy listę katalogów z
find
ustawieniemfile_type
doany
, aby nie przegapić zagnieżdżonych katalogów i linkówhidden
doyes
, więc nie pomijamy ukrytych plikówrecurse
nayes
, ponieważ jest to nie tylko niepotrzebne, ale może wydłużyć czas wykonania.Następnie przeglądamy tę listę za pomocą
file
module. Jego wynik jest nieco rozwlekły, więcloop_control.label
pomoże nam w ograniczaniu wyjścia (znalazłem tę radę tutaj ).Ale okazało się, że poprzednie rozwiązanie jest nieco powolne, ponieważ iteruje po zawartości, więc poszedłem z:
stat
To mi wystarczyło, ale możesz też dodać
attributes
, jeśli chcesz.źródło
W związku z tym istnieje otwarta kwestia .
Na razie rozwiązanie działa dla mnie: utwórz pusty folder lokalnie i zsynchronizuj go ze zdalnym.
Oto przykładowy poradnik:
źródło
Napisałem niestandardowy moduł ansible do czyszczenia plików w oparciu o wiele filtrów, takich jak wiek, sygnatura czasowa, wzorce glob itp.
Jest również kompatybilny ze starszymi wersjami ansible. Można go znaleźć tutaj .
Oto przykład:
źródło
Chcę się upewnić, że polecenie find usuwa tylko wszystko z katalogu i pozostawia katalog nienaruszony, ponieważ w moim przypadku katalog jest systemem plików. System wygeneruje błąd podczas próby usunięcia systemu plików, ale nie jest to dobra opcja. Używam opcji powłoki, ponieważ jest to jedyna działająca opcja, jaką do tej pory znalazłem dla tego pytania.
Co ja zrobiłem:
Edytuj plik hosts, aby wstawić kilka zmiennych:
I utwórz poradnik:
Spowoduje to usunięcie wszystkich plików i katalogów w katalogu zmiennych / systemie plików COGNOS_HOME. Opcja „-mindepth 1” zapewnia, że bieżący katalog nie zostanie dotknięty.
źródło
Po prostu mały, czystszy szablon kopiowania i wklejania ThorSummoners odpowiada, jeśli używasz Ansible> = 2.3 (rozróżnienie między plikami i katalogami nie jest już konieczne).
źródło
Zakładając, że zawsze korzystasz z Linuksa, wypróbuj
find
cmd.Powinno to usunąć pliki / foldery / ukryte pod
/home/mydata/web
źródło
źródło
To jest mój przykład.
uruchom rsyslog
źródło
Poniżej pracował dla mnie,
źródło