iT邦幫忙

2025 iThome 鐵人賽

DAY 4
0
DevOps

不爆肝學習 Ansible 的短暫30天系列 第 4

Day04 – 透過 Ansible 安裝套件

  • 分享至 

  • xImage
  •  

今日目標

  • 認識 ad-hoc 指令與結構
  • 學會批次安裝套件(跨多台、多作業系統)
  • 會使用 --become 安裝系統套件
  • 會使用 -l/--limit 限縮目標主機

前置準備

  • 設定好機器清單 inventory.ini,且確認每台機器都可以透過 SSH 連線。
  • SSH User 需具備 sudo 權限,因為安裝套件通常會需要較高權限。

ad-hoc 是什麼?

在 Ansible 世界裡,有兩種常見的操作方式:

  1. ad-hoc 指令:一次性的快速任務,用一行指令就能執行。
  2. Playbook:長期維護的自動化腳本,用 YAML 格式描述流程。

今天用 ad-hoc 來做暖身,因為不需撰寫任何 Playbook,並且可以馬上看到結果,也能快速驗證模組參數是否正確。

ad-hoc 指令結構

ansible <pattern> -i inventory.ini \
  -m <module_fqcn> -a "<key=value ...>" \
  [-b|--become] [--ask-become-pass|-K] [-l <limit>] [-f <forks>]
  • pattern:主機或群組 (例如 allwebdb[1:3])。
  • module_fqcn:建議寫完整名稱,如 ansible.builtin.packageansible.builtin.apt
  • -a 參數:模組需要的 key=value 參數。
  • -b/--become:當下指令可以透過 sudo 權限。
  • -K:如果遠端 sudo 需要密碼,加入此參數可以互動輸入。
  • -l/--limit:在已選 pattern 中再限縮目標。
  • -f/--forks:並行連線數(預設 5,可依環境提高如 20)。

安裝套件

這邊可以使用跨作業系統通用的 package 模組 (Ansible 會自動挑對應的套件管理器):

ansible all -i inventory.ini -b -m ansible.builtin.package -a "name=htop,git,curl state=present"

說明:

  • -b 使用 sudo 權限,避免因為權限問題導致無法安裝。
  • state=present 表示若未安裝則安裝,已安裝則不動,具有冪等性。

若各位是 Ubuntu/Debian 使用者,可以直接使用 apt 模組:

ansible all -i inventory.ini -b -m ansible.builtin.apt -a "name=htop,git,curl state=present update_cache=yes"

若各位是 RHEL/CentOS/AlmaLinux/Rocky 使用者,可以直接使用 dnf 模組:

ansible all -i inventory.ini -b -m ansible.builtin.dnf -a "name=htop,git,curl state=present"

另外可以用 setup 模組查看每台機器的套件管理器:

ansible all -i inventory.ini -m ansible.builtin.setup -a 'filter=ansible_pkg_mgr'

💡 小提醒:某些發行版可能找不到 btop/htop,請確認套件名稱是否存在該發行版的軟體庫 (RHEL 系列可能需要 EPEL)。

驗證結果

用 ad-hoc 直接驗證是否能執行或找到指令:

ansible all -i inventory.ini -m ansible.builtin.command -a 'htop --version'

ansible all -i inventory.ini -m ansible.builtin.shell -a 'command -v htop'

只對部分主機操作

  • 直接用群組/主機樣式取代 all
ansible web -i inventory.ini -b -m ansible.builtin.package -a "name=htop state=present"
  • 或使用 -l/--limit 在既有 pattern 上再限縮:
ansible all -i inventory.ini -l web -b -m ansible.builtin.package -a "name=htop state=present"

常見疑難排解

  • 權限不足:加上 -b (需要 sudo),若 sudo 要密碼,再加 -K
  • 套件找不到:確認套件名稱與發行版相符,必要時啟用額外軟體庫 (如 EPEL)。
  • apt 需要更新索引:在 apt 模組加 update_cache=yes
  • 大量主機速度慢:提高並行連線數 -f 20 (請視環境調整)。

作業練習時間

又來到了今天的重頭戲了,大家來試試看以下的練習吧:

  1. 用 ad-hoc 指令安裝 btop 到你的所有主機上 (記得 -b)。
  2. 只對 web 群組安裝 htop,並使用 -l web 或直接把 pattern 設為 web
  3. 不登入主機,改用 ad-hoc 驗證安裝是否成功(例如 command -v btop)。
  4. 同時安裝多個常用工具(如 wget,git,curl),並把 -f 調大觀察速度差異。

明日預告

今天學會用 ad-hoc 指令安裝套件,明天來學學怎麼批次修改設定檔案


上一篇
Day 03 – 認識 Inventory
系列文
不爆肝學習 Ansible 的短暫30天4
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言