Ansible 入门到实战:自动化运维的瑞士军刀

一、Ansible 是什么?

Ansible 是一款由 Python 编写的开源自动化运维工具,用于配置管理、应用部署、任务编排等场景。

✅ 核心优势:

  • 无需客户端:基于 SSH 协议,轻量级;

  • 易学易用:YAML 语法,上手快;

  • 功能强大:支持模块、剧本、变量、模板等;

  • 社区活跃:被 Red Hat 收购,生态成熟。


二、Ansible 架构与核心组件

组件 说明
Ansible 核心引擎
Modules 执行具体任务的模块(如 copy、yum、service)
Playbooks YAML 编写的任务剧本
Inventory 主机清单,定义目标主机与分组
Plugins 扩展功能,如连接、日志、邮件等

三、快速部署 Ansible

1️⃣ 环境示例

角色 IP
管理端 192.168.10.100
被控端 192.168.10.101
被控端 192.168.10.102

2️⃣ 安装 Ansible

复制代码
yum install -y epel-release
yum install -y ansible

3️⃣ 配置主机清单

编辑 /etc/ansible/hosts

复制代码
[webservers]
192.168.10.101

[dbservers]
192.168.10.102

4️⃣ 设置 SSH 免密登录

复制代码
生成管理机的密钥
ssh-keygen -t rsa 

生成被管理机器的密钥
sshpass -p '123456' ssh-copy-id root@192.168.10.101
sshpass -p '123456' ssh-copy-id root@192.168.10.102

当然也可以手动生成密钥

复制代码
ssh-copy-id root@192.168.10.101
ssh-copy-id root@192.168.10.102

四、常用模块速查表

表格

复制

模块 功能说明
command 执行命令(不支持管道)
shell 执行命令(支持管道、重定向)
copy 拷贝文件或内容
file 设置文件属性、创建链接、删除
user 用户管理
group 用户组管理
yum 安装/卸载软件包
service 启动/停止/设置服务
cron 添加/删除计划任务
script 在远程执行本地脚本
setup 收集主机信息(facts)
ping 测试主机连通性

五、模块使用示例

shell模块

复制代码
在/home 目录下所有的文件和文件夹
ansible all -m command -a "chdir=/home ls ./"

给dbserve(192.168.10.102)的test用户命设置密码
ansible dbservers -m shell -a 'echo 123456 | passwd --stdin test'

获取dbserve(192.168.10.102)中的ifconfig中的ens33的第二行的第二个
ansible dbservers -m shell -a 'echo $(ifconfig ens33 | awk "NR==2 {print $2}") | cut -d " " -f2'
ansible dbservers -m shell -a 'echo $(ifconfig ens33 | awk "NR==2 {print \$2}")'

cron模块

复制代码
ansible webservers -m cron -a 'minute="*/1" job="/bin/echo helloworld" name="test crontab"'

webserver下面的状态

复制代码
ansible webservers -a 'crontab -l'

复制代码
ansible webservers -m cron -a 'name="test crontab" state=absent'

usr模块

复制代码
ansible dbservers -m user -a 'name="test01"'

复制代码
ansible dbservers -m command -a 'tail -2 /etc/passwd'

复制代码
ansible dbservers -m user -a 'name="test01" state=absent'

group 模块

复制代码
ansible dbservers -m group -a 'name=mysql gid=306 system=yes'

复制代码
ansible dbservers -a 'tail /etc/group'
ansible dbservers -m user -a 'name=test01 uid=306 system=yes group=mysql'	#将test01用户添加到mysql组中
ansible dbservers -a 'tail /etc/passwd'
ansible dbservers -a 'id test01'

copy 模块

复制代码
ansible dbservers -m copy -a 'src=/etc/fstab dest=/opt/fstab.bak owner=root mode=640'
ansible dbservers -a 'ls -l /opt'
ansible dbservers -a 'cat /opt/fstab.bak'

复制代码
ansible dbservers -m copy -a 'content="helloworld" dest=/opt/hello.txt'
ansible dbservers -a 'cat /opt/hello.txt'

file 模块

复制代码
ansible dbservers -m file -a 'owner=test01 group=mysql mode=644 path=/opt/fstab.bak'
复制代码
ansible dbservers -m file -a 'path=/opt/fstab.link src=/opt/fstab.bak state=link'
复制代码
ansible dbservers -m file -a "path=/opt/abc.txt state=touch"			#创建一个文件
ansible dbservers -m file -a "path=/opt/abc.txt state=absent"			#删除一个文件

