news 2026/3/22 13:59:31

Ansible ——核心模块

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ansible ——核心模块

Ansible ——核心模块


文章目录

  • Ansible ——核心模块
  • 前言
  • Ansible 完整知识体系
    • 一、Ansible 概述与运行机制
      • 1. 核心定义与优势
      • 2. 核心组成
      • 3. 工作机制
    • 二、Ansible 环境安装与配置
      • 1. 环境示例
      • 2. 安装步骤(CentOS 7 系统)
      • 3. 核心目录结构
      • 4. 关键配置操作
        • (1)主机清单(hosts 文件)
        • (2)免密 SSH 配置(核心,避免每次输入密码)
        • (3)ansible.cfg 关键配置(避坑必备)
    • 三、Inventory 主机清单与变量配置
      • 1. 变量作用
      • 2. 常用核心变量
      • 3. 变量配置示例
        • (1)主机变量(单个被控端专属配置)
        • (2)组变量(组内所有被控端统一配置)
    • 四、Ansible 核心模块示例
      • 1. command 模块(远程执行命令,不支持管道/重定向)
        • 示例命令
      • 2. shell 模块(远程执行命令,支持 Shell 特性)
        • 示例命令
      • 3. cron 模块(管理远程主机计划任务)
        • 示例命令
      • 4. user 模块(管理远程主机系统用户)
        • 示例命令
      • 5. group 模块(管理远程主机用户组)
        • 示例命令
      • 6. copy 模块(复制本地文件到远程,或直接写入内容)
        • 示例命令
      • 7. file 模块(管理文件属性、创建/删除文件/链接)
        • 示例命令
      • 8. hostname 模块(修改远程主机名)
        • 示例命令
      • 9. ping 模块(检测被控端连通性)
        • 示例命令
      • 10. yum 模块(管理远程主机 RPM 软件包)
        • 示例命令
      • 11. service 模块(管理远程主机系统服务)
        • 示例命令
      • 12. script 模块(远程执行管理端本地 Shell 脚本)
        • 示例命令
      • 13. setup 模块(收集被控端系统信息,即 Facts)
        • 示例命令
    • 五、关键注意事项与总结
      • 1. 核心命令格式
      • 2. 实操避坑要点
  • 总结

前言

在云计算与大数据时代,运维工作早已告别 “单机手动操作” 的模式,自动化、集中化、模块化成为运维效率提升的核心关键词。Ansible 作为一款由 Python 编写的开源自动化运维工具,凭借 “无需被控端客户端、基于 SSH 协议通信、配置简洁灵活” 等核心优势,迅速成为运维领域的主流选择,广泛应用于批量部署、配置管理、任务编排等场景。

Ansible 完整知识体系

一、Ansible 概述与运行机制

1. 核心定义与优势

Ansible 是一款面向类 Unix 系统的自由开源自动化运维工具,由 Python 编写,与 SaltStack、Puppet、Chef 相比,核心优势如下:

  • 轻量级:被控端无需安装客户端,仅依赖 SSH 协议通信
  • 配置简洁:支持 YAML 和 Jinja2 模板语言,任务编排直观
  • 集中化管理:主从模式,仅需在管理端安装即可管控多节点
  • 扩展性强:支持 API 自定义模块(Python 开发),兼容云计算、大数据平台
  • 无状态执行:模块推送至被控端执行后自动删除,无残留文件

2. 核心组成

组件功能描述
Ansible核心引擎,负责任务调度、节点通信与模块分发
Modules执行具体操作的核心单元,含内置模块(如 ping、yum)和自定义模块
Plugins补充功能模块,包括连接插件(SSH 通信)、邮件插件、日志插件等
Playbooks剧本文件,以 YAML 格式定义多任务编排、依赖关系与状态管理
Inventory主机清单,记录被控端的 IP、分组、SSH 连接参数等配置
Roles模块化管理复杂 Playbook,支持任务复用、外部变量加载,有严格目录结构要求

