Muszę sprawdzić, czy plik istnieje w formacie /etc/
. Jeśli plik istnieje, muszę pominąć zadanie. Oto kod, którego używam:
- name: checking the file exists
command: touch file.txt
when: $(! -s /etc/file.txt)
Możesz najpierw sprawdzić, czy plik docelowy istnieje, czy nie, a następnie podjąć decyzję na podstawie wyniku:
tasks:
- name: Check that the somefile.conf exists
stat:
path: /etc/file.txt
register: stat_result
- name: Create the file, if it doesnt exist already
file:
path: /etc/file.txt
state: touch
when: not stat_result.stat.exists
stat_result
będzie miał wartośćstat_result.state.exists
False (i wtedy zostanie uruchomione drugie zadanie). Szczegóły dotyczące modułu statystycznego można znaleźć tutaj: docs.ansible.com/ansible/stat_module.htmlwhen: stat_result.stat.exists == False
do,when: not stat_result.stat.exists
jeśli chcesz, aby czytano bardziej naturalnie.Stat moduł będzie to zrobić, a także uzyskać wiele innych informacji o plikach. Z przykładowej dokumentacji:
źródło
Można to osiągnąć za pomocą modułu stat, aby pominąć zadanie, gdy plik istnieje.
źródło
Ogólnie rzecz biorąc, można to zrobić za pomocą modułu stat . Ale moduł poleceń ma
creates
opcję, która czyni to bardzo prostym:Myślę, że twoja komenda dotykowa jest tylko przykładem? Najlepszą praktyką byłoby nie sprawdzanie niczego i pozwolenie ansiblowi wykonać swoją pracę - z odpowiednim modułem. Więc jeśli chcesz mieć pewność, że plik istnieje, użyj modułu pliku:
źródło
state: file
nie tworzy plików. Zobacz docs.ansible.com/ansible/file_module.htmlźródło
when: mypath is not exists
w tym przypadku oznacza? Czy nie jestmypath
to zwykły ciąg?Uważam, że wykonywanie wielu tego
.stat.exists
typu kontroli może być denerwujące i podatne na błędy . Na przykład wymagają dodatkowej uwagi, aby uzyskać działanie trybu sprawdzania (--check
).Wiele odpowiedzi sugeruje tutaj
Jednak czasami jest to zapach kodu, więc zawsze szukaj lepszych sposobów korzystania z Ansible, w szczególności korzystanie z odpowiedniego modułu ma wiele zalet. na przykład
lub
Ale jeśli nie jest to możliwe, użyj jednego modułu, sprawdź również, czy możesz się zarejestrować i sprawdzić wynik poprzedniego zadania. na przykład
Zanotuj
when:
ale równieżcreates:
tak--check
nie z błędówWspominam o tym, ponieważ często te mniej niż idealne praktyki występują w parach, tj. Nie ma pakietu apt / yum, więc musimy 1) pobrać i 2) rozpakować
Mam nadzieję że to pomoże
źródło
Odkryto, że wywołanie
stat
jest powolne i zbiera wiele informacji, które nie są wymagane do sprawdzenia istnienia pliku.Po spędzeniu czasu na poszukiwaniu rozwiązania odkryłem następujące rozwiązanie, które działa znacznie szybciej:
źródło
Możesz użyć modułu Ansible stat , aby zarejestrować plik i kiedy moduł zastosować warunek.
źródło
**
Jak sprawdzić, czy plik istnieje w Ansible przy użyciu warunku When
**
Poniżej znajduje się gra ansible, której użyłem do usunięcia pliku, gdy istnieje on na końcu systemu operacyjnego.
Użyłem warunku gry jak poniżej
możesz podać prawda / fałsz na podstawie swoich wymagań
źródło
Jeśli chcesz się tylko upewnić, że pewien plik istnieje (np. Ponieważ powinien być utworzony w inny sposób niż przez ansibla) i zawieść, jeśli tak się nie stanie, możesz to zrobić:
źródło
Uwaga na temat ścieżek względnych w celu uzupełnienia innych odpowiedzi.
Robiąc infrastrukturę jako kod, zwykle używam ról i zadań, które akceptują ścieżki względne, szczególnie dla plików zdefiniowanych w tych rolach.
Specjalne zmienne, takie jak playbook_dir i role_path, są bardzo przydatne do tworzenia bezwzględnych ścieżek potrzebnych do sprawdzenia istnienia.
źródło