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

5.Ansible-playbook-模块介绍(知识点补充)

5.(补充)Ansible-playbook模块介绍

playbook含义(回顾)

Playbook(剧本)是 Ansible 的核心功能之一,是一种用 YAML 格式编写的配置文件,用于定义一系列任务(task),实现对远程主机的批量配置、部署、管理等自动化操作。

与临时命令(ansible 命令)相比,Playbook 更适合复杂场景,支持任务编排、条件判断、循环、变量定义等高级功能,且可复用、可版本控制。

playbook基本格式

Playbook 采用 YAML 语法,基本结构由以下几个核心部分组成:

# 示例:一个简单的 Playbook
- name: 这是一个Playbook示例  # Play的名称(可选,用于说明作用)hosts: webservers        # 目标主机/主机组(必填,来自inventory)remote_user: root        # 远程执行用户(可选,默认使用ansible.cfg配置)become: yes              # 是否提权(可选,yes表示使用sudo切换权限)vars:                    # 定义变量(可选)http_port: 80tasks:                   # 任务列表(必填,定义要执行的操作)- name: 安装nginx      # 任务名称(可选,建议填写,便于调试)yum:                 # 模块名称(必填,指定要使用的Ansible模块)name: nginx        # 模块参数(根据模块不同而变化)state: present     # 确保nginx已安装- name: 启动nginx服务service:name: nginxstate: startedenabled: yes       # 设置开机自启

核心字段说明

  • hosts:指定目标主机(必须),可填写主机名、IP 或 inventory 中定义的组名(如 all 表示所有主机)。
  • tasks:任务列表(必须),每个任务用 - name: ... 开头,包含 模块名模块参数
  • remote_user:远程执行的用户(默认使用控制节点当前用户)。
  • become:是否切换到特权用户(如 yes 表示使用 sudo 提权,需配合 become_user: root 指定目标用户)。
  • vars:定义变量,可在任务中通过 {{ 变量名 }} 引用。
  • roles:引用角色(复杂场景使用,用于模块化组织任务)。

常用模块和参数

nsible 提供了数百个模块,覆盖系统管理、软件部署、文件操作等场景,以下是当前学习阶段常用模块和参数:

一、包管理类(软件安装 / 卸载)

用于管理不同 Linux 发行版的软件包,实现软件的安装、卸载和版本控制。

yum 模块

用于 RHEL、CentOS 等基于 RPM 的系统,管理软件包的安装、卸载、更新等操作。

- name: 安装指定版本的nginxyum:name: nginx-1.20.1  # 软件包名,可指定版本state: present      # 状态:present(安装)、absent(卸载)、latest(最新版)update_cache: yes   # 安装前更新缓存,类似yum makecache
apt 模块

用于 Debian、Ubuntu 等基于 Debian 的系统,管理软件包的生命周期。

- name: 安装最新版dockerapt:name: docker.io     # 软件包名称state: latest       # 状态:与yum模块一致update_cache: yes   # 是否执行apt update更新源cache_valid_time: 3600  # 缓存有效期(秒)

二、服务管理类(服务启停 / 自启)

用于控制系统服务的运行状态,包括启动、停止、重启以及设置开机自启等。

service 模块

通用的服务管理模块,适用于大多数系统,可控制服务的运行状态和自启动设置。

- name: 确保nginx启动并开机自启service:name: nginx         # 服务名称state: started      # 状态:started(启动)、stopped(停止)、restarted(重启)、reloaded(重载)enabled: yes        # 是否开机自启:yes(是)、no(否)

三、文件操作类(文件 / 目录 / 内容管理)

处理文件和目录的创建、删除、属性修改,以及文件的传输、同步、解压等操作。

file 模块

管理文件和目录的属性,包括创建、删除、权限设置、所有者修改等。

- name: 创建目录并设置权限file:path: /data/logs    # 文件或目录的路径state: directory    # 类型:directory(目录)、file(文件)、link(软链接)、absent(删除)mode: '0755'        # 权限设置,八进制表示,需加引号owner: www          # 所有者用户名group: www          # 所属组名
copy 模块

将控制节点的本地文件复制到远程节点,并可设置文件权限、所有者等属性。

