Ansible: Cum să copiați fișierul, directorul sau scriptul de la gazda locală la gazda la distanță?
Publicat: 2019-02-24 Ca parte a departamentului de management IT, oamenii se ocupă de o lots of scripts
și instrumente de linie de comandă. Sunt sigur că vă confruntați cu o situație de zi cu zi în care aveți fișiere de copiere sau scripturi pe mii de gazde la distanță.
Oamenii din departamentul IT nu se conectează doar la fiecare thousands of hosts
și rulează manual scriptul. Și de aceea vine Ansible în imagine. Ansible este o soluție de management IT foarte puternică, disponibilă gratuit pentru noi.
În acest tutorial vom trece peste pașii pentru a copia fișiere pe gazda de la distanță folosind Ansible.
Ce vom face?
Copiați fișierul crunchify.txt
din locația /opt/ashah/
în directorul de destinație al gazdei la distanță 192.66.129.83
/opt/ashah/
.
Pasul 1
Instalați Ansible pe Linux Ubuntu sau macOS. Urmați tutorialele pentru a trece peste pașii detaliați.
Pasul 2
Să înțelegem câteva elemente de bază și locația fișierului pentru acest tutorial:
- Locația fișierului de configurare: /etc/ansible/ansible.cfg
- Fișier script: /opt/ashah/crunchify.yml
- fișierul hosts: /opt/ashah/hosts
- fișier de copiat: /opt/ashah/crunchify.txt (fișier de testare)
Pasul 3
conținutul fișierului crunchify.yml
.
1 2 3 4 5 6 7 8 |
root @ localhost : / opt / ashah # cat crunchify.yml --- - hosts : crunchify - group tasks : - name : copy file to remote host copy : src : / opt / ashah / crunchify . txt dest : / opt / ashah |
Pasul-4
hosts
conținutul fișierului. Asigurați-vă că schimbați adresa IP cu gazda la distanță.
1 2 3 4 |
root @ localhost : / opt / ashah # cat hosts #crunchify-group as a sample [ crunchify - group ] 192.66.129.83 |
Pasul-5
Creați fișierul crunchify.txt
cu conținutul de mai jos.
1 2 3 4 |
root @ localhost : / opt / ashah # cat crunchify.txt This is sample example copying file to remote location using Ansible . More ansible tutorials at https : //crunchify.com/tag/ansible/ |
Pasul-6
Rulați această comandă pentru a copia fișierul pe gazda la distanță:
-
Command
: ansible-playbook -b -vvv -u root crunchify.yml -kkkk –extra-vars „crunchify-group” -i gazde
hai sa intelegem toti parametrii:
- -b: rulează operațiuni cu devenit (la fel ca —become).
- -vvv : mod verbos (-vvv pentru mai multe, -vvvv pentru a activa depanarea conexiunii).
- -u : conectați-vă ca acest utilizator (implicit=Niciun).
- -kkkk : cereți parola de conectare.
- –extra-vars: setați variabile suplimentare ca cheie=valoare sau YAML/JSON, dacă numele fișierului este prevazut cu @.
- -i : specificați calea gazdei de inventar sau lista de gazde separată prin virgulă.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
root @ localhost : / opt / ashah # ansible-playbook -b -vvv -u root crunchify.yml -kkkk --extra-vars "crunchify-group" -i hosts Using / etc / ansible / ansible . cfg as config file SSH password : / opt / ashah / hosts did not meet host_list requirements , check plugin documentation if this is unexpected / opt / ashah / hosts did not meet script requirements , check plugin documentation if this is unexpected Parsed / opt / ashah / hosts inventory source with ini plugin PLAYBOOK : crunchify . yml * ************************************************************************************************************************ 1 plays in crunchify . yml PLAY [ crunchify - group ] ********************************************************************************************************************************* TASK [ Gathering Facts ] ************************************************************************************************************************ < 192.66.129.83 > ESTABLISH SSH CONNECTION FOR USER : root < 192.66.129.83 > SSH : EXEC sshpass - d9 ssh - C - o ControlMaster = auto - o ControlPersist = 60s - o User = root - o ConnectTimeout = 10 - o ControlPath =/ root / . ansible / cp / 5fca43321f 192.66.129.83 '/bin/sh -c ' "'" 'echo ~root && sleep 0' "'" '' < 192.66.129.83 > ( 0 , '/root\n' , '' ) < 192.66.129.83 > ESTABLISH SSH CONNECTION FOR USER : root < 192.66.129.83 > SSH : EXEC sshpass - d9 ssh - C - o ControlMaster = auto - o ControlPersist = 60s - o User = root - o ConnectTimeout = 10 - o ControlPath =/ root / . ansible / cp / 5fca43321f 192.66.129.83 '/bin/sh -c ' "'" '( umask 77 && mkdir -p "` echo /root/.ansible/tmp/ansible-tmp-1550966284.57-6253496643791 `" && echo ansible-tmp-1550966284.57-6253496643791="` echo /root/.ansible/tmp/ansible-tmp-1550966284.57-6253496643791 `" ) && sleep 0' "'" '' < 192.66.129.83 > ( 0 , 'ansible-tmp-1550966284.57-6253496643791=/root/.ansible/tmp/ansible-tmp-1550966284.57-6253496643791\n' , '' ) Using module file / usr / lib / python2 . 7 / dist - packages / ansible / modules / system / setup . py < 192.66.129.83 > PUT / root / . ansible / tmp / ansible - local - 32435HXzj7o / tmpjFxUXp TO / root / . ansible / tmp / ansible - tmp - 1550966284.57 - 6253496643791 / AnsiballZ_setup . py < 192.66.129.83 > SSH : EXEC sshpass - d9 sftp - o BatchMode = no - b - - C - o ControlMaster = auto - o ControlPersist = 60s - o User = root - o ConnectTimeout = 10 - o ControlPath =/ root / . ansible / cp / 5fca43321f '[192.66.129.83]' < 192.66.129.83 > ( 0 , 'sftp> put /root/.ansible/tmp/ansible-local-32435HXzj7o/tmpjFxUXp /root/.ansible/tmp/ansible-tmp-1550966284.57-6253496643791/AnsiballZ_setup.py\n' , '' ) < 192.66.129.83 > ESTABLISH SSH CONNECTION FOR USER : root < 192.66.129.83 > ESTABLISH SSH CONNECTION FOR USER : root < 192.66.129.83 > SSH : EXEC sshpass - d9 ssh - C - o ControlMaster = auto - o ControlPersist = 60s - o User = root - o ConnectTimeout = 10 - o ControlPath =/ root / . ansible / cp / 5fca43321f 192.66.129.83 '/bin/sh -c ' "'" 'rm -f -r /root/.ansible/tmp/ansible-tmp-1550966284.57-6253496643791/ > /dev/null 2>&1 && sleep 0' "'" '' < 192.66.129.83 > ( 0 , '' , '' ) ok : [ 192.66.129.83 ] TASK [ deploy topology ] ******************************************************************************************************************************************** ok : [ 192.66.129.83 ] = > { "changed" : false , "checksum" : "289b0c36372210c92bf028f2a19d57333af4d63c" , "dest" : "/opt/ashah/crunchify.txt" , "diff" : { "after" : { "path" : "/opt/ashah/crunchify.txt" } , "before" : { "path" : "/opt/ashah/crunchify.txt" } } , "gid" : 0 , "group" : "root" , "invocation" : { "module_args" : { "_diff_peek" : null , "_original_basename" : "crunchify.txt" , "access_time" : null , "access_time_format" : "%Y%m%d%H%M.%S" , "attributes" : null , "backup" : null , "content" : null , "delimiter" : null , "dest" : "/opt/ashah" , "directory_mode" : null , "follow" : true , "force" : false , "group" : null , "mode" : null , "modification_time" : null , "modification_time_format" : "%Y%m%d%H%M.%S" , "owner" : null , "path" : "/opt/ashah/crunchify.txt" , "recurse" : false , "regexp" : null , "remote_src" : null , "selevel" : null , "serole" : null , "setype" : null , "seuser" : null , "src" : null , "state" : "file" , "unsafe_writes" : null } } , "mode" : "0644" , "owner" : "root" , "path" : "/opt/ashah/crunchify.txt" , "size" : 21 , "state" : "file" , "uid" : 0 } PLAY RECAP * ******************************************************************************************************************************************************* 192.66.129.83 : ok = 2 changed = 0 unreachable = 0 failed = 0 |
Asta e. Ați copiat cu succes fișierul.

Cum se verifică dacă fișierul este copiat pe noua gazdă la distanță?
Conectați-vă la gazdă la distanță și verificați locația /opt/ashah
și veți vedea fișierul crunchify.txt
Cum să copiați conținutul unui director într-un alt director?
Doar schimbați valoarea src
și desc
a fișierului crunchify.yml
. Iată un fișier actualizat crunchify.yml.
1 2 3 4 5 6 7 8 |
root @ localhost : / opt / ashah # cat crunchify.yml --- - hosts : crunchify - group tasks : - name : copy all files from folder to remote host copy : src : / opt / ashah / dest : / opt / ashah / |
Toate fișierele din folderul /opt/ashah/
vor fi copiate acum pe gazde la distanță.
Anunțați-mă dacă aveți întrebări pentru a face față fișierului în locație la distanță folosind Ansible.