Ansible: Получить имя файла, созданного скриптом, в формате имя-‹дата›.tar

У меня есть скрипт для резервного копирования на моем хосте. Он создает файл, указанный на его выходе:

********************************************************************************
Configuration files backup successfully.
Backup file is put to /root/backup_201409111318.tar.
********************************************************************************

Как я могу скопировать этот файл на доступный сервер, чтобы потом восстановить его? Есть ли способ проанализировать вывод задачи оболочки/команды, а затем выполнить выборку этого файла? Может быть, с помощью скриптового модуля?

Важно отметить, что я не могу просто «извлекать» файлы с сервера (вместо использования сценария резервного копирования), потому что сценарий выполняет некоторые дополнительные задачи по созданию резервной копии.

Заранее спасибо, Игнасио.


person Ignacio Verona    schedule 11.09.2014    source источник


Ответы (2)


Я смог добиться этого, создав оболочку для моего скрипта, которая выводит только имя файла на стандартный вывод, а затем использовала его на доступном:

 - name: Send backup script
   copy: src={{ item }} dest=/tmp owner=root group=root mode=744
   with_items:
       - backup.sh
       - backup_wraper.sh

 - name: Exec the script
   command: /tmp/backup_wraper.sh
   register: backup_path

 - name: Get the file
   fetch: src=/root/{{ backup_path.stdout }} dest=/tmp/{{ backup_path.stdout }} flat=yes
person Ignacio Verona    schedule 11.09.2014
comment
Другим вариантом было бы записать вывод в переменную и передать его в sed с помощью командного модуля, чтобы получить только имя файла. Ansible также имеет фильтр регулярных выражений docs.ansible.com/playbooks_variables.html#other- полезные фильтры - person jarv; 11.09.2014

Для этого можно использовать модуль syncronize. Вы должны использовать параметр delete=No, чтобы убедиться, что если вы храните несколько версий своих резервных копий, они не будут удалены. Кроме того, вы можете зарегистрировать код выхода, если у вас есть сценарий резервного копирования, и запускать задачу syncronize только при наличии правильного кода выхода.

# Synchronization of src on delegate host to dest on the current inventory host
synchronize: >
    src=some/relative/path dest=/some/absolute/path delete=No mode=pull
    delegate_to: backup.host
person Mxx    schedule 12.09.2014