当前位置: 首页 > news >正文

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 auxgrep 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

模块使用技巧

  1. 查看模块文档:使用 ansible-doc 模块名 命令查看详细文档,例如 ansible-doc yum
  2. 模块参数:大多数模块都有 state 参数,常用值包括 present(存在)、absent(不存在)、started(启动)等
  3. 条件执行:结合 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'
http://www.dtcms.com/a/362120.html

相关文章:

  • 【Axure高保真原型】表格增删改查(含下拉列表)
  • Swift 解法详解:LeetCode 368《最大整除子集》
  • SQL Server从入门到项目实践(超值版)读书笔记 25
  • 使用 Google OR-Tools 轻松解决复杂优化问题(如排程优化)
  • HarvardX TinyML小笔记2(番外3:数据工程)
  • Node.js版本管理工具 || 全配置安装
  • Claude AI 因编写勒索软件和开展勒索活动而被滥用
  • Agent落地元年:谁在成为最坚实的土壤?
  • 【前端】跨域
  • 懒加载详细讲解
  • 在Linux系统上第一次创建java项目并运行
  • `[特殊字符]LeetCode每日一题 1792. 最大平均通过率(打卡第一天)`
  • 在 React Native 层禁止 iOS 左滑返回(手势返回/手势退出)
  • Unity 串口通讯2 硬件SDK 开发[数据监听,按键监听]
  • 人工智能——课程考核
  • Python OpenCV图像处理与深度学习:Python OpenCV图像几何变换入门
  • 线程池发生了异常该怎么处理?
  • Groovy 的核心语法
  • 计算机视觉与深度学习 | 传统图像处理技术的未来发展前景分析
  • 算法练习——169.多数元素
  • 焦耳热技术助力顶刊研究:薄层质子交换膜实现高效水电解制氢
  • 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)第八章知识点问答(18题)
  • 在工业质检中,机器视觉与人工检测的决策依据
  • Java类加载机制
  • 亚马逊云代理商:如何选择适合的AWS EC2实例类型?
  • ARM-SPI屏幕案例
  • 1. 叙述与命题
  • 【开题答辩全过程】以 基于JSP的养生网站设计与实现为例,包含答辩的问题和答案
  • 在JAVA中Mybatis的使用
  • GitHub每日最火火火项目(9.1)