Ansible Copy-Modul

AnsibleAnsibleBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

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.

Dies ist ein Guided Lab, das schrittweise Anweisungen bietet, um Ihnen beim Lernen und Üben zu helfen. Befolgen Sie die Anweisungen sorgfältig, um jeden Schritt abzuschließen und praktische Erfahrungen zu sammeln. Historische Daten zeigen, dass dies ein Labor der Stufe Anfänger mit einer Abschlussquote von 98% ist. Es hat eine positive Bewertungsrate von 97% von den Lernenden erhalten.

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 der src-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!