In diesem Schritt lernen Sie, wie Sie eines der grundlegendsten Ansible-Module verwenden: ansible.builtin.copy
. Dieses Modul wird verwendet, um Dateien von Ihrem Steuerknoten (der LabEx VM) an einen bestimmten Speicherort auf Ihren verwalteten Hosts zu übertragen. In unserem Fall ist der verwaltete Host localhost
selbst. Neben dem reinen Kopieren ermöglicht das copy
-Modul die präzise Steuerung der Dateiattribute, wie z. B. Besitzer, Gruppe und Berechtigungsmodus, was für eine ordnungsgemäße Systemkonfiguration unerlässlich ist.
Zuerst richten wir unsere Projektumgebung ein. Alle unsere Arbeiten werden im Verzeichnis ~/project
durchgeführt.
-
Navigieren Sie zum Projektverzeichnis und erstellen Sie ein Unterverzeichnis für unsere Quelldateien. Dies ist eine gängige Praxis, um Ihr Projekt organisiert zu halten.
Installieren Sie das Paket ansible-core
.
sudo dnf install -y ansible-core
Navigieren Sie dann zum Projektverzeichnis und erstellen Sie ein Unterverzeichnis für unsere Quelldateien.
cd ~/project
mkdir files
-
Erstellen Sie als Nächstes eine einfache Textdatei, die wir kopieren werden. Wir verwenden einen cat
-Befehl mit einem "Here-Dokument", um die Datei info.txt
im Verzeichnis files
zu erstellen.
cat << EOF > ~/project/files/info.txt
This file was deployed by Ansible.
It contains important system information.
EOF
-
Erstellen Sie nun eine Ansible-Inventardatei. Das Inventar teilt Ansible mit, welche Hosts verwaltet werden sollen. Für dieses Lab verwalten wir die lokale Maschine. Erstellen Sie eine Datei namens inventory.ini
.
cat << EOF > ~/project/inventory.ini
localhost ansible_connection=local
EOF
In diesem Inventar ist localhost
der Host, den wir anvisieren. Die Variable ansible_connection=local
weist Ansible an, die Aufgaben direkt auf dem Steuerknoten auszuführen, ohne SSH zu verwenden.
-
Erstellen Sie Ihr erstes Ansible-Playbook. Dieses Playbook enthält die Anweisungen zum Kopieren der Datei. Verwenden Sie nano
oder cat
, um eine Datei namens copy_file.yml
zu erstellen.
nano ~/project/copy_file.yml
Fügen Sie den folgenden Inhalt in die Datei ein. Dieses Playbook definiert eine Aufgabe: info.txt
nach /tmp/
zu kopieren und seine Attribute festzulegen.
---
- name: Deploy a static file to localhost
hosts: localhost
tasks:
- name: Copy info.txt and set attributes
ansible.builtin.copy:
src: files/info.txt
dest: /tmp/info.txt
owner: labex
group: labex
mode: "0640"
Lassen Sie uns die Parameter in der copy
-Aufgabe aufschlüsseln:
src: files/info.txt
: Der Pfad zur Quelldatei auf dem Steuerknoten, relativ zum Speicherort des Playbooks.
dest: /tmp/info.txt
: Der absolute Pfad, an dem die Datei auf dem verwalteten Host platziert wird.
owner: labex
: Legt den Besitzer der Datei auf den Benutzer labex
fest.
group: labex
: Legt die Gruppe der Datei auf die Gruppe labex
fest.
mode: '0640'
: Legt die Berechtigungen der Datei fest. 0640
bedeutet, dass der Besitzer lesen/schreiben darf, die Gruppe lesen darf und andere keine Berechtigungen haben.
-
Führen Sie das Playbook mit dem Befehl ansible-playbook
aus. Das Flag -i
gibt unsere Inventardatei an.
ansible-playbook -i inventory.ini copy_file.yml
Sie sollten eine Ausgabe sehen, die die erfolgreiche Ausführung des Playbooks anzeigt, ähnlich dieser:
PLAY [Deploy a static file to localhost] ***************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Copy info.txt and set attributes] ****************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
-
Überprüfen Sie abschließend, ob die Datei korrekt kopiert wurde und die richtigen Attribute hat. Verwenden Sie den Befehl ls -l
, um die Berechtigungen, den Besitzer und die Gruppe zu überprüfen.
ls -l /tmp/info.txt
Die Ausgabe sollte zeigen, dass labex
der Besitzer und die Gruppe ist und die Berechtigungen -rw-r-----
lauten.
-rw-r----- 1 labex labex 72 Jul 10 14:30 /tmp/info.txt
Sie können auch den Inhalt der Datei anzeigen, um sicherzustellen, dass sie vollständig kopiert wurde.
cat /tmp/info.txt
This file was deployed by Ansible.
It contains important system information.