Kopieren von Dateien von Local nach Remote
Meistens werden Sie Dateien von lokalen auf Remote-Server kopieren. Hier ist ein Playbook-Beispiel für die Durchführung einer solchen Aufgabe.
---- Hosts: Webserver
Aufgaben:
- name: Datei auf einen Remote-Server kopieren
Kopieren:
src: ~/test.TXT
Ziel: /tmp
Im obigen Beispiel zielen wir auf alle Webserver Gruppe in unserem Ansible-Inventar. Die Quelle ist die Prüfung.TXT befindet sich im Home-Verzeichnis unseres lokalen Computers und das Ziel ist der /tmp-Ordner auf dem Remote-Computer.
$ ansible-playbook 1_copy_to_remote.ymlSPIELEN [Webserver]
************************************************* **************************
AUFGABE [Sammeln von Fakten]
************************************************* **************************
Okay: [172.17.0.3]
AUFGABE [Ansible Datei auf Remote-Server kopieren]
************************************************* **************************
geändert: [172.17.0.3]
ZUSAMMENFASSUNG SPIELEN
************************************************* **************************
172.17.0.3 : ok=2 changed=1 unreachable=0 failed=0
Wenn wir das Playbook ausführen, sollten wir die Ergebnisse wie oben sehen.
Die Standardberechtigungen sind auf dem Remote-Rechner auf 0644 eingestellt:
# ls -alsh-Test.TXT0 -rw-rw-r-- 1 a_user a_user 0 Apr 20 08:49 test.TXT
Sie können dies ändern, indem Sie den Modus-Parameter hinzufügen:
---- Hosts: Webserver
Aufgaben:
- name: Datei auf einen Remote-Server kopieren
Kopieren:
src: ~/test.TXT
Ziel: /tmp
Modus: 0744
Ihre Berechtigungen auf der Fernbedienung sehen also so aus:
# ls -alsh-Test.TXT0 -rwxr--r-- 1 a_user a_user 0 Apr 20 08:54 test.TXT
Verzeichnisse von Local nach Remote kopieren
Zum Kopieren von Verzeichnissen haben Sie zwei Möglichkeiten. Wenn Sie ein / nach dem Verzeichnisnamen einfügen, wird alles in diesem Verzeichnis in den Zielordner kopiert. Wenn Sie das / nicht eingeben, wird zuerst das Verzeichnis im Ziel erstellt und dann alles hineinkopiert.
Versuchen wir das Kopiermodul mit dem folgenden Verzeichnis in unserem lokalen Home-Ordner:
Testverzeichnis/|-- nested1
| '-- test1.TXT
|-- verschachtelt2
| '-- test2.TXT
'-- testen0.TXT
Wenn wir den folgenden Code verwenden:
---- Hosts: Webserver
Aufgaben:
- Name: Verzeichnis auf Remote-Server kopieren
Kopieren:
src: ~/testdir
Ziel: /tmp
Dann erhalten wir auf dem Remote-Server Folgendes:
tmp/'--testdir
|-- nested1
| '-- test1.TXT
|-- verschachtelt2
| '-- test2.TXT
'-- testen0.TXT
Kopieren von Dateien zwischen Verzeichnissen auf Remote-Computern
Ansible Copy ermöglicht das Kopieren von Dateien von einem Verzeichnis in ein anderes auf demselben Remote-Rechner. Aber Sie können dies nur für Dateien durchführen, Sie können keine Verzeichnisse kopieren. Sie müssen die verwenden remote_src Parameter, um Ansible Ihre Absichten mitzuteilen.
---- Hosts: Webserver
Aufgaben:
- name: Datei zwischen Verzeichnissen auf einem Remote-Server kopieren
Kopieren:
src: /tmp/test.TXT
Ziel: ~/test.TXT
remote_src: ja
Der obige Code wird kopiert /tmp/test.TXT in das Home-Verzeichnis des Benutzers (/home/[Benutzername]/).
Kopieren von Dateien mit mehreren Parametern
Sie können einzelne Parameter für Dateien übergeben.
---- Hosts: Webserver
Aufgaben:
- name: Dateien mit mehreren Änderungen kopieren
Kopieren:
src: " item.src "
Ziel: " item.Ziel "
Modus: "item.Modus"
with_items:
- src: '~/testdir2/test1.txt', dest: '/tmp/a.txt', Modus: '0644'
- src: '~/testdir2/test2.txt', dest: '/tmp/b.txt', Modus: '0755'
- src: '~/testdir2/test3.txt', dest: '/tmp/c.txt', Modus: '0644'
Im obigen Beispiel benennen wir die Dateien um und setzen individuelle Berechtigungen für die Dateien. Die Ansible-Ausgabe sieht so aus:
$ ansible-playbook 4_copy_to_remote_with_multiple_parameters.ymlSPIELEN [Webserver]
************************************************* ****************
AUFGABE [Sammeln von Fakten]
************************************************* ****************
Okay: [172.17.0.3]
AUFGABE [Dateien mit mehreren Änderungen kopieren]
************************************************* ****************
geändert: [172.17.0.3] => (item=u'dest': u'/tmp/a.txt', u'src': u'~/testdir2/test1.TXT',
u'mode': u'0644')
geändert: [172.17.0.3] => (item=u'dest': u'/tmp/b.txt', u'src': u'~/testdir2/test2.TXT',
u'mode': u'0755')
geändert: [172.17.0.3] => (item=u'dest': u'/tmp/c.txt', u'src': u'~/testdir2/test3.TXT',
u'mode': u'0644')
ZUSAMMENFASSUNG SPIELEN
************************************************* ************************
172.17.0.3 : ok=2 changed=1 unreachable=0 failed=0
Inhalte auf Remote-Servern erstellen
Sie können das Kopiermodul verwenden, um Inhalte auf Remote-Servern direkt aus der Playbook-Datei zu erstellen. Hier ist ein Beispiel:
---- Hosts: Webserver
Aufgaben:
- name: Verwenden Sie eine ansible Kopie, um Inhalte auf einem Remote-Server zu erstellen
Kopieren:
Inhalt: "Hallo Server!\n"
Ziel: /tmp/hallo.TXT
Dadurch entsteht die Hallo.TXT Datei auf dem Remote-Server, die "Hello Server" enthält!”Text.
# Katze /tmp/hallo.TXTHallo Server
Fazit
Ansible Copy ist ein nützliches Modul, mit dem Sie Dateien zwischen Servern kopieren können. Es sollte Ihre Konfigurationsaufgaben erleichtern.
Weitere Studie:
http://docs.ansible.com/ansible/latest/modules/copy_module.html