[student@master ansible]$ ansible-galaxy collection install http://ansible.example.com/materials/community-general-6.3.0.tar.gz -p collections/##將第三方模塊下載到collections下
[student@master ansible]$ ansible-galaxy collection install http://ansible.example.com/materials/ansible-posix-1.5.1.tar.gz -p collections/
Ansible 常用模塊歸納總結
以下是 Ansible 常用模塊的表格化歸納,包含模塊核心參數(可理解為 “子命令”)及其作用說明:
模塊分類 | 模塊名稱 | 核心參數及作用 | 典型用法示例 | |
---|---|---|---|---|
系統管理 | service | - name : 服務名稱 - state : 服務狀態(started/stopped/restarted/reloaded) - enabled : 是否開機自啟(yes/no) | yaml - service: name: httpd state: restarted enabled: yes | |
user | - name : 用戶名 - uid : 用戶 ID - group : 主組 - groups : 附加組 - home : 家目錄 - shell : 登錄 shell - state : 狀態(present/absent) | yaml - user: name: student uid: 1000 groups: wheel state: present | ||
group | - name : 組名 - gid : 組 ID - state : 狀態(present/absent) - system : 是否系統組(yes/no) | yaml - group: name: webdev gid: 2000 state: present | ||
軟件包管理 | yum | - name : 包名(支持 * 通配符) - state : 狀態(present/absent/latest) - update_cache : 是否更新緩存(yes/no) - enablerepo : 臨時啟用的倉庫 | yaml - yum: name: httpd state: latest enablerepo: epel | |
apt | - name : 包名 - state : 狀態(present/absent/latest) - update_cache : 是否更新緩存 - upgrade : 是否升級(yes/dist) | yaml - apt: name: nginx state: present update_cache: yes | ||
文件操作 | file | - path : 路徑 - state : 類型(file/directory/link/absent) - mode : 權限(如 ‘0755’) - owner : 所有者 - group : 所屬組 - src : 鏈接源路徑(state=link 時) | yaml - file: path: /webdev state: directory mode: '0755' group: webdev | |
copy | - src : 本地源路徑 - dest : 遠程目標路徑 - mode : 權限 - owner : 所有者 - content : 直接指定文件內容 - backup : 是否備份原有文件 | yaml - copy: content: "test" dest: /tmp/file mode: '0644' | ||
template | - src : 模板文件路徑 - dest : 目標路徑 - vars : 模板變量 - lstrip_blocks : 去除左側空白 | yaml - template: src: config.j2 dest: /etc/config vars: port: 8080 | ||
命令執行 | command | - free_form : 要執行的命令(直接寫在模塊后) - creates : 若文件存在則不執行 - removes : 若文件不存在則不執行 | yaml - command: /usr/bin/backup.sh creates: /backup/complete | |
shell | - 同command ,但支持管道、重定向等 shell 特性 - executable : 指定 shell 解釋器 | ```yaml - shell: "ps aux | grep httpd > /tmp/httpd.log"``` | |
存儲管理 | parted | - device : 磁盤設備路徑 - number : 分區編號 - part_start : 分區起始位置 - part_end : 分區結束位置 - state : 狀態(present/absent) | yaml - parted: device: /dev/sdb number: 1 part_end: 1000MiB state: present | |
mount | - path : 掛載點 - src : 設備 / UUID - fstype : 文件系統類型 - state : 狀態(mounted/unmounted/present) | yaml - mount: path: /data src: UUID=xxx fstype: xfs state: mounted | ||
lvg | - vg : 卷組名 - pvs : 物理卷列表 - state : 狀態(present/absent) - size : 卷組大小 | yaml - lvg: vg: datavg pvs: /dev/sdb1 state: present | ||
lvol | - vg : 所屬卷組 - lv : 邏輯卷名 - size : 大小(如 800M/10G) - state : 狀態(present/absent) | yaml - lvol: vg: datavg lv: datalv size: 10G | ||
網絡管理 | yum_repository | - name : 倉庫 ID - baseurl : 倉庫地址 - enabled : 是否啟用(yes/no) - gpgcheck : 是否校驗 GPG(yes/no) - gpgkey : GPG 密鑰地址 | yaml - yum_repository: name: epel baseurl: http://epel.mirror enabled: yes | |
firewalld | - service : 服務名(如 http) - port : 端口(如 80/tcp) - zone : 區域 - permanent : 是否永久生效 - state : 狀態(enabled/disabled) | yaml - firewalld: service: http permanent: yes state: enabled | ||
定時任務 | cron | - name : 任務描述(唯一標識) - user : 執行用戶 - minute/hour/day/month/weekday : 時間設定 - job : 要執行的命令 - state : 狀態(present/absent) | yaml - cron: name: "backup" user: root hour: 3 job: "/backup.sh" | |
其他常用 | debug | - var : 要顯示的變量 - msg : 自定義消息 - verbosity : 顯示級別 | yaml - debug: var: hostvars[inventory_hostname]['ansible_ip_addresses'] | |
setup | - filter : 過濾 facts(如 ‘ansible_*_mb’) - gather_subset : 收集子集(如 ‘!all,!min,network’) | yaml - setup: filter: ansible_distribution |
文件內容操作 | lineinfile | - path : 目標文件路徑 - line : 要確保存在的行內容 - regexp : 匹配要替換的行(正則表達式) - state : 狀態(present/absent) - backrefs : 是否使用反向引用(yes/no) - insertafter : 在匹配行之后插入 - insertbefore : 在匹配行之前插入 | yaml - lineinfile: path: /etc/httpd/conf/httpd.conf regexp: '^DocumentRoot' line: 'DocumentRoot "/www"' |
---|---|---|---|
replace | - path : 目標文件路徑 - regexp : 要匹配的正則表達式 - replace : 替換后的內容 - before : 僅處理匹配此正則的行之前的內容 - after : 僅處理匹配此正則的行之后的內容 - backup : 是否備份原文件(yes/no) | yaml - replace: path: /etc/sysctl.conf regexp: '^net.ipv4.ip_forward = 0' replace: 'net.ipv4.ip_forward = 1' | |
文件傳輸 | fetch | - src : 遠程主機上的源文件路徑(必須是文件,不能是目錄) - dest : 本地存儲路徑(文件會保存到 dest/主機名/src 結構下) - flat : 是否禁用默認目錄結構(yes/no,需指定完整文件名) - validate_checksum : 是否校驗文件完整性 | yaml - fetch: src: /var/log/messages dest: ./logs/ flat: no |
Ansible 提供了豐富的模塊來完成各種管理任務,以下是常用模塊的分類總結,涵蓋系統管理、軟件包管理、文件操作等多個方面。
一、系統管理模塊
1. service
模塊
用于管理系統服務的啟動、停止、重啟和啟用狀態。
- name: 確保 httpd 服務啟動并設置開機自啟service:name: httpdstate: startedenabled: yes
2. systemd
模塊
專門用于管理 systemd 服務,功能更強大。
- name: 重啟并啟用 docker 服務systemd:name: dockerstate: restartedenabled: yesdaemon_reload: yes # 重新加載 systemd 配置
3. user
模塊
管理系統用戶賬號。
- name: 創建名為 student 的用戶user:name: studentuid: 1000group: usershome: /home/studentshell: /bin/bashstate: present
4. group
模塊
管理系統用戶組。
- name: 創建 webdev 組group:name: webdevgid: 2000state: present
二、軟件包管理模塊
1. yum
模塊 (RHEL/CentOS)
用于管理 RPM 系 Linux 發行版的軟件包。
- name: 安裝 httpd 并確保是最新版本yum:name: httpdstate: latest
2. apt
模塊 (Debian/Ubuntu)
用于管理 Debian 系 Linux 發行版的軟件包。
- name: 安裝 nginx 并確保已安裝apt:name: nginxstate: presentupdate_cache: yes # 相當于 apt update
3. package
模塊 (通用)
通用的軟件包管理模塊,會根據系統自動選擇合適的包管理器。
- name: 安裝 python3package:name: python3state: present
三、文件操作模塊
1. file
模塊
用于管理文件、目錄和符號鏈接。
- name: 創建 /webdev 目錄并設置權限file:path: /webdevstate: directorymode: '0755'owner: rootgroup: webdev- name: 創建符號鏈接file:src: /webdevdest: /var/www/html/webdevstate: link
2. copy
模塊
將本地文件復制到遠程主機。
- name: 復制配置文件到遠程主機copy:src: ./local_config.confdest: /etc/app/config.confmode: '0644'owner: rootgroup: root
3. template
模塊
使用 Jinja2 模板生成文件并傳輸到遠程主機(支持變量替換)。
- name: 使用模板生成 nginx 配置文件template:src: ./nginx.conf.j2dest: /etc/nginx/nginx.confmode: '0644'vars:server_port: 8080
四、命令執行模塊
1. command
模塊
在遠程主機執行命令(不通過 shell 解釋器,不支持管道和環境變量)。
- name: 查看系統版本command: cat /etc/redhat-releaseregister: os_version # 將輸出結果保存到變量- name: 顯示系統版本debug:var: os_version.stdout
2. shell
模塊
在遠程主機通過 shell 解釋器執行命令(支持管道、重定向等 shell 特性)。
- name: 查找 /var/log 下 24 小時內修改的日志文件shell: find /var/log -type f -mtime -1 -name "*.log"register: recent_logs
3. script
模塊
在遠程主機執行本地腳本。
- name: 在遠程主機執行本地腳本script: ./cleanup.sh
五、存儲管理模塊
1. parted
模塊
用于磁盤分區管理。
- name: 創建 1000MiB 的分區parted:device: /dev/sdbnumber: 1part_end: 1000MiBstate: present
2. filesystem
模塊
用于格式化文件系統。
- name: 將分區格式化為 ext4filesystem:fstype: ext4dev: /dev/sdb1
3. mount
模塊
用于管理文件系統掛載。
- name: 掛載分區到 /testdirmount:path: /testdirsrc: /dev/sdb1fstype: ext4state: mounted # 確保掛載并寫入 fstab
4. LVM 相關模塊
lvg
:管理卷組lvol
:管理邏輯卷
- name: 創建卷組 datastoragelvg:vg: datastoragepvs: /dev/sdbstate: present- name: 創建 800M 的邏輯卷 databaselvol:vg: datastoragelv: databasesize: 800M
六、網絡模塊
1. yum_repository
模塊
管理 yum 倉庫配置。
- name: 添加 EPEL 倉庫yum_repository:name: epeldescription: EPEL Repositorybaseurl: https://download.fedoraproject.org/pub/epel/$releasever/$basearch/gpgcheck: yesenabled: yes
2. firewalld
模塊
管理 firewalld 防火墻規則。
- name: 允許 http 服務通過防火墻firewalld:service: httppermanent: yesimmediate: yes # 立即生效state: enabled
七、定時任務模塊
cron
模塊
管理系統定時任務(crontab)。
- name: 添加每 5 分鐘執行的任務cron:name: "echo hello"user: studentminute: "*/5"job: 'echo "hello tarena"'
八、其他常用模塊
1. debug
模塊
用于調試輸出變量信息。
- name: 輸出變量信息debug:var: some_variablemsg: "當前主機是 {{ inventory_hostname }}"
2. setup
模塊
收集遠程主機的 facts 信息(系統信息)。
- name: 收集主機信息setup:register: host_facts- name: 顯示主機 IP 地址debug:var: host_facts.ansible_facts.ansible_default_ipv4.address
模塊使用技巧
- 查看模塊文檔:使用
ansible-doc 模塊名
命令查看詳細文檔,例如ansible-doc yum
- 模塊參數:大多數模塊都有
state
參數,常用值包括present
(存在)、absent
(不存在)、started
(啟動)等 - 條件執行:結合
when
條件判斷,實現根據不同情況執行不同任務
- name: 只在 CentOS 系統上執行yum:name: httpdstate: presentwhen: ansible_facts['distribution'] == 'CentOS'
_facts.ansible_facts.ansible_default_ipv4.address
## 模塊使用技巧1. **查看模塊文檔**:使用 `ansible-doc 模塊名` 命令查看詳細文檔,例如 `ansible-doc yum`
2. **模塊參數**:大多數模塊都有 `state` 參數,常用值包括 `present`(存在)、`absent`(不存在)、`started`(啟動)等
3. **條件執行**:結合 `when` 條件判斷,實現根據不同情況執行不同任務```yaml
- name: 只在 CentOS 系統上執行yum:name: httpdstate: presentwhen: ansible_facts['distribution'] == 'CentOS'