hostname 模块

复制代码
ansible dbservers -m hostname -a "name=mysql01"

yum 模块

复制代码
ansible webservers -m yum -a 'name=httpd'					#安装服务
复制代码
ansible webservers -m yum -a 'name=httpd state=absent'		#卸载服务

service/systemd 模块

复制代码
ansible webservers -a 'systemctl status httpd'
复制代码
ansible webservers -m service -a 'enabled=true name=httpd state=started' # 开启httpd

script 模块

复制代码
vim test.sh
#!/bin/bash
echo "hello ansible from script" > /opt/script.txt

chmod +x test.sh
ansible webservers -m script -a 'test.sh'
ansible webservers -a 'cat /opt/script.txt'

setup 模块

复制代码
ansible webservers -m setup				#获取mysql组主机的facts信息
复制代码
ansible dbservers -m setup -a 'filter=*ipv4'    #使用filter可以筛选指定的facts信息

补充

复制代码
# 内存信息
ansible all -m setup -a "filter=ansible_memory_mb*"

# 具体内存信息
ansible all -m setup -a "filter=ansible_memory_mb"
ansible all -m setup -a "filter=ansible_swaptotal_mb"

# 磁盘信息
ansible all -m setup -a "filter=ansible_devices*"
ansible all -m setup -a "filter=ansible_mounts*"

# 具体磁盘信息
ansible all -m setup -a "filter=ansible_devices"
ansible all -m setup -a "filter=ansible_mounts"
ansible all -m setup -a "filter=ansible_device_links"

# 网络信息
ansible all -m setup -a "filter=ansible_*ipv4*"
ansible all -m setup -a "filter=ansible_default_ipv4*"

# 具体 IP 信息
ansible all -m setup -a "filter=ansible_default_ipv4"
ansible all -m setup -a "filter=ansible_all_ipv4_addresses"

六、Inventory 高级用法

1️⃣ 分组与范围

复制代码
[webservers]
192.168.10.10[1:5]

[dbservers]
db-[a:f].example.org

2️⃣ 主机变量

复制代码
192.168.10.101 ansible_port=22 ansible_user=root ansible_password=abc1234

3️⃣ 组变量

复制代码
[webservers:vars]
ansible_user=root
ansible_password=abc1234

4️⃣ 组嵌套

复制代码
[nginx]
192.168.10.20

[apache]
192.168.10.30

[webs:children]
nginx
apache

七、总结与建议

  • 初学者:先掌握常用模块 + Inventory + Playbook 基础;

  • 进阶者:学习角色(Role)、变量、模板、条件判断;

  • 生产环境:使用 Ansible Tower/AWX 做可视化与权限管理;

  • 最佳实践:保持 Playbook 简洁、复用性强,使用 Git 做版本控制。

相关推荐
贝锐2 分钟前
多设备可视化管理,向日葵屏幕墙如何塑造IT设备管理范式
运维·远程工作
门思科技8 分钟前
主流 LoRaWAN 网络服务器深度对比:ThinkLink、TTS、ChirpStack、Loriot 与 Actility 选型指南
运维·服务器·网络
GIS数据转换器1 小时前
基于GIS的智慧旅游调度指挥平台
运维·人工智能·物联网·无人机·旅游·1024程序员节
一路随云000002 小时前
基于Unity YooAsset自动化资源管理框架,附源代码
运维·自动化
数数科技的数据干货3 小时前
从爆款到厂牌:解读游戏工业化的业务持续增长道路
运维·数据库·人工智能
2501_915921433 小时前
iOS崩溃日志深度分析与工具组合实战,从符号化到自动化诊断的完整体系
android·ios·小程序·uni-app·自动化·cocoa·iphone
深耕AI7 小时前
【完整教程】宝塔面板FTP配置与FileZilla连接服务器
运维·服务器
AI智域边界 - Alvin Cho9 小时前
Bloomberg、LSEG 与 MCP 缺口:为什么尚未发布完整的 MCP 服务器,以及多智能体系统如何解決这问题
运维·服务器
_OP_CHEN10 小时前
Linux网络编程:(七)Vim 编辑器完全指南:从入门到精通的全方位实战教程
linux·运维·服务器·编辑器·vim·linux生态·linux软件
Maple_land10 小时前
第1篇:Linux工具复盘上篇:yum与vim
linux·运维·服务器·c++·centos