- name: 复制配置文件到远程copy:src: ./nginx.conf   # 控制节点上的源文件路径dest: /etc/nginx/nginx.conf  # 远程节点的目标路径mode: '0644'        # 远程文件的权限owner: root         # 远程文件的所有者backup: yes         # 是否备份远程节点上的原有文件
template 模块

使用 Jinja2 模板生成远程文件,支持变量替换,适用于动态配置文件的生成。

- name: 生成动态配置文件template:src: ./nginx.conf.j2  # 控制节点上的模板文件(含{{变量}})dest: /etc/nginx/nginx.conf  # 远程节点的目标路径mode: '0644'          # 生成文件的权限variable_start_string: '[[['  # 自定义变量起始符号(默认{{)
synchronize 模块

基于 rsync 工具实现文件的同步,支持控制节点与远程节点之间的双向同步。

- name: 同步本地代码到远程synchronize:src: ./project/     # 源路径(控制节点或远程节点)dest: /opt/project/ # 目标路径(远程节点或控制节点)mode: push          # 同步方向:push(本地到远程)、pull(远程到本地)delete: yes         # 是否删除目标路径中源路径没有的文件
fetch 模块

从远程节点拉取文件到控制节点,通常用于获取日志、配置文件等。

- name: 拉取远程日志到本地fetch:src: /var/log/nginx/access.log  # 远程节点上的文件路径(必须是文件)dest: ./logs/                   # 控制节点上的保存路径(自动创建主机名子目录)flat: yes                       # 是否跳过主机名目录,直接保存到dest
unarchive 模块

解压压缩包,支持本地压缩包上传到远程节点后解压,或直接解压远程 URL 的压缩包。

- name: 从URL下载并解压unarchive:src: https://example.com/app.tar.gz  # 压缩包路径(本地文件或远程URL)dest: /opt/                          # 解压的目标目录remote_src: yes                      # src是否为远程路径:yes(是)、no(否)mode: '0755'                         # 解压后文件的权限
stat 模块

获取文件或目录的状态信息,如是否存在、权限、校验和等,用于条件判断。

- name: 检查文件是否存在stat:path: /etc/nginx/nginx.conf  # 要检查的文件路径get_checksum: yes            # 是否计算文件校验和follow: yes                  # 是否跟随软链接register: file_info            # 将结果保存到变量

四、文件内容修改类(配置文件编辑)

用于精准修改文件内容,包括单行替换、批量替换、插入代码块等,避免手动编辑配置文件。

lineinfile 模块

匹配文件中的特定行并进行替换,或确保某行存在,适用于修改配置文件中的单行配置。

- name: 禁用SELinuxlineinfile:path: /etc/selinux/config  # 目标文件路径regexp: '^SELINUX='       # 匹配行的正则表达式line: 'SELINUX=disabled'  # 替换后的内容state: present            # present(确保行存在)、absent(删除匹配行)
replace 模块

基于正则表达式批量替换文件中的内容,适用于需要全局替换的场景。

- name: 替换nginx端口配置replace:path: /etc/nginx/nginx.conf  # 目标文件路径regexp: 'listen 80;'         # 要匹配的内容(正则表达式)replace: 'listen 8080;'      # 替换后的内容backup: yes                  # 是否备份原文件
blockinfile 模块

在文件中插入或替换一块内容,并通过标记注释标识,便于后续管理。

- name: 插入nginx虚拟主机配置blockinfile:path: /etc/nginx/nginx.conf  # 目标文件路径block: |                     # 要插入的内容块server {listen 80;server_name example.com;}marker: "# {mark} ANSIBLE MANAGED BLOCK"  # 内容块的标记注释state: present               # present(插入)、absent(删除)

五、系统配置类(系统参数 / 安全设置)

用于系统级别的配置,包括防火墙规则、SELinux 设置、磁盘挂载、LVM 管理等。

firewalld 模块

管理 firewalld 防火墙的规则,配置端口、服务的访问权限。

- name: 允许80/tcp端口通过防火墙firewalld:port: 80/tcp              # 端口(或使用service指定服务名,如http)permanent: yes            # 是否永久生效:yes(重启后有效)、no(临时有效)immediate: yes            # 是否立即生效(无需重启firewalld)state: enabled            # enabled(允许)、disabled(拒绝)
sefcontext 模块

