成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Ansible 實戰:如何正確選擇 command 和 shell 模塊?

網絡
在這篇文章中,我們將深入探討 command和shell模塊之間的差異,并通過一些高級案例來展示如何恰當地選擇和使用它們。

在使用Ansible進行自動化運維時,command 和 shell 模塊是我們執行命令的好幫手。雖然它們看起來很相似,但在功能特性和適用場景上其實有著明顯的不同。正確選擇合適的模塊不僅能夠提高任務的效率,還能幫助我們規避一些潛在的風險。在這篇文章中,我們將深入探討 command和shell模塊之間的差異,并通過一些高級案例來展示如何恰當地選擇和使用它們。

一、兩者模塊的區別

特性

commad模塊

shell模塊

解析方式

不使用shell解析

使用完整的shell 解析

支持特性

不支持管道

重定向、管道等shell 功能

安全性

更安全,防止命令注入

存在命令注入風險,需要嚴格驗證輸入

適用場景

執行簡單命令,如ls、mkdir等

執行復雜命令或需要shell功能的場景

二、常見場景及模塊選擇

1. 執行簡單命令

適合場景:執行單一命令,無需復雜的shell功能。推薦模塊:command

示例:在遠程主機上創建目錄

ansible -m  node2 command -a 'mkdir -p /tmp/node1'

以下述命令是通過ad-hoc方式創建,簡單的命令用這種方式很方便。執行成功如所示:

root@ansible:~# ansible   node2 -m  command -a 'mkdir -p /tmp/node2'
192.168.31.102 | CHANGED | rc=0 >>
root@ansible:~# ansible   node2 -m  command -a 'ls  /tmp'
192.168.31.102 | CHANGED | rc=0 >>
....
node2
.....

以下方式通過劇本方式創建:

---
-name:使用command模塊創建目錄
hosts:node2
gather_facts:yes
tasks:
    -name:使用command模塊創建目錄
      command:mkdir-p/tmp/mydir

通過ansible-playbook執行成功,輸出如下圖所示:

2. 使用管道或重定向

適合場景:需要使用shell特性(如管道、重定向)處理復雜邏輯。推薦模塊:shell

示例:統計日志文件中包含 error 的行數

root@ansible:~/test# ansible node2  -m shell -a 'grep 'error' /var/log/dmesg | wc -l'
192.168.31.102 | CHANGED | rc=0 >>
0
---
-name:使用shell模塊統計日志中的錯誤行數
hosts:node2
tasks:
    -name:使用shell模塊統計日志中的錯誤行數
      shell:grep'error'/var/log/messages|wc-l
      register:error_count
    -name:打印錯誤行數
      ansible.builtin.debug:
        msg:"日志中包含的錯誤行數為:{{ error_count.stdout }}"

通過ansible-playbook執行成功,輸出如下圖所示:

3. 動態變量替換

適合場景:需要解析變量或動態生成命令。推薦模塊:shell

示例:獲取當前主機名并打印

---
-name:獲取主機名
hosts:node2
tasks:
    -name:獲取主機名
      ansible.builtin.shell:hostname
      register:hostname_output
    
    -name:打印主機名
      ansible.builtin.debug:
        msg:"當前主機名為:{{ hostname_output.stdout }}"

4. 定期備份數據庫

需求:通過cron任務,每日備份數據庫并壓縮備份文件。

使用 shell 模塊:

ansible node2 -m shell -a \
"mysqldump -u root -p'password' mydatabase | gzip > /backups/mydatabase_$(date +'%Y%m%d').sql.gz"

說明:shell 模塊支持日期命令 $(date),可以動態生成文件名。

5. 清理大文件

需求:刪除 /var/log/ 目錄中超過 100M 的文件。

使用 shell 模塊:

ansible node2 -m shell -a "find /var/log/ -type f -size +100M -exec rm -f {} \;"

說明:find 命令需要結合-exec,只能用shell 模塊完成。

6. 監控服務狀態

需求:檢查遠程主機上的Nginx服務是否正在運行。

使用 command 模塊:

ansible node2 -m command  -a "systemctl is-active nginx"

三、總結

  • 優先使用command模塊:如果命令可以通過 command 模塊實現,優先選擇它以確保安全性。
  • 適時使用shell模塊:當任務需要使用管道、重定向、環境變量或命令替換時,選擇shell模塊。

通過合理選擇和使用command與 shell 模塊,可以高效完成復雜任務,同時確保系統安全性。希望本文的解析與案例能幫助你在Ansible自動化管理中更加得心應手!

責任編輯:趙寧寧 來源: 攻城獅成長日記
相關推薦

2025-01-08 07:38:39

setup模塊Ansible網絡

2024-11-01 10:30:05

2009-11-30 09:40:44

2023-07-21 12:13:50

綜合布線數據中心

2022-11-22 13:00:38

2018-04-04 13:59:22

天線無線通信

2013-01-07 11:38:54

VMware認證

2018-04-20 10:54:52

數據集成數據科學工具

2012-09-17 09:58:02

云集成平臺云集成集成平臺

2021-11-11 14:49:42

人工智能AI

2024-03-28 09:00:00

NoSQL數據庫

2022-11-24 09:55:12

Kubernetes監控

2020-02-04 14:25:29

云遷移云計算云平臺

2018-04-23 14:58:27

大數據

2014-08-18 10:58:20

編程語言編程書籍

2022-07-13 15:03:23

網絡安全數據安全遠程工作

2017-11-09 08:51:28

2009-02-27 14:33:00

服務器軟件企業服務器軟件

2021-08-31 08:00:00

開發軟件框架

2025-01-07 14:42:09

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 在线观看毛片网站 | 成人做爰69片免费观看 | 色婷婷av一区二区三区软件 | 中文字幕国产高清 | 国产激情综合五月久久 | 国产高清av免费观看 | 精品视频在线一区 | 在线观看国产视频 | 亚洲国产成人av好男人在线观看 | av网站免费观看 | 中文字幕国产视频 | 人人人人人爽 | 国产一区二区成人 | 瑟瑟视频在线看 | 久久大全| 日韩中文字幕一区二区 | 毛片大全| 91.com在线观看 | 日韩视频高清 | 国产成人在线播放 | 一区二区三区四区免费观看 | 欧美1区 | 欧美久久久久久久久 | 欧美aaa一级片 | 国产在线精品一区二区三区 | 久久www免费人成看片高清 | 日韩视频在线一区 | 精品久久久久久亚洲精品 | 国产探花在线精品一区二区 | 日本精品久久久久久久 | 免费一级欧美在线观看视频 | 亚洲69p| 国产免费一级片 | 亚洲精品国产电影 | 高清一区二区三区 | 成人午夜高清 | 亚洲人成一区二区三区性色 | 午夜精品久久 | 国产视频不卡一区 | h视频在线免费 | 亚洲免费在线视频 |