Ansible常用模块总结
本文介绍了Ansible常用模块及其应用场景,涵盖命令执行、系统管理、文件操作、软件管理、信息收集和配置编辑六大类。核心模块包括command/shell执行命令、user/group管理用户、copy/fetch传输文件、apt/yum安装软件、setup收集信息、lineinfile修改配置等。通过模块组合可实现自动化部署、批量配置管理等运维任务,显著提升工作效率。文章还提供了Nginx部署和
Ansible常用模块
在运维自动化领域,Ansible凭借其无代理架构、简洁语法和强大的模块生态,成为越来越多企业的首选工具。它通过模块化设计,将复杂的运维操作封装为可复用的组件,让批量部署、配置管理、服务运维等工作变得高效可控。
一、核心基础模块
这类模块是Ansible的基石,覆盖日常运维中最常见的操作场景,上手简单且实用性极强。
1. 命令执行模块:远程操作核心
- command模块:默认模块,用于执行简单的系统命令,不支持管道符和环境变量替换。
# 查看远程主机磁盘信息 ansible web -m command -a "df -h" # 切换目录后执行命令 ansible web -m command -a "chdir=/tmp ls -l" - shell模块:支持管道符、重定向等Shell特性,适合复杂命令执行。
# 统计CPU核心数 ansible web -m shell -a "cat /proc/cpuinfo | grep 'model name' | wc -l" # 自定义环境变量并使用 ansible web -m shell -a 'export HAHA=NIHAO; echo $HAHA' - scripts模块:批量执行本地脚本,自动传输脚本到远程主机并执行。
# 执行本地脚本到远程主机 ansible web -m script -a "/local/path/test.sh param1"
2. 系统管理模块:用户与服务管控
- user模块:管理远程主机用户,支持创建、删除、修改权限等操作。
# 创建系统用户webapp,禁止登录 ansible web -m user -a "name=webapp system=yes uid=10086 shell=/sbin/nologin home=/tmp/webapp" # 删除用户并清理家目录 ansible web -m user -a "name=webapp state=absent remove=yes" - group模块:管理用户组,与user模块配合使用。
# 创建用户组webap ansible web -m group -a "name=webap system=yes gid=10088" - service模块:管理系统服务,支持启动、停止、重启和开机自启配置。
# 启动nginx并设置开机自启 ansible web -m service -a "name=nginx state=started enabled=yes" # 重启服务 ansible web -m service -a "name=nginx state=restarted" - cron模块:管理定时任务,支持创建、禁用、删除计划任务。
# 每分钟同步时间 ansible web -m cron -a "name='sync time' minute=*/1 job='/usr/sbin/ntpdate time1.aliyun.com'" # 禁用定时任务 ansible web -m cron -a "name='sync time' disabled=yes"
二、文件管理模块:配置与数据同步
文件操作是运维的高频场景,这类模块支持本地与远程主机间的文件传输、权限配置等核心需求。
1. copy模块:文件上传与配置
用于将本地文件/目录复制到远程主机,支持权限设置、备份等功能。
# 复制本地文件到远程主机
ansible web -m copy -a "src=/local/path/nginx.conf dest=/etc/nginx/nginx.conf owner=root group=root mode=644"
# 直接生成文件内容
ansible web -m copy -a "content='test content\n' dest=/tmp/test.txt"
# 复制时备份原有文件
ansible web -m copy -a "src=/local/path/config.conf dest=/etc/config.conf backup=yes"
2. fetch模块:远程文件下载
从远程主机拉取文件到本地,自动按主机IP分类存储,适合批量收集日志或配置文件。
# 拉取远程主机日志文件
ansible web -m fetch -a "src=/var/log/auth.log dest=/local/backup"
# 拉取多个文件(先压缩再拉取)
ansible web -m shell -a "tar zcf /tmp/logs.tar.gz /var/log/*.log"
ansible web -m fetch -a "src=/tmp/logs.tar.gz dest=/local/backup"
3. file模块:文件属性管理
用于创建文件/目录、修改权限、创建链接等操作,功能全面且灵活。
# 创建目录
ansible web -m file -a "path=/data/web state=directory mode=755"
# 创建文件
ansible web -m file -a "path=/data/config.txt state=file"
# 创建软链接
ansible web -m file -a "src=/etc/fstab dest=/data/fstab.link state=link"
# 删除文件/目录
ansible web -m file -a "path=/data/old_dir state=absent"
4. unarchive模块:解压与部署
支持本地或远程压缩包的解压,常用于应用部署场景。
# 解压本地压缩包到远程主机
ansible web -m unarchive -a "src=/local/path/nginx.tar.gz dest=/usr/local/src"
# 解压远程主机上的压缩包
ansible web -m unarchive -a "src=/tmp/redis.tar.gz dest=/usr/local/ copy=no"
三、软件管理模块:包管理自动化
自动处理软件的安装、升级、卸载,适配不同Linux发行版,无需手动执行yum/apt命令。
1. apt模块:Debian/Ubuntu系统
# 更新软件源
ansible ubuntu -m apt -a "update_cache=yes"
# 安装软件
ansible ubuntu -m apt -a "name=nginx,mariadb-server state=present"
# 卸载软件并清理依赖
ansible ubuntu -m apt -a "name=redis-server state=absent autoremove=yes purge=yes"
2. yum模块:RHEL/CentOS/Rocky系统
# 安装nginx
ansible rocky -m yum -a "name=nginx state=present"
# 升级软件到最新版
ansible rocky -m yum -a "name=nginx state=latest"
# 从rpm包安装
ansible rocky -m yum -a "name=https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix-6.0.rpm state=present"
四、信息收集模块:系统状态监控
1. setup模块:主机信息采集
自动收集远程主机的系统信息(CPU、内存、网卡、操作系统等),支持过滤特定信息。
# 收集所有系统信息
ansible all -m setup
# 过滤内存信息
ansible all -m setup -a "filter=ansible_memtotal_mb"
# 过滤IP地址信息
ansible all -m setup -a "filter=ansible_all_ipv4_addresses"
2. debug模块:调试与信息输出
在Playbook中打印变量或调试信息,是排错的必备工具。
# 打印自定义消息
ansible web -m debug -a 'msg="hello ansible"'
# 调试变量
ansible web -m debug -a 'var=ansible_fqdn'
五、配置编辑模块:文件内容修改
无需手动登录主机,直接修改配置文件内容,支持单行替换或批量修改。
1. lineinfile模块:单行编辑
适合修改配置文件中的特定行,如修改端口、开关功能等。
# 替换nginx监听端口
ansible web -m lineinfile -a "path=/etc/nginx/nginx.conf regexp='listen' line='listen 8080'"
# 删除特定行
ansible web -m lineinfile -a "path=/etc/fstab regexp='swap' state=absent"
2. replace模块:批量替换
支持正则表达式的批量替换,适合修改配置文件中的多个匹配项。
# 注释所有包含default的行
ansible web -m replace -a "path=/etc/fstab regexp='(defau.*)' replace='#\1'"
# 取消注释
ansible web -m replace -a "path=/etc/fstab regexp='#(defau.*)' replace='\1'"
六、实战场景:模块组合使用示例
场景1:批量部署nginx服务
# 1. 安装nginx
ansible web -m apt -a "name=nginx state=present"
# 2. 复制配置文件
ansible web -m copy -a "src=/local/nginx.conf dest=/etc/nginx/nginx.conf"
# 3. 创建网站目录
ansible web -m file -a "path=/var/www/html state=directory owner=www-data"
# 4. 生成首页内容
ansible web -m copy -a "content='<h1>Welcome to Ansible</h1>' dest=/var/www/html/index.html"
# 5. 启动服务并设置开机自启
ansible web -m service -a "name=nginx state=started enabled=yes"
场景2:批量创建用户并配置免密登录
# 1. 创建用户组
ansible all -m group -a "name=devops state=present"
# 2. 创建用户并加入组
ansible all -m user -a "name=devops group=devops shell=/bin/bash create_home=yes"
# 3. 复制公钥实现免密登录
ansible all -m copy -a "src=/root/.ssh/id_rsa.pub dest=/home/devops/.ssh/authorized_keys mode=600 owner=devops group=devops"
七、模块使用技巧与注意事项
- 幂等性优先:优先使用官方模块而非shell命令,确保重复执行不会产生异常(如file模块创建目录时不会报错)。
- 权限控制:敏感操作需使用
-b(提权)参数,结合sudo配置实现权限管理。 - 错误处理:使用
ignore_errors忽略非关键任务失败,保证整体流程继续执行。 - 模块文档:通过
ansible-doc 模块名查看详细用法,如ansible-doc copy。 - 版本兼容:不同Ansible版本可能存在模块参数差异,建议使用
ansible --version确认版本后参考对应文档。
总结
Ansible的模块生态覆盖了运维工作的方方面面,从简单的命令执行到复杂的应用部署,都可以通过模块组合快速实现。掌握本文介绍的核心模块后,你可以轻松应对批量主机管理、自动化部署、配置同步等常见场景。在实际使用中,建议结合Playbook将模块按业务场景封装,进一步提升运维效率和可维护性。
更多推荐
所有评论(0)