管理 SELinux 的安全上下文规则,设置文件或目录的 SELinux 类型。

- name: 设置web目录SELinux类型sefcontext:target: /var/www(/.*)?    # 目标路径(支持通配符)setype: httpd_sys_content_t  # SELinux类型state: present            # present(添加规则)、absent(删除规则)reload: yes               # 是否重载SELinux规则
mount 模块

管理文件系统的挂载点,包括临时挂载和永久挂载(写入 /etc/fstab)。

- name: 挂载/data分区mount:path: /data               # 挂载点路径src: /dev/sdb1            # 设备或分区路径fstype: ext4              # 文件系统类型state: mounted            # mounted(挂载并写入fstab)、unmounted(卸载)、absent(从fstab移除)
filesystem 模块

在磁盘分区上创建文件系统(格式化分区),支持多种文件系统类型。

- name: 格式化分区为xfsfilesystem:fstype: xfs               # 文件系统类型(如ext4、xfs等)dev: /dev/sdb1            # 要格式化的设备路径force: no                 # 是否强制格式化(即使已有文件系统)
lvol 模块

管理 LVM(逻辑卷管理)中的逻辑卷,包括创建、删除、调整大小等。

- name: 创建10G逻辑卷lvol:vg: vg_data               # 卷组名称lv: lv_app                # 逻辑卷名称size: 10G                 # 逻辑卷大小(支持G、M等单位)state: present            # present(创建)、absent(删除)

六、用户与权限类(用户 / 组管理)

用于管理系统用户、组以及数据库用户,设置用户属性和权限。

user 模块

管理系统用户,包括创建、删除用户,设置用户 ID、家目录、所属组等。

- name: 创建www用户user:name: www                 # 用户名uid: 1000                 # 用户IDgroup: www                # 主组groups: wheel,nginx       # 附加组(逗号分隔)home: /home/www           # 家目录路径shell: /bin/bash          # 默认shellstate: present            # present(创建)、absent(删除)
mysql_user 模块

管理 MySQL 数据库中的用户,包括创建、删除用户,设置密码和权限。

- name: 创建MySQL用户mysql_user:name: appuser             # MySQL用户名password: '123456'        # 用户密码host: '%'                 # 允许访问的主机(%表示所有主机)priv: 'appdb.*:ALL'       # 权限设置(数据库.表:权限)state: present            # present(创建)、absent(删除)

七、命令执行类(远程命令 / 脚本)

在远程节点执行命令或脚本,支持简单命令、复杂 shell 命令以及定时任务。

command 模块

在远程节点执行命令,不通过 shell 环境,不支持管道、重定向等 shell 特性。

- name: 查看nginx版本command: nginx -vregister: nginx_version     # 将命令输出保存到变量creates: /etc/nginx         # 若该文件/目录存在,则不执行命令
shell 模块

通过 shell 环境在远程节点执行命令,支持管道、重定向、变量等 shell 特性。

- name: 统计错误日志行数shell: cat /var/log/nginx/error.log | grep -c 'error'register: error_count       # 保存命令输出到变量executable: /bin/bash       # 指定使用的shell
cron 模块

管理远程节点的定时任务(crontab),添加、修改或删除定时任务。

- name: 添加日志清理任务cron:name: "clean logs"        # 定时任务名称minute: "0"               # 分钟(0-59)hour: "3"                 # 小时(0-23)weekday: "0"              # 星期(0=周日,1=周一...6=周六)job: "find /var/log -name '*.log' -mtime +7 -delete"  # 要执行的命令user: root                # 任务所属用户

八、信息收集与调试类(系统信息 / 调试)

用于收集远程节点的系统信息、调试 Playbook,以及测试节点连通性。

setup 模块

收集远程节点的 facts 信息(系统、硬件、网络等信息),用于条件判断或变量引用。

- name: 收集主机IP信息setup:filter: ansible_default_ipv4  # 过滤信息,只收集默认IPv4相关信息register: ip_info               # 保存结果到变量
gather_facts 模块

在 Play 级别控制是否收集 facts 信息,关闭可加快 Playbook 执行速度。

