Ansible: Вземете името на файл, създаден от скрипт във формат name-‹date›.tar

Имам скрипт за архивиране на моя хост. Той създава файл, който е посочен в изхода му:

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

Как мога да копирам този файл на ansible сървъра, за да мога по-късно да го възстановя? Има ли някакъв начин да анализирате изхода от задача на обвивка/команда и след това да направите извличане на този файл? Може би с помощта на скриптовия модул?

Важно е да се отбележи, че не мога просто да „извличам“ файлове от сървъра (вместо да използвам скрипта за архивиране), тъй като скриптът изпълнява някои допълнителни задачи, за да създаде резервно копие.

Благодаря предварително, Игнасио.


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


Отговори (2)


Успях да постигна това, като създадох обвивка за моя скрипт, която извежда само името на файла в stdout и след това го използвах на ansible:

 - 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, за да сте сигурни, че ако запазите няколко версии на резервните си копия, те няма да бъдат изтрити. Освен това можете да регистрирате код за изход, ако вашият резервен скрипт и да изпълните задачата за синхронизиране само когато има правилен код за изход.

# 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