#ansible
#ansible
Вопрос:
В ansible мне нужно проверить, доступен ли файл на двух хостах. Но если файл доступен даже на одном хосте, мне нужно отменить задачу на другом хосте и перейти к следующей задаче. Причина, по которой я требую этого, заключается в том, что следующая задача может быть выполнена только в том случае, если этот конкретный файл доступен, и этот файл может быть случайным образом записан на любой из хостов.
Комментарии:
1. для проверки статистики можно использовать модуль stat
Ответ №1:
Следующая игра делает именно то, что вы хотите:
---
- hosts:
- server1
- server2
gather_facts: False
vars:
file_name: 'foo.bar'
tasks:
- name: wait for file
wait_for:
path: '{{ file_name }}'
state: present
timeout: 30
ignore_errors: True
- name: stat
stat:
path: '{{ file_name }}'
register: result
- name: next
debug:
msg: "File {{ file_name }} available on {{ ansible_host }}"
when: result.stat.isreg is defined and result.stat.isreg
Вывод:
PLAY [server1,server2] *********************************************************
TASK [wait for file] ***********************************************************
ok: [server1]
fatal: [server2]: FAILED! => {"changed": false, "elapsed": 3, "msg": "Timeout when waiting for file foo.bar"}
...ignoring
TASK [stat] ********************************************************************
ok: [server1]
ok: [server2]
TASK [next] ********************************************************************
skipping: [server2]
ok: [server1] => {
"msg": "File foo.bar available on server1"
}
PLAY RECAP *********************************************************************
server1 : ok=3 changed=0 unreachable=0 failed=0
server2 : ok=0 changed=0 unreachable=0 failed=0
Комментарии:
1. Привет, спасибо за ваш ответ. но когда я попытался выполнить задачу отладки на одном сервере, произошел сбой. более того, что мне нужно, так это остановить задачу проверки файлов playbook on, пока файл не станет доступен на одном из серверов. для этого требуется еще одна параллельная задача, которая также выполняется с моим playbook. я могу продолжить выполнение остальных задач, когда эта другая задача будет завершена. только. когда эта задача будет завершена, она случайным образом запишет файл на один из серверов. я попытался сделать это с помощью модуля wait_for и модуля stat с опросом, оба из которых не работают так, как мне нужно.
2. Расширенный ответ
3. еще раз спасибо. Но все равно это будет ждать на server2 в течение 30, даже если файл найден на server1. как я уже упоминал, мне нужно немедленно перейти к следующей задаче, если файл найден на одном сервере.
4. Спасибо, это было именно то, что я искал!
Ответ №2:
Вы можете использовать модуль stat для проверки статуса, как показано ниже, а также для того, чтобы добавить serial:1 ниже hosts: в свой плейбук
- stat: path: /path/to/something регистр: p
- debug: сообщение: «Путь существует и является каталогом», когда: p.stat.isdir определен и p.stat.isdir
https://docs.ansible.com/ansible/latest/modules/stat_module.html для получения более подробной информации