在Ansible Playbook的实际使用中,大家常说的“命令”其实指的是各类功能模块(Module),这些模块是Playbook的核心组成单元,最大的特点是具备幂等性:如果目标系统已经处于预期状态,模块执行时会直接跳过操作,不会重复执行导致异常。下面整理几类生产环境最常用的模块,附带基础使用示例。

一、命令执行类模块
这类模块用于直接在远程主机执行命令,适合没有对应专用模块的场景,属于兜底方案。
1. command模块
最基本的命令执行模块,不支持shell特性(比如管道、重定向),适合执行简单命令。
- name: 执行简单命令查看系统版本
hosts: all
tasks:
- name: 运行cat命令查看系统版本文件
command: cat /etc/os-release2. shell模块
支持shell特性,适合需要管道、重定向等复杂命令的场景,注意幂等性需要自行保证。
- name: 执行带管道的shell命令
hosts: all
tasks:
- name: 统计当前登录用户数
shell: who | wc -l二、文件管理类模块
用于远程主机的文件、目录创建、修改、删除等操作,自带幂等性。
1. file模块
可创建目录、文件,修改权限、属主属组,也可删除文件或目录。
- name: 创建应用目录并修改权限
hosts: all
tasks:
- name: 创建/data/app目录
file:
path: /data/app
state: directory
mode: '0755'
owner: app
group: app2. copy模块
用于将本地文件复制到远程主机,支持设置权限、属主等属性。
- name: 复制配置文件到远程主机
hosts: all
tasks:
- name: 复制本地nginx配置到远程
copy:
src: ./nginx.conf
dest: /etc/nginx/nginx.conf
mode: '0644'三、软件包与服务管理类模块
用于管理远程主机的软件包安装、服务启停,适配不同Linux发行版。
1. yum/apt模块
yum适配CentOS、RHEL等系统,apt适配Ubuntu、Debian等系统,用于安装、卸载软件包。
- name: 安装nginx服务
hosts: all
tasks:
- name: 使用yum安装nginx
yum:
name: nginx
state: latest2. service模块
用于控制服务的启动、停止、重启、设置开机自启等操作。
- name: 启动并设置nginx开机自启
hosts: all
tasks:
- name: 管理nginx服务状态
service:
name: nginx
state: started
enabled: yes四、用户与权限管理类模块
用于远程主机的用户、用户组创建,权限分配等操作。
1. user模块
创建、修改、删除用户,可设置用户属组、家目录、shell等属性。
- name: 创建应用运行用户
hosts: all
tasks:
- name: 创建app用户
user:
name: app
shell: /sbin/nologin
create_home: no2. authorized_key模块
用于管理用户的SSH公钥,方便实现免密登录配置。
- name: 配置app用户免密登录公钥
hosts: all
tasks:
- name: 添加SSH公钥
authorized_key:
user: app
key: "{{ lookup('file', '/local/path/id_rsa.pub') }}"
state: present以上模块覆盖了大部分日常运维场景,编写Playbook时根据需求选择对应模块即可,不需要记住所有模块的参数,需要时查阅官方文档即可快速上手。