Verwenden von Ansible zum Übertragen von Dateien zu oder von Junos-Geräten
Verwenden Sie die Ansible-Module von Juniper Networks, um Dateien zwischen dem Ansible-Steuerknoten und Junos-Geräten zu kopieren.
Übersicht über file_copy Module
Sie können das juniper.device.file_copy
Ansible-Modul verwenden, um Dateien zwischen dem Ansible-Steuerungsknoten und Junos-Geräten zu übertragen. In Tabelle 1 sind die Modulargumente aufgeführt. Sie müssen das action
Argument angeben, um die Übertragungsrichtung anzugeben. Sie müssen auch das lokale und das Remote-Verzeichnis sowie den Dateinamen der zu übertragenden Datei angeben.
Modul-Argument |
Beschreibung |
Vorgabe |
---|---|---|
|
Geben Sie an, ob eine Datei auf das oder vom Remote-Gerät kopiert werden soll. Unterstützte Werte:
|
— |
|
Dateiname der zu kopierenden Datei. |
— |
|
Verzeichnis auf dem lokalen Ansible-Steuerknoten. |
— |
|
Verzeichnis auf dem Remote-Gerät. |
— |
Das file_copy
Modul meldet eine erfolgreiche Übertragung, wenn das Modul die Datei in das Zielverzeichnis kopiert und die Prüfsumme der kopierten Datei mit der Prüfsumme der Originaldatei übereinstimmt. In einigen Fällen ist die Übertragung erfolgreich, aber das Modul meldet, dass die Aufgabe fehlgeschlagen ist, weil die Prüfsummen nicht übereinstimmen. Dies kann passieren, wenn die Datei während der Übertragung beschädigt wird. Es kann auch passieren, wenn Sie eine große Protokolldatei übertragen, die häufig aktualisiert wird. Wenn die Datei in diesem Fall während der Übertragung aktualisiert wird, kann die übertragene Datei geringfügig von der Originaldatei abweichen, was zu einer Abweichung der Prüfsumme führt.
Dateien vom Remote-Gerät übertragen
Sie können das juniper.device.file_copy
Modul verwenden, um eine Datei von einem Junos-Gerät auf den Ansible-Steuerungsknoten zu kopieren. Sie können z. B. die Konfigurationsdatei oder eine Protokolldatei regelmäßig auf einem Gerät archivieren. Um eine Datei vom Remote-Gerät zu übertragen, geben Sie action: get
an.
Im folgenden Playbook wird die Meldungsprotokolldatei von jedem Gerät in der Bestandslistengruppe in ein hostspezifisches Verzeichnis auf dem Ansible-Steuerungsknoten übertragen.
--- - name: Archive the messages log file hosts: junos connection: local gather_facts: false vars: host_log_dir: "logs/{{ inventory_hostname }}" tasks: - name: Create the log directory for the host ansible.builtin.file: path: "{{ host_log_dir }}" state: directory - name: Copy the log file from remote device juniper.device.file_copy: action: get file: messages local_dir: "{{ host_log_dir }}" remote_dir: /var/log
Wenn Sie das Playbook ausführen, wird für jeden Host in der Bestandslistengruppe ein logs/hostname -verzeichnis erstellt. Das Playbook kopiert dann die Meldungsprotokolldatei von jedem Remotehost in das jeweilige Zielverzeichnis für diesen Host. Obwohl die Kopieraufgabe für alle Hosts fehlgeschlagen zu sein scheint, ist die Dateiübertragung tatsächlich erfolgreich. Das Junos-Gerät aktualisiert ständig die Protokolldatei für Meldungen . In diesem Fall aktualisiert das Junos-Gerät die Protokolldatei während der Übertragung. Dies hat zur Folge, dass der Prüfsummenvergleich zwischen der lokalen Datei und der Remote-Datei fehlschlägt, da sich die ursprüngliche und die kopierte Datei geringfügig unterscheiden.
user@ansible-cn:~$ ansible-playbook ansible-pb-archive-logs.yaml PLAY [Archive the messages log file] ********************************************** TASK [Create the log directory for the host] ************************************** ok: [r3] ok: [r2] ok: [r1] TASK [Copy the log file from remote device] *************************************** fatal: [r2]: FAILED! => {"changed": false, "msg": "Transfer failed (different MD5 between local and remote) 0b36d9e93cfd523b79eee5927ed42b68 | 3ea1421a5f68476c853180213df96686"} fatal: [r3]: FAILED! => {"changed": false, "msg": "Transfer failed (different MD5 between local and remote) 7bac31566e5ec8da16d2a199dda628a6 | 40acb378a5e2b7aeacda3eb0337b5bec"} fatal: [r1]: FAILED! => {"changed": false, "msg": "Transfer failed (different MD5 between local and remote) 7566d1efa73b50081dfee04aa4dbde57 | 2fce0d8a7272fe7e528786dade8cbe1f"} PLAY RECAP ************************************************************************ r1 : ok=1 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0 r2 : ok=1 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0 r3 : ok=1 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
Wenn Sie das Protokollverzeichnis überprüfen, wird das Meldungsprotokoll für jeden Host archiviert.
user@ansible-cn:~$ ls -l logs/* logs/r1: total 452 -rw-rw-r-- 1 user admin 459462 Sep 10 21:10 messages logs/r2: total 368 -rw-rw-r-- 1 user admin 373848 Sep 10 21:10 messages logs/r3: total 368 -rw-rw-r-- 1 user admin 374433 Sep 10 21:10 messages
Dateien auf das Remote-Gerät übertragen
Sie können das juniper.device.file_copy
Modul verwenden, um eine Datei vom Ansible-Steuerungsknoten auf ein Junos-Gerät zu kopieren. Um die Datei auf das Remote-Gerät zu übertragen, geben Sie action: put
an.
Im folgenden Playbook wird das Skript bgp.slax vom Ansible-Steuerungsknoten auf jeden Host in der angegebenen Bestandslistengruppe kopiert. Das Skript wird aus dem Verzeichnis scripts innerhalb des Playbook-Verzeichnisses in das Verzeichnis /var/db/scripts/op auf dem Junos-Gerät kopiert.
--- - name: Copy script to the Junos device hosts: junos connection: local gather_facts: false tasks: - name: Copy a local script to the Junos device juniper.device.file_copy: action: put file: bgp.slax local_dir: scripts remote_dir: /var/db/scripts/op