Мне нужно проверить, существует ли файл в формате /etc/
. Если файл существует, мне нужно пропустить задачу. Вот код, который я использую:
- name: checking the file exists
command: touch file.txt
when: $(! -s /etc/file.txt)
Вы можете сначала проверить, существует ли целевой файл или нет, а затем принять решение на основе его результата:
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
будет иметь значениеstat_result.state.exists
False (и тогда будет запущена вторая задача). Вы можете увидеть подробную информацию о модуле статистики здесь: docs.ansible.com/ansible/stat_module.htmlwhen: stat_result.stat.exists == False
в,when: not stat_result.stat.exists
если хотите, чтобы текст читался более естественно.Модуль stat сделает это, а также получит много другой информации для файлов. Из примерной документации:
источник
Этого можно добиться с помощью модуля stat, чтобы пропустить задачу, когда файл существует.
источник
Обычно это делается с помощью модуля stat . Но у командного модуля есть
creates
опция, которая делает это очень просто:Думаю, ваша сенсорная команда - это просто пример? Лучше всего вообще ничего не проверять и позволить ansible делать свою работу - с правильным модулем. Поэтому, если вы хотите убедиться, что файл существует, вы должны использовать файловый модуль:
источник
state: file
не создает файлы. См. Docs.ansible.com/ansible/file_module.htmlисточник
when: mypath is not exists
в данном случае значит? Разве это неmypath
простая строка?Я считаю, что выполнение большого количества таких
.stat.exists
проверок может раздражать и приводить к ошибкам . Например, им требуется дополнительная осторожность, чтобы заставить--check
работать check mode ( ).Многие ответы здесь предполагают
Однако иногда это запах кода, поэтому всегда ищите более эффективные способы использования Ansible, в частности, использование правильного модуля дает много преимуществ. например
или
Но когда невозможно использовать один модуль, также выясните, можете ли вы зарегистрироваться и проверить результат предыдущей задачи. например
Обратите внимание на
when:
то,creates:
что--check
это не ошибкаЯ упоминаю об этом, потому что часто эти неидеальные практики используются парами, т.е. без пакета apt / yum, поэтому мы должны 1) загрузить и 2) разархивировать
Надеюсь это поможет
источник
Обнаружено, что вызов
stat
происходит медленно и собирает много информации, которая не требуется для проверки существования файла.Потратив некоторое время на поиск решения, я обнаружил следующее решение, которое работает намного быстрее:
источник
Вы можете использовать модуль Ansible stat для регистрации файла и модуля when для применения условия.
источник
**
Как проверить, существует ли файл в Ansible, используя условие when
**
Ниже приведена игра, которую я использовал для удаления файла, когда файл существует в конце ОС.
Я использовал условия игры, как показано ниже
вы можете указать истину / ложь в зависимости от ваших требований
источник
Если вы просто хотите убедиться, что определенный файл существует (например, потому что он должен быть создан другим способом, чем через ansible), и потерпеть неудачу, если это не так, вы можете сделать это:
источник
Примечание об относительных путях в дополнение к другим ответам.
При создании инфраструктуры в виде кода я обычно использую роли и задачи, которые принимают относительные пути, особенно для файлов, определенных в этих ролях.
Специальные переменные, такие как playbook_dir и role_path, очень полезны для создания абсолютных путей, необходимых для проверки существования.
источник