Einführung
In diesem Lab werden Sie das Ansible Copy-Modul erkunden, das es Ihnen ermöglicht, Dateien und Verzeichnisse auf Remote-Hosts zu kopieren. Das Copy-Modul bietet eine flexible und effiziente Möglichkeit, Dateien im Rahmen Ihrer Ansible-Automatisierungsaufgaben zu übertragen.
Kopieren einer Datei auf einen Remote-Host
In diesem Schritt werden Sie eine Datei von der Steuerungsmaschine auf einen Remote-Host mithilfe des Ansible Copy-Moduls kopieren.
Erstellen Sie zunächst eine neue Ansible-Playbook-Datei namens /home/labex/project/copy-module-playbook.yaml und öffnen Sie sie in einem Texteditor.
Fügen Sie der Playbook-Datei den folgenden Inhalt hinzu:
- hosts: localhost
tasks:
- name: Copy a file to remote host
copy:
src: /home/labex/file.txt
dest: /home/labex/project/file.txt
copy: Nutzt das Ansible-copy-Modul, das zum Kopieren von Dateien von der Steuerungsknoten (lokaler Host) auf einen Remote-Host verwendet wird.src: Gibt den Pfad der Quelldatei an, d. h. den Pfad der zu kopierenden Datei auf dem lokalen Host.dest: Gibt den Pfad der Zieldatei an, d. h. wo die Datei auf dem Remote-Host kopiert werden soll.
Durch diese Playbook-Aufgabe wird die Datei /home/labex/file.txt auf den Pfad /home/labex/project/file.txt auf dem Remote-Host kopiert. Das Ansible-copy-Modul erleichtert den Prozess des effizienten Kopierens von Dateien.
Als Nächstes erstellen Sie eine Datei namens file.txt im Verzeichnis /home/labex.
echo "This is the content of the file." > /home/labex/file.txt
Führen Sie dann das Playbook mit dem folgenden Befehl aus:
ansible-playbook copy-module-playbook.yaml
Beispielausgabe:
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Copy a file to remote host] **********************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Verifizieren Sie abschließend, dass die Datei file.txt im angegebenen Zielpfad auf dem Remote-Host vorhanden ist.
cat /home/labex/project/file.txt
Beispielausgabe:
This is the content of the file.
Hier ist "This is the content of the file." dasselbe wie der Inhalt der Datei /home/labex/file.txt, was bedeutet, dass die Datei /home/labex/file.txt erfolgreich nach /home/labex/project/file.txt kopiert wurde.
Kopieren eines Verzeichnisses auf einen Remote-Host
In diesem Schritt werden Sie ein Verzeichnis von der Steuerungsmaschine auf einen Remote-Host mithilfe des Ansible Copy-Moduls kopieren.
Erstens, ändern Sie die vorhandene Playbook-Datei, indem Sie den gesamten Inhalt entfernen und den folgenden Inhalt zur Playbook-Datei hinzufügen:
- hosts: localhost
tasks:
- name: Copy a directory to remote host
copy:
src: /home/labex/directory
dest: /home/labex/project/
Mit der Step1-Typ (Schritt 1 - Typ) Einstellung, wenn src auf ein Verzeichnis gesetzt ist, kopiert diese Playbook-Aufgabe das Verzeichnis /home/labex/directory in den Pfad /home/labex/project/ auf dem Remote-Host.
Als Nächstes erstellen Sie ein Verzeichnis namens directory im Verzeichnis /home/labex und eine Datei namens file2.txt im Verzeichnis directory.
mkdir /home/labex/directory
touch /home/labex/directory/file2.txt
Führen Sie dann das Playbook mit dem folgenden Befehl aus:
ansible-playbook copy-module-playbook.yaml
Beispielausgabe:
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Copy a directory to remote host] *****************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Verifizieren Sie abschließend, dass das Verzeichnis directory und sein Inhalt im angegebenen Zielpfad auf dem Remote-Host vorhanden sind.
tree /home/labex/project
Erwartete Ausgabe:
/home/labex/project
├── copy-module-playbook.yaml
├── directory
│ └── file2.txt
└── file.txt
1 directory, 3 files
Sie können sehen, dass das Verzeichnis directory und die Datei file2.txt erfolgreich in das Verzeichnis /home/labex/project auf dem Zielhost kopiert wurden.
Beibehalten von Dateiattributen
In diesem Schritt erfahren Sie, wie Sie Dateiattribute wie Berechtigungen und Zeitstempel beibehalten können, wenn Sie das Ansible Copy-Modul verwenden.
Zunächst ändern Sie die vorhandene Playbook-Datei, indem Sie den gesamten Inhalt entfernen und den folgenden Inhalt zur Playbook-Datei hinzufügen:
- hosts: localhost
tasks:
- name: Preserve file attributes
copy:
src: /home/labex/file.txt
dest: /tmp/file.txt
mode: preserve
mode: preserve: Dieser Parameter bewahrt die Rechte (Permissions) der Quelldatei während des Kopiervorgangs aufrecht, sodass die Zieldatei die gleichen Berechtigungen wie die Quelldatei behält.
Durch diese Playbook-Aufgabe wird die Datei /home/labex/file.txt auf /tmp/file.txt auf dem Remote-Host kopiert, wobei die Dateiattribute wie die Berechtigungen beibehalten werden.
Führen Sie dann das Playbook mit dem folgenden Befehl aus:
ansible-playbook copy-module-playbook.yaml
Beispielausgabe:
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Preserve file attributes] ************************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Verifizieren Sie abschließend, dass die Datei file.txt in den angegebenen Zielpfad auf dem Remote-Host kopiert wurde, wobei ihre Attribute beibehalten wurden.
Verwenden Sie ll, um die Details von /home/labex/file.txt anzuzeigen:
ll /home/labex/file.txt
Beispielausgabe:
-rw-rw-r-- 1 labex labex 33 Mar 9 08:34 /home/labex/file.txt
Verwenden Sie ll, um die Details von /tmp/file.txt anzuzeigen:
ll /tmp/file.txt
Beispielausgabe:
-rw-rw-r-- 1 labex labex 33 Mar 9 09:00 /tmp/file.txt
Dieses Ansible-Playbook kann verwendet werden, um Berechtigungsmuster (Berechtigungssbits) und Besitzerinformationen während des Kopiervorgangs beizubehalten.
Umgang mit Berechtigungen
In diesem Schritt werden Sie untersuchen, wie Sie Dateiberechtigungen beim Verwenden des Ansible Copy-Moduls behandeln können. Sie werden lernen, wie Sie bestimmte Berechtigungen für die kopierte Datei auf dem Remote-Host festlegen können.
Zunächst ändern Sie die vorhandene Playbook-Datei, indem Sie den gesamten Inhalt entfernen und den folgenden Inhalt zur Playbook-Datei hinzufügen:
- hosts: localhost
tasks:
- name: Handle permissions
copy:
src: /home/labex/file.txt
dest: /tmp/file1.txt
mode: "0644"
mode: Ersetzen Sie"0644"durch den gewünschten Berechtigungsmodus für die Datei. Weitere Informationen zu Berechtigungsmodi finden Sie in der chmod-Dokumentation.
Durch diese Playbook-Aufgabe wird die Datei /home/labex/file.txt auf /tmp/file1.txt auf dem Remote-Host kopiert, mit den angegebenen Berechtigungen 0644.
Führen Sie dann das Playbook mit dem folgenden Befehl aus:
ansible-playbook copy-module-playbook.yaml
Beispielausgabe:
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Handle permissions] ******************************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Verifizieren Sie abschließend, dass die Datei file1.txt mit den festgelegten Berechtigungen in den angegebenen Zielpfad auf dem Remote-Host kopiert wurde.
Verwenden Sie ll, um die Details von /home/labex/file.txt anzuzeigen:
ll /home/labex/file.txt
Beispielausgabe:
-rw-rw-r-- 1 labex labex 33 Mar 9 08:34 /home/labex/file.txt
Verwenden Sie ll, um die Details von /tmp/file1.txt anzuzeigen:
ll /tmp/file1.txt
Beispielausgabe:
-rw-r--r-- 1 labex labex 33 Mar 9 09:11 /tmp/file1.txt
Dieses Ansible-Playbook kann verwendet werden, um bestimmte Berechtigungen wie Lesen, Schreiben und Ausführen für die Datei auf dem Remote-Host festzulegen.
Idempotentes Kopieren
In diesem Schritt werden Sie die Kopieroperation idempotent machen, indem Sie das Ansible Copy-Modul verwenden. Sie stellen sicher, dass die Datei nur kopiert wird, wenn sie auf dem Remote-Host nicht existiert oder wenn sich die Quelldatei geändert hat.
Zunächst ändern Sie die vorhandene Playbook-Datei, indem Sie den gesamten Inhalt entfernen und den folgenden Inhalt zur Playbook-Datei hinzufügen:
- hosts: localhost
tasks:
- name: Idempotent copy
copy:
src: /home/labex/file.txt
dest: /tmp/file2.txt
remote_src: yes
remote_src: yes: Dieser Parameter gibt an, dass dersrc-Pfad auf dem Remote-Host liegt, wodurch Ansible Dateien vom Remote-Host an einen anderen Ort übertragen kann.
Durch diese Playbook-Aufgabe wird die Datei /home/labex/file.txt, die sich auf dem Remote-Host befindet, nur dann nach /tmp/file2.txt auf dem Remote-Host kopiert, wenn sie nicht existiert oder wenn sich die Quelldatei geändert hat.
Als Nächstes prüfen Sie, ob die Datei /tmp/file2.txt existiert.
ll /tmp/file2.txt
Beispielausgabe:
ls: cannot access '/tmp/file2.txt': No such file or directory
Führen Sie dann das Playbook mit dem folgenden Befehl aus:
ansible-playbook copy-module-playbook.yaml
Beispielausgabe:
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Idempotent copy] *********************************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Verifizieren Sie abschließend, dass die Datei file2.txt nur dann in den angegebenen Zielpfad auf dem Remote-Host kopiert wird, wenn sie nicht existiert oder wenn sich die Quelldatei geändert hat.
ll /tmp/file2.txt
Beispielausgabe:
-rw-rw-r-- 1 labex labex 33 Mar 9 08:34 /tmp/file2.txt
Führen Sie nun das Playbook erneut aus.
ansible-playbook copy-module-playbook.yaml
Beispielausgabe:
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Idempotent copy] *********************************************************
ok: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Beachten Sie, dass changed=1 zu changed=0 wird, was beweist, dass dieses Ansible-Playbook erkennen kann, dass die Datei nur kopiert wird, wenn sie auf dem Remote-Host nicht existiert oder wenn sich die Quelldatei geändert hat.
Zusammenfassung
Herzlichen Glückwunsch! Sie haben das Lab zum Ansible Copy-Modul erfolgreich abgeschlossen. Sie haben gelernt, wie Sie das Copy-Modul verwenden können, um Dateien und Verzeichnisse auf Remote-Hosts zu kopieren, Dateiattribute beizubehalten, Berechtigungen zu verwalten und die Idempotenz sicherzustellen.
Das Copy-Modul ist ein leistungsstarkes Werkzeug zum Übertragen von Dateien in Ihren Ansible-Automatisierungsaufgaben. Es bietet verschiedene Parameter, um den Kopiervorgang gemäß Ihren Anforderungen anzupassen.
Nachdem Sie nun das Copy-Modul gut verstehen, können Sie seine Funktionen in Ihren Ansible-Playbooks nutzen, um Dateiübertragungen und -synchronisationen in Ihrer Infrastruktur effizient zu verwalten. Viel Spaß beim Kopieren mit Ansible!


