Ansible Copy-Modul

AnsibleBeginner
Jetzt üben

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