Ansible 常用模块归纳总结
[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'