3. 工作机制

  1. 管理端通过 SSH 协议与被控端建立连接
  2. 将指定模块(如 yum、copy)推送到被控端
  3. 被控端执行模块指令,生成执行结果
  4. 执行完成后,模块自动删除,结果反馈至管理端
  5. 可结合 SVN 等版本控制工具管理自定义模块与 Playbook

二、Ansible 环境安装与配置

1. 环境示例

节点类型IP 示例角色职责
管理端192.168.10.23安装 Ansible,执行自动化任务
被控端192.168.10.14/15接收管理端指令,执行具体操作

2. 安装步骤(CentOS 7 系统)

# 1. 安装 EPEL 源(解决依赖包获取问题)yuminstall-y epel-release# 2. 安装 Ansible 核心程序yuminstall-y ansible

3. 核心目录结构

/etc/ansible/ ├── ansible.cfg # 全局配置文件(关键参数可修改,如禁用主机密钥检查) ├── hosts # 主机清单(必配,定义被控端分组与连接信息) └── roles/ # 公共角色目录(存放可复用的 Role 模块)

4. 关键配置操作

(1)主机清单(hosts 文件)

支持分组、端口指定、主机范围匹配,基础配置示例:

# 基础分组配置 [webservers] # 网站服务器组 192.168.10.14 # 单个被控端 IP 192.168.10.1[2:5] # 范围匹配(192.168.10.12-192.168.10.15) 192.168.10.16:2222 # 非默认 SSH 端口(冒号后指定端口) [dbservers] # 数据库服务器组 db-[a:f].example.org # 字母匹配(db-a 至 db-f 共 6 台主机) # 组嵌套配置(父组包含子组) [nginx] 192.168.10.20-22 [apache] 192.168.10.30-33 [webs:children] # webs 组包含 nginx 和 apache 子组 nginx apache
(2)免密 SSH 配置(核心,避免每次输入密码)
# 1. 管理端生成 SSH 密钥(一路回车,设置空密码)ssh-keygen -t rsa# 2. 推送公钥到被控端(两种方式)# 方式一:手动输入被控端密码(适合少量节点)ssh-copy-id root@192.168.10.14# 方式二:sshpass 自动输入密码(适合批量部署)sshpass -p'被控端root密码'ssh-copy-id root@192.168.10.14
(3)ansible.cfg 关键配置(避坑必备)
[defaults] host_key_checking = False # 禁用 SSH 主机密钥交互(解决 yes/no 弹窗) timeout = 10 # 设置 SSH 连接超时时间(默认 10 秒) [ssh_connection] ssh_args = -o ControlMaster=auto -o ControlPersist=60s # 保持连接复用,提升效率

三、Inventory 主机清单与变量配置

1. 变量作用

通过变量统一配置被控端连接参数(如 SSH 用户名、端口),避免重复编写,支持主机变量、组变量、全局变量。

2. 常用核心变量

变量名含义说明
ansible_host被控端 IP 地址(当主机名无法解析时使用)
ansible_portSSH 连接端口(默认 22,非默认需指定)
ansible_userSSH 登录用户名(如 root、admin)
ansible_passwordSSH 登录密码(未使用免密时配置)
ansible_ssh_private_key_file私钥文件路径(免密登录时指定)
ansible_become是否提升权限(如 sudo,值为 yes/no)
ansible_become_method权限提升方式(sudo/su/runas)
ansible_become_user提升后的目标用户(如 root)
ansible_become_password权限提升密码(如 sudo 密码)

3. 变量配置示例

(1)主机变量(单个被控端专属配置)
[webservers] 192.168.10.14 ansible_port=22 ansible_user=root ansible_password=abc1234
(2)组变量(组内所有被控端统一配置)
[webservers:vars] # webservers 组所有节点生效 ansible_user=root ansible_password=abc1234 [all:vars] # 所有被控端全局生效 ansible_port=22

四、Ansible 核心模块示例

每个模块均提取文档原生示例,附加参数解释、执行逻辑和应用场景,兼顾理论与实操。

