Ansible 模块详解:高效管理你的 IT 基础设施

本篇文章将讲一下ansible中模块相关问题。

1. 什么是模块

1.1 定义

模块是 Ansible 的核心执行单元,指代一个小型程序,专门用于执行某一类操作,如管理文件、安装软件包、配置服务等。

1.2 特点

  • 模块在远程主机上执行任务并返回结果。

  • 提供大量内置模块,同时支持自定义模块开发。

  • 易用性高,模块参数采用关键字-值的形式,清晰直观。

1.3 模块执行原理

  • 主控机通过 SSH 将模块代码和参数传输到被控主机。

  • 模块在被控主机上执行指定操作。

  • 返回操作结果给主控机。

2 查看模块相关命令

在ansible中,有非常多的模块,你不需要记住每个模块的详细用法,需要使用时可以通过ansible-doc来查看手册。

复制代码
# 列出所有可用模块
ansible-doc -l

# 查看某个模块的详细信息
ansible-doc 模块名

# -s参数可以更人性化得输出帮助
ansible-doc -s 模块名

2. 常用模块分类

2.1 文件管理模块

模块 功能描述
file 管理文件和目录属性(权限、所有权、符号链接等)。
copy 将本地文件复制到远程主机。
fetch 从远程主机下载文件到主控机。
template 使用 Jinja2 模板动态生成文件,并部署到远程主机。
unarchive 解压远程主机或从主控机传输的压缩文件

创建目录并设置权限

复制代码
- name: 创建目录并设置权限
  file:
    path: /var/www/app
    state: directory
    owner: www
    group: www
    mode: '0755'

复制文件到目标主机

复制代码
- name: 复制文件到目标主机
  copy:
    src: /path/to/local/file.conf  # 源主机文件路径
    dest: /etc/myapp/file.conf  # 目标文件路径
    owner: root  # 属主
    group: root  # 属组
    mode: '0644'

使用模板动态生成配置文件

复制代码
- name: Deploy configuration using a template
  template:
    src: templates/nginx.conf.j2
    dest: /etc/nginx/nginx.conf

2.2 软件包管理模块

模块 功能描述
yum 在基于 RedHat 的系统上安装、更新和删除软件包。
apt 在基于 Debian 的系统上安装、更新和删除软件包。
dnf 用于支持 DNF 包管理的系统(如 CentOS 8)
package 跨平台的软件包管理模块,会自动选择合适的管理工具。

使用 yum 模块安装 Nginx

复制代码
- name: Install Nginx using yum
  yum:
    name: nginx
    state: present

升级所有软件包

复制代码
- name: Upgrade all packages using apt
  apt:
    upgrade: dist

2.3 系统用户管理模块

模块 功能描述
user 创建、修改和删除系统用户
group 创建、修改和删除用户组

创建一个用户并加入指定组

复制代码
- name: Create a deploy user
  user:
    name: deploy
    state: present
    groups: sudo

创建用户组

复制代码
- name: Create a developers group
  group:
    name: developers
    state: present

2.4 服务管理模块

模块 功能描述
service 启动、停止、重启和启用服务
systemd 管理 systemd 服务的启动、状态等

启动并启用服务

复制代码
- name: Start and enable Nginx
  service:
    name: nginx
    state: started
    enabled: true

重启服务

复制代码
- name: Restart Nginx
  systemd:
    name: nginx
    state: restarted

3 使用临时命令方式调用模块

1. 测试主机连通性

复制代码
ansible all -m ping

2. 创建目录

复制代码
ansible all -m file -a "path=/data state=directory mode=0755"

3. 删除文件

复制代码
ansible all -m file -a "path=/data/file.txt state=absent"

4. 复制文件到目标节点

复制代码
ansible all -m copy -a "src=/path/to/local/file dest=/path/to/remote/file owner=root group=root mode=0644"

5. 创建定时任务

复制代码
ansible all -m cron -a "name='backup job' minute=0 hour=1 job='/usr/local/bin/backup.sh'"

6. 启动服务

复制代码
ansible all -m service -a "name=httpd state=started"

7. 停止服务

复制代码
ansible all -m service -a "name=httpd state=stopped"

8. 重启服务

复制代码
ansible all -m systemd -a "name=nginx state=restarted"

9. 安装软件包(CentOS/RHEL)

复制代码
ansible all -m yum -a "name=httpd state=present"

10. 删除软件包(CentOS/RHEL)

复制代码
ansible all -m yum -a "name=httpd state=absent"

11. 安装软件包(Ubuntu/Debian)

复制代码
ansible all -m apt -a "name=nginx state=present update_cache=yes"

12. 删除软件包(Ubuntu/Debian)

复制代码
ansible all -m apt -a "name=nginx state=absent"

13. 检查系统运行时间

复制代码
ansible all -m command -a "uptime"

14. 创建文件并写入内容

复制代码
ansible all -m shell -a "echo 'Hello World' > /tmp/hello.txt"

15. 运行本地脚本文件

复制代码
ansible all -m script -a "/path/to/local/script.sh"

16. 开放防火墙端口

复制代码
ansible all -m firewalld -a "port=80/tcp permanent=true state=enabled"

17. 添加 iptables 规则

复制代码
ansible all -m iptables -a "chain=INPUT protocol=tcp destination_port=22 jump=ACCEPT"

18. 禁用 SELinux

复制代码
ansible all -m selinux -a "state=disabled"

19. 创建 MySQL 用户

复制代码
ansible all -m mysql_user -a "name=myuser password=mypassword priv=*.*:ALL state=present"

20. 打印变量

复制代码
ansible all -m debug -a "msg='The value of my_var is {{ my_var }}'"
相关推荐
Sleepy MargulisItG10 小时前
【Linux网络编程】TCP Socket
linux·网络·tcp/ip
Watermelo61710 小时前
【前端实战】从 try-catch 回调到链式调用:一种更优雅的 async/await 错误处理方案
前端·javascript·网络·vue.js·算法·vue·用户体验
Andre_BWM999210 小时前
跨境电商防关联技术实践:美客多自养号环境搭建(指纹浏览器/IP隔离/支付合规)
网络·网络协议·tcp/ip
网硕互联的小客服11 小时前
cdnfly节点到源服务器配置内网IP不生效怎么办
运维·服务器
倔强的石头10611 小时前
Linux 进程深度解析(三):调度算法、优先级调整与进程资源回收(wait与waitpid)
linux·服务器·算法
元气满满-樱11 小时前
ansible-hoc 模块使用
运维·ansible
hh.h.11 小时前
无网络也能用!Flutter+开源鸿蒙构建轻量级应急通信系统
网络·flutter·开源
南山nash11 小时前
Ansible安装使用详细教程
ansible
ice_bird11 小时前
Ansible 一键部署k8s1.28配置完整版
kubernetes·ansible
橘子真甜~11 小时前
C/C++ Linux网络编程14 - 传输层TCP协议详解(保证可靠传输)
linux·服务器·网络·网络协议·tcp/ip·滑动窗口·拥塞控制