在自動化運維的過程中,我們經常需要從遠程主機下載文件到本地,以便進行分析或備份。Ansible
的fetch
模塊正是為了滿足這一需求而設計的,它可以幫助我們輕松地從遠程主機獲取文件,并將其保存到本地指定的位置。在這篇文章中,我們將詳細探討如何使用fetch模塊,以及它在實際工作中的常見應用場景。
目錄
- 📝fetch模塊的功能
- 📝fetch模塊的常用參數
- 📝`fetch`模塊的基本用法
- ??從遠程主機抓取文件
- ??抓取多個文件
- ??保留原有目錄結構
- ??文件不存在時的錯誤處理
- ??使用checksum驗證文件
- 📝fetch模塊的高級用法
- ??下載目錄
- ??使用`register`和`debug`輸出文件信息
- 📝總結
- 推薦閱讀
📝fetch模塊的功能
fetch
模塊的主要功能是從目標主機(被管理主機)中抓取指定的文件或目錄,并將其下載到控制主機的指定路徑下。常見的應用場景包括:
-
從遠程主機抓取日志文件進行分析。
-
從遠程主機下載配置文件進行備份。
-
抓取診斷數據或錯誤信息供后續處理。
📝fetch模塊的常用參數
參數 | 描述 | 類型 | 必填 |
---|---|---|---|
src | 遠程主機上的文件或目錄路徑 | 字符串 | 是 |
dest | 本地控制主機保存文件的路徑 | 字符串 | 是 |
flat | 是否保留目錄結構,yes 保留,no 不保留 | 布爾值 | 否 |
fail_on_missing | 如果遠程文件不存在,是否報錯,yes 或no | 布爾值 | 否 |
validate_checksum | 是否驗證文件的checksum ,默認yes | 布爾值 | 否 |
📝fetch
模塊的基本用法
??從遠程主機抓取文件
最簡單的用法是從遠程主機上抓取一個文件并保存到本地控制主機上。
ansible node1 -m fetch \
-a "src=/var/log/auth.log dest=/tmp/"
在這個例子中,我們從
node1
組中的主機上指定要下載的文件路徑(通過src
參數),然后指定這些文件在本地控制主機上的保存位置(通過dest
參數)。文件將會被下載并保存到你指定的目錄中。
執行完上述的命令后,輸出如下圖的結果:
??抓取多個文件
如果需要抓取多個文件,建議采用playbook
的方式,并利用with_items
循環來輕松實現對多個文件的處理。這種方式既靈活又高效。
- name: 從遠程主機抓取多個日志文件hosts: node1tasks:- name: 從遠程主機抓取多個日志文件ansible.builtin.fetch:src: "{{ item }}"dest: /tmp/logs/with_items:- /var/log/mail.log- /var/log/syslog.2.gz
然后你只需要運行下面的命令:
ansible-playbook download.yml
執行完上述命令后,輸出如下結果:
??保留原有目錄結構
默認情況下,fetch
模塊會將遠程文件下載到目標路徑下,是保留原有的目錄結構。如果需要不保留遠程主機的目錄結構,可以使用flat: yes
參數。
ansible node1 -m fetch \
-a "src=/var/log/syslog dest=/tmp/ flat=yes"
此時,文件syslog
將不被保留原有的目錄結構,并下載到/tmp/syslog
。如下圖所示:
??文件不存在時的錯誤處理
如果遠程文件不存在,fetch
模塊會報錯。可以通過fail_on_missing: no
來防止錯誤拋出,控制任務繼續執行。
ansible node1 -m fetch \
-a "src=/var/log/nonexistent.log dest=/tmp/logs/ fail_on_missing=no"
??使用checksum驗證文件
在抓取文件時,可以啟用validate_checksum
來驗證文件的checksum,確保文件的完整性。
ansible node1 -m fetch \
-a "src=/var/log/syslog dest=/tmp/logs/ validate_checksum=yes"
📝fetch模塊的高級用法
??下載目錄
fetch
模塊不僅支持下載單個文件,還支持下載整個目錄。
ansible node1 -m fetch \
-a "src=/home/user/data/ dest=/tmp/data_backup/"
此命令會將遠程主機上的/home/user/data/
目錄及其內容遞歸下載到本地控制主機的/tmp/data_backup/
目錄中,保留目錄結構。
??使用register
和debug
輸出文件信息
可以使用register
來保存抓取的文件信息,并通過debug
模塊查看抓取的文件路徑等詳細信息。
- name: 從遠程主機抓取文件并保存結果hosts: node1tasks:- name: 從遠程主機抓取文件并保存結果ansible.builtin.fetch:src: /var/log/syslogdest: /tmp/log/register: fetched_file- name: 輸出抓取的文件信息ansible.builtin.debug:var: fetched_file
📝總結
Ansible的fetch
模塊為我們提供了簡單高效的遠程文件下載解決方案。無論是抓取單個文件、多個文件,還是整個目錄,它都能輕松完成任務。通過結合使用flat
、fail_on_missing
等參數,我們可以靈活應對各種場景。掌握fetch
模塊,將極大提高我們的自動化運維效率。
推薦閱讀
- 告別手動編輯:如何用Python快速創建Ansible hosts文件?
- 一分鐘學會Ansible cron模塊,高效管理你的定時任務
- 打造更安全的Linux系統:玩轉PAM配置文件
- Ansible實戰:如何正確選擇command和shell模塊?
- 運維效率倍增!Ansible Copy 模塊必知必會操作
- 如何在Ansible中輕松實現復雜SSH跳轉?這個參數搞定