1. command 模块(远程执行命令,不支持管道/重定向)

示例命令
ansible all -mcommand-a"chdir=/home ls ./"

注释

  • all:目标对象(所有被控端,可替换为组名webservers、IP192.168.10.14
  • chdir=/home:执行命令前先切换到/home目录(command 模块核心参数)
  • ls ./:实际执行的命令(列出当前目录内容)
  • 核心逻辑:在所有被控端的/home目录下执行ls命令,不支持|(管道)、>(重定向)等 Shell 特性
  • 适用场景:简单无复杂语法的远程命令执行(如查看日期、目录列表)

2. shell 模块(远程执行命令,支持 Shell 特性)

示例命令
ansible dbservers -m shell -a'echo 123456 | passwd --stdin test'

注释

  • dbservers:目标组(仅对数据库服务器组执行)
  • echo 123456:生成密码字符串(123456)
  • |:管道符(Shell 特性,command 模块不支持,这是选择 shell 模块的核心原因)
  • passwd --stdin test:通过标准输入给test用户设置密码(批量修改用户密码常用)
  • 核心逻辑:给dbservers组所有被控端的test用户统一设置密码为 123456,利用 Shell 管道符实现批量操作
  • 适用场景:需要管道、重定向、变量解析等 Shell 特性的复杂命令

3. cron 模块(管理远程主机计划任务)

示例命令
ansible webservers -mcron-a'minute="*/1" job="/bin/echo helloworld" name="test crontab"'

注释

  • webservers:目标组(仅对 web 服务器组执行)
  • minute="*/1":执行频率(每分钟执行 1 次,*表示所有单位,*/n表示每隔 n 单位)
  • job="/bin/echo helloworld":计划任务执行的命令(输出 helloworld)
  • name="test crontab":计划任务名称(唯一标识,后续删除需用此名称)
  • state=present:默认参数(可省略),表示「添加」计划任务(删除用state=absent
  • 核心逻辑:给所有 web 服务器添加每分钟执行 1 次的计划任务,任务名为test crontab
  • 补充删除命令:ansible webservers -m cron -a 'name="test crontab" state=absent'

4. user 模块(管理远程主机系统用户)

示例命令
ansible dbservers -m user -a'name="test01" uid=306 system=yes group=mysql'

注释

  • name="test01":用户名(必选参数,创建/删除用户的核心标识)
  • uid=306:指定用户 UID(唯一标识,避免与现有用户冲突)
  • system=yes:创建为系统用户(系统用户 UID 通常小于 1000,默认no为普通用户)
  • group=mysql:指定用户基本组为mysql(需提前通过 group 模块创建该组)
  • 核心逻辑:在dbservers组所有被控端创建系统用户test01,UID=306,归属于mysql
  • 补充删除命令:ansible dbservers -m user -a 'name="test01" state=absent'(加remove=yes可删除家目录)

5. group 模块(管理远程主机用户组)

示例命令
ansible dbservers -m group -a'name=mysql gid=306 system=yes'

注释

  • name=mysql:用户组名称(必选参数,创建/删除组的核心标识)
  • gid=306:指定组 GID(组唯一标识,避免与现有组冲突)
  • system=yes:创建为系统组(系统组 GID 通常小于 1000,默认no为普通组)
  • 核心逻辑:在dbservers组所有被控端创建系统组mysql,GID=306
  • 适用场景:先创建专属组(如数据库组、web 组),再将用户加入组,实现权限隔离

6. copy 模块(复制本地文件到远程,或直接写入内容)

示例命令
ansible dbservers -m copy -a'src=/etc/fstab dest=/opt/fstab.bak owner=root mode=640'

注释

  • src=/etc/fstab:管理端本地源文件路径(需确保文件存在)
  • dest=/opt/fstab.bak:被控端目标路径(绝对路径,文件名为fstab.bak
  • owner=root:远程文件属主为root用户
  • mode=640:远程文件权限为640(所有者可读可写,组可读,其他无权限)
  • 核心逻辑:将管理端的/etc/fstab文件复制到所有数据库服务器的/opt目录备份,同时设置属主和权限
  • 补充写入内容:ansible dbservers -m copy -a 'content="helloworld" dest=/opt/hello.txt'(无需本地文件,直接写入字符串)

7. file 模块(管理文件属性、创建/删除文件/链接)

示例命令
ansible dbservers -mfile-a'path=/opt/fstab.link src=/opt/fstab.bak state=link'

注释

  • path=/opt/fstab.link:被控端目标路径(要创建的软链接文件)
  • src=/opt/fstab.bak:被链接的原始文件(需已存在于被控端)
  • state=link:操作类型(创建软链接,state=touch创建空文件,state=absent删除文件)
  • 核心逻辑:在所有数据库服务器上创建/opt/fstab.link软链接,指向/opt/fstab.bak文件
  • 其他用法:修改文件权限ansible dbservers -m file -a 'path=/opt/fstab.bak mode=644'

8. hostname 模块(修改远程主机名)

示例命令
ansible dbservers -mhostname-a"name=mysql01"

注释

  • name=mysql01:被控端新主机名(唯一参数)
  • 核心逻辑:将dbservers组所有被控端的主机名统一修改为mysql01(实际部署建议按节点区分,如mysql01/mysql02
  • 注意:修改后需重新登录被控端才能看到新主机名,Ansible 后续通信不受影响

9. ping 模块(检测被控端连通性)

示例命令
ansible all -mping

注释

  • all:目标对象(所有被控端)
  • 无额外参数:ping 模块仅检测 SSH 连通性,无需附加参数
  • 核心逻辑:通过 SSH 协议测试管理端与被控端的连接状态,成功返回"ping": "pong"
  • 适用场景:验证 Ansible 环境是否配置成功(实操核心测试命令)

10. yum 模块(管理远程主机 RPM 软件包)

示例命令
ansible webservers -m yum -a'name=httpd'

注释

  • webservers:目标组(仅对 web 服务器组执行)
  • name=httpd:要安装的软件包名称(httpd 即 Apache 服务)
  • state=present:默认参数(可省略),表示「安装」软件包(卸载用state=absent
  • 核心逻辑:给所有 web 服务器批量安装 httpd 服务,自动处理依赖关系
  • 卸载命令:ansible webservers -m yum -a 'name=httpd state=absent'

11. service 模块(管理远程主机系统服务)

示例命令
ansible webservers -mservice-a'enabled=true name=httpd state=started'

注释

  • enabled=true:设置服务开机自启(false为关闭自启)
  • name=httpd:要管理的服务名称(需与系统服务名一致)
  • state=started:服务操作(started启动、stopped停止、restarted重启)
  • 核心逻辑:给所有 web 服务器启动 httpd 服务,并设置开机自启
  • 查看状态:ansible webservers -a 'systemctl status httpd'(默认使用 command 模块)

12. script 模块(远程执行管理端本地 Shell 脚本)

示例命令
# 第一步:管理端创建脚本并加执行权限vimtest.sh#!/bin/bashecho"hello ansible from script">/opt/script.txtchmod+x test.sh# 第二步:远程执行脚本ansible webservers -m script -a'test.sh'

注释

  • 前提:管理端需提前创建脚本并赋予执行权限(chmod +x test.sh
  • test.sh:管理端本地脚本路径(相对路径或绝对路径均可)
  • 核心逻辑:将管理端的test.sh脚本推送到所有 web 服务器,自动执行,结果写入被控端/opt/script.txt
  • 适用场景:批量执行复杂 Shell 逻辑(无需在被控端单独创建脚本)

13. setup 模块(收集被控端系统信息,即 Facts)

示例命令
ansible dbservers -m setup -a'filter=*ipv4'

注释

  • dbservers:目标组(仅收集数据库服务器信息)
  • filter=*ipv4:筛选参数(仅返回 IPv4 相关信息,*为通配符)
  • 核心逻辑:收集dbservers组所有被控端的 IPv4 地址信息,不筛选则返回完整系统信息(CPU、内存、网卡、系统版本等)
  • 适用场景:获取被控端配置信息(如批量获取 IP、系统版本),为后续任务编排提供数据支持

五、关键注意事项与总结

1. 核心命令格式

ansible<目标>-m<模块>-a<参数># 完整格式ansible<目标>-a<命令># 省略 -m 时,默认使用 command 模块
  • 目标:可指定 IP、组名(如webservers)、all(所有被控端)

2. 实操避坑要点

  • 免密认证失败:检查被控端/root/.ssh目录权限为 700,authorized_keys文件权限为 600,且sshd_config开启PermitRootLogin yes
  • 主机密钥弹窗:修改ansible.cfghost_key_checking = False,全局禁用密钥检查
  • 模块选择原则:简单命令用command,需 Shell 特性用shell,批量操作(装软件、改服务)用对应功能模块(yum/service

总结

Ansible 凭借「无客户端、SSH 通信、配置简洁、模块化」等特点,成为自动化运维首选工具,适用于批量部署、配置管理、任务编排等场景,尤其适合中小规模集群的集中化管理。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/21 16:59:53

金融合规监控规则设计实战(20年专家经验倾囊相授)

第一章&#xff1a;金融合规 Agent 的监控规则概述在现代金融科技架构中&#xff0c;金融合规 Agent 作为实时监控与风险识别的核心组件&#xff0c;承担着确保交易行为符合监管要求的关键职责。该 Agent 通过预设的监控规则集&#xff0c;对资金流动、用户操作及交易模式进行自…

作者头像 李华
网站建设 2026/3/15 12:12:25

DeepSeek 模型本地化部署:安全存储与高效增量更新综合方案

摘要随着大型语言模型 (Large Language Models, LLMs) 如 DeepSeek 在自然语言处理、内容生成、代码辅助等领域的广泛应用&#xff0c;将其部署在离线或私有环境的需求日益增长。离线部署不仅能满足数据隐私和安全合规的要求&#xff0c;还能提供更低的推理延迟和更高的服务稳定…

作者头像 李华
网站建设 2026/3/15 20:34:17

springboot师生健康信息管理系统(11520)

有需要的同学&#xff0c;源代码和配套文档领取&#xff0c;加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码&#xff08;前后端源代码SQL脚本&#xff09;配套文档&#xff08;LWPPT开题报告&#xff09;远程调试控屏包运行 三、技术介绍 Java…

作者头像 李华
网站建设 2026/3/15 11:23:31

边缘AI Agent实时推理难题全解析(低延迟高能效方案大公开)

第一章&#xff1a;边缘AI Agent推理速度的核心挑战在边缘计算环境中部署AI Agent时&#xff0c;推理速度面临多重技术瓶颈。受限的硬件资源、实时性要求以及模型复杂度之间的矛盾&#xff0c;使得优化推理性能成为关键课题。硬件资源限制 边缘设备通常配备低功耗处理器&#x…

作者头像 李华
网站建设 2026/3/22 0:18:28

cmake_第二章 CMake基础语法_set(),缓存变量set(CACHE)

文章目录第二章 CMake基础语法2.4 cmake定义普通变量set()2.4.1 set() 语法格式2.4.2 变量类型和作用域详解2.4.3 CMake运行脚本 .cmake 文件2.4.4 编译 .cmake脚本-- cmake -P选项2.4.5 使用-D选项定义变量2.4.6 普通变量总结2.5 CMake定义缓存变量set(CACHE)2.5.1 缓存变量语…

作者头像 李华
网站建设 2026/3/15 14:38:43

python-flask-django基于BS架构的小区物业管理系统设计与实现_rsr3ei73

文章目录系统截图项目技术简介可行性分析主要运用技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;系统截图 python-flask-djangoBS_rsrei73 架构的小区物业管理系统设计与实现基于 项目技术简介 Python…

作者头像 李华