You can use Ansible archive module to create a compressed archive of one or more files or trees. Remote server should have define compress packages like tar,bzip2,gzip,zipfile installed.
Lets cover different scenario to get more hands on it.
Scenario 1 : Create a Zip Archive
To create a zip archive you need to define a remote file path, You can also define a multiple files path at a same time to create a compress archive. If destination path is not mention then archive module creates its archive copy in same folder of file path. This can be set using 'dst' parameter in respective location.
[root@siddhesh ~]# cat archive.yml
- hosts: dbserver
tasks:
- name: Create Zip Archive of multiple file
archive:
path:
- /home/siddhesh/file2.pl
- /home/siddhesh/file1.pl
- /home/siddhesh/file3.pl
dest: /tmp/remotefile.zip
format: zip
[root@siddhesh ~]#
Here :
- hosts: dbserver ==> Host Inventory Group On which this action needs to be performed. - name: Create Zip Archive of multiple file ==> Task Description. archive: ==> Load archive module. path: /home/siddhesh/file2.pl ==> File Path of remote server to include in archive dest: /tmp/remotefile.zip ==> The file name of the destination archive. format: zip ==> The type of compression to use.
This playbook includes a task of archiving multiple remote files to make a zip compress file. Lets execute this and verify on remote server.
[root@siddhesh ~]# ansible-playbook archive.yml -v
Using /etc/ansible/ansible.cfg as config file
PLAY [dbserver] *****************************************************************************************************************************************************
TASK [Gathering Facts] **********************************************************************************************************************************************
ok: [node1.tecgeek.info]
TASK [Create Zip Archive of multiple file] **************************************************************************************************************************
changed: [node1.tecgeek.info] => {"archived": ["/home/siddhesh/file2.pl", "/home/siddhesh/file1.pl", "/home/siddhesh/file3.pl"], "arcroot": "/home/siddhesh/", "changed": true, "dest": "/tmp/remotefile.zip", "expanded_paths": ["/home/siddhesh/file2.pl", "/home/siddhesh/file1.pl", "/home/siddhesh/file3.pl"], "gid": 0, "group": "root", "missing": [], "mode": "0644", "owner": "root", "size": 304, "state": "file", "uid": 0}
PLAY RECAP **********************************************************************************************************************************************************
node1.tecgeek.info : ok=2 changed=1 unreachable=0 failed=0
[root@siddhesh ~]#
On Remote Server :
[root@node1 ~]# ls -lhrt /tmp/remotefile.zip
-rw-r--r-- 1 root root 304 May 6 22:24 /tmp/remotefile.zip
[root@node1 ~]# unzip -l /tmp/remotefile.zip
Archive: /tmp/remotefile.zip
Length Date Time Name
--------- ---------- ----- ----
0 05-06-2020 22:20 file2.pl
0 05-06-2020 22:20 file1.pl
0 05-06-2020 22:20 file3.pl
--------- -------
0 3 files
[root@node1 ~]#
Scenario 2 : Extract a Zip Arcive
In this scenario we'll see how to extract a content of Zip using ansible unarchive module.
[root@siddhesh ~]# cat unarchive.yml
- hosts: dbserver
tasks:
- name: extract Zip Archive content
unarchive:
src: /tmp/remotefile.zip
dest: /tmp/code
[root@siddhesh ~]#
Here :
- hosts: dbserver ==> Host Inventory Group On which this action needs to be performed.
- name: extract Zip Archive content ==> Task Description.
unarchive: ==> Load unarchive module.
src: /tmp/remotefile.zip ==> local path to archive file to copy to the target server
dest: /tmp/code ==> Remote absolute path where the archive should be unpacked
Lets run this playbook and verify content of destination path.
[root@siddhesh ~]# ansible-playbook unarchive.yml -v
Using /etc/ansible/ansible.cfg as config file
PLAY [dbserver] *****************************************************************************************************************************************************
TASK [Gathering Facts] **********************************************************************************************************************************************
ok: [node1.tecgeek.info]
TASK [extract Zip Archive content] **********************************************************************************************************************************
changed: [node1.tecgeek.info] => {"changed": true, "dest": "/tmp/code", "extract_results": {"cmd": ["/usr/bin/unzip", "-o", "/root/.ansible/tmp/ansible-tmp-1588785354.56-147284268902512/source", "-d", "/tmp/code"], "err": "", "out": "Archive: /root/.ansible/tmp/ansible-tmp-1588785354.56-147284268902512/source\n inflating: /tmp/code/file2.pl \n inflating: /tmp/code/file1.pl \n inflating: /tmp/code/file3.pl \n", "rc": 0}, "gid": 0, "group": "root", "handler": "ZipArchive", "mode": "0755", "owner": "root", "size": 4096, "src": "/root/.ansible/tmp/ansible-tmp-1588785354.56-147284268902512/source", "state": "directory", "uid": 0}
PLAY RECAP **********************************************************************************************************************************************************
node1.tecgeek.info : ok=2 changed=1 unreachable=0 failed=0
[root@siddhesh ~]#
On Remote Server :
[root@node1 ~]# ls -lrht /tmp/code/
total 0
-rw-r--r-- 1 root root 0 May 6 22:20 file1.pl
-rw-r--r-- 1 root root 0 May 6 22:20 file2.pl
-rw-r--r-- 1 root root 0 May 6 22:20 file3.pl
[root@node1 ~]#
Comentarios