- name: 不收集facts加速执行hosts: webserversgather_facts: no  # yes(默认,收集facts)、no(不收集)tasks:- name: 执行任务debug:msg: "不依赖facts的任务"
debug 模块

输出变量或自定义信息,用于 Playbook 的调试,查看变量值或执行状态。

- name: 打印主机IPdebug:msg: "主机IP: {{ ip_info.ansible_facts.ansible_default_ipv4.address }}"  # 输出自定义消息
ping 模块

测试控制节点与远程节点的连通性,返回 “pong” 表示连通。

- name: 测试主机是否可达ping:  # 无参数,成功返回pong

九、变量与任务组织类(变量管理 / 任务复用)

用于管理 Playbook 中的变量,以及组织和控制任务的执行流程。

vars 模块

在 Play 或任务中定义变量,用于存储常量、配置参数等,可在任务中通过 {{变量名}} 引用。

- name: 定义变量示例hosts: allvars:http_port: 80      # 定义变量http_portapp_name: myapp    # 定义变量app_nametasks:- name: 使用变量debug:msg: "端口: {{ http_port }}"  # 引用变量
include_vars 模块

从外部文件加载变量,实现变量的集中管理,便于维护。

- name: 加载变量文件include_vars:file: ./app_vars.yml  # 变量文件路径name: app_vars        # 为加载的变量添加前缀(可选)
meta 模块

控制 Playbook 的执行流程,如立即执行 handlers、提前结束 Play 等。

- name: 立即执行handlersmeta: flush_handlers  # 立即执行已定义的handlers,不等待当前Play的所有任务完成- name: 结束当前Playmeta: end_play        # 提前终止当前Play的执行

十、其他常用模块

git 模块

从 Git 仓库拉取代码到远程节点,支持指定分支、标签或提交 ID,可更新已有仓库。

- name: 拉取项目代码git:repo: https://github.com/example/project.git  # Git仓库URLdest: /opt/project                            # 远程节点的目标目录version: main                                 # 分支、标签或提交IDupdate: yes                                   # 若目录已存在,是否更新代码
uri 模块

发送 HTTP 或 HTTPS 请求,可用于检查 API 状态、调用接口、下载文件等。

- name: 检查服务健康状态uri:url: http://localhost:8080/health  # 请求的URLmethod: GET                        # HTTP方法(GET、POST等)status_code: 200                   # 预期的状态码,不匹配则任务失败return_content: yes                # 是否返回响应内容

如涉及版权问题,请联系作者处理!!!!!!!!

http://www.dtcms.com/a/331070.html

相关文章:

  • 【Postgresql】实现 PostgreSQL 全量审计日志:记录所有 SQL 操作及来源
  • 【C++】细说继承(2w字详解)
  • ROS机器人云实践案例博客建议和范文-AI版本
  • imx6ull-驱动开发篇24——Linux 中断API函数
  • MATLAB绘制各种心形曲线
  • window显示驱动开发—在混合系统中使用跨适配器资源
  • nginx-集成prometheus监控(k8s)
  • GitHub 热榜项目 - 日榜(2025-08-14)
  • 一、linux内存管理学习(1):物理内存探测
  • 京东商品列表API开发指南
  • OpenCV对椒盐处理后的视频进行均值滤波处理
  • Opencv 边界填充 图像运算 阈值处理 和图像平滑处理
  • 文件上传接口接收不到文件入参
  • 题解:P4777 【模板】扩展中国剩余定理(EXCRT)
  • Qt项目查找依赖库打包
  • IDEA、Pycharm、DataGrip等激活破解冲突问题解决方案之一
  • Springboot项目重启后Session依旧存在
  • Python包性能优化与并发编程:构建高性能应用的核心技术(续)
  • 轻量级开源全文搜索引擎:Manticore Search 入门介绍
  • C++基础(①入门教程)
  • 本地jar导入到本地仓科和远程仓库
  • Maven学习笔记
  • 92、23种设计模式-单例模式
  • 项目日志框架与jar中日志框架冲突 解决
  • 《多级缓存架构设计与实现全解析》
  • 自动化测试|持续集成Git使用详解
  • label studio 服务器端打开+xshell端口转发设置
  • 01数据结构-最短路径Dijkstra
  • 【数据结构入门】
  • 移动机器人底盘在高校科研中的AI智能教育应用