自动化运维-ansible的常用模块及参数
一、命令
1、查看系统上安装的所有模块
ansible-doc -l
2、查看模块的帮助文档
ansible-doc 模块名
3、使用临时命令通过模块来执行任务
ansible 受控主机名 -m 模块名 -a '参数'
4、下载模块到集合
[student@master ansible] ansible-galaxy collection install http://ansible.example.com/materials/community-general-6.3.0.tar.gz -p collections/
[student@master ansible] ansible-galaxy collection install http://ansible.example.com/materials/ansible-posix-1.5.1.tar.gz -p collections/
二、常用模块
1、user
模块
- 管理系统用户账户,包括创建、修改、删除用户,以及管理其密码、组、家目录等属性
常用参数 | 作用 |
---|---|
name | 要创建、修改、移除的用户名 |
password | 设置用户密码,此处只能使用加密密码作为值 |
system | 设置为yes,表示创建一个系统用户,只能用于创建,不能用于修改已有用户为系统用户 |
createhome | 创建家目录,或者已有的用户但家目录不存在也会创建,设置为no则不创建家目录 |
home | 指定要创建的家目录路径 |
move_home | 设置为yes,移动到home=的家目录路径 |
uid | 设置用户的uid |
group | 设置用户的primary group |
groups | 设置用户的辅助组 |
shell | 设置用户的shell环境 |
force | 强制删除用户、家目录和邮件列表 |
remove | 删除家目录和邮件列表 |
update_password | user是幂等模块,“always”将总是修改密码,“on_create”将只在创建用户时设置密码 |
例子:创建用户user1
[student@master ansible] ansible node1 -m user -a 'name=user1 uid=4000 groups=student state=present'
例子:创建用户user2,并设置密码,需要先对密码进行加密
[student@master ansible] openssl passwd -1 wiltjer
$1$Hg6hbOI1$DvR5d.ike1E8Fl2imJ2681
[student@master ansible] ansible node1 -m user -a 'name=user2 uid=4001 password="$1$Hg6hbOI1$DvR5d.ike1E8Fl2imJ2681" groups=root state=present'
2、shell
模块
- 在目标节点上执行复杂的 shell 命令或脚本,支持管道和重定向等操作符
例子:查看/home的详情信息
[student@master ansible] ansible node1 -m shell -a 'ls -l /home'
3、copy
模块
- 将控制机上的文件或内联内容静态地复制到远程目标节点上的指定位置
常用参数 | 作用 |
---|---|
backup[yes|no] | 拷贝的同时创建一个包含时间戳信息的备份文件,默认为no |
dest | 目标路径,只能是绝对路径 |
content | 相当于重定向 |
directory_mode | 当对目录做递归拷贝时,使得只拷贝新建文件,旧文件不会被拷贝,默认未设置 |
follow=[yes|no] | 是否追踪到连接的源文件 |
force=[yes|no] | 设置为yes,将覆盖远程同名文件,设置为no,忽略同名文件的拷贝 |
group | 设置远程文件的所属组 |
owner | 设置远程文件的所有者 |
mode | 设置远程文件的权限 |
src | 源文件,可以使用绝对路径或相对路径 |
加/,只会拷贝目录中的内容到远程;不加/,则拷贝目录本身和目录内的内容到远程 |
例子:把控制主机 master 上的 /tmp/file1 文件拷贝到受控主机 node1 的 /tmp/ 下
[student@master ansible]$ ansible node1 -m copy -a 'src=/tmp/file1 dest=/tmp/'
例子:拷贝的同时设置所属用户和组
[student@master ansible]$ ansible node1 -m copy -a 'src=/tmp/file2 dest=/tmp/ group=root owner=student'
4、template
模块
- 基于 Jinja2 模板生成文件并传输到目标节点,能够动态地将变量替换为具体值,常用于配置文件
常用参数 | 作用 |
---|---|
backup | 拷贝的同时创建一个包含时间戳信息的备份文件,默认为no |
dest | 目标路径 |
force | 设置为yes,将覆盖远程同名文件,设置为no,忽略同名文件的拷贝 |
group | 设置远程文件的所属组 |
owner | 设置远程文件的所有者 |
mode | 设置远程文件的权限 |
src | 源文件,可以使用绝对路径或相对路径 |
validate | 在复制到目标主机后但放到目标位置之前,执行此选项指定的命令 |
一般用于检查配置文件语法,语法正确则保存到目标位置 |
使用和copy模块相似,但template模块可以含有变量
5、file
模块
- 管理文件和目录的属性,包括设置权限、所有权、创建软链接/硬链接,以及创建目录和删除文件
常用命令 | 作用 |
---|---|
mode | 设置文件的权限 |
group | 设置文件的所有组 |
owner | 设置文件的所有者 |
setype | 修改文件的context |
path | 指定待操作的文件,可使用别名dest 和name 来代替path |
recurse | 默认no,递归修改文件的属性信息,要求state=directory |
src | 创建链接时使用,指定源文件 |
state | directory:如果目录不存在则递归创建 |
file:文件不存在时,不会被创建(默认) | |
touch:创建一个新文件 | |
link:修改或创建软连接 | |
hard:修改或创建硬链接 | |
absent:目的和其中的文件会被递归删除,文件或链接将取消链接状态 |
例子:创建文件
[student@master ansible] ansible node1 -m file -a 'path=/tmp/file11 state=touch'
例子:创建目录
[student@master ansible] ansible node1 -m file -a 'path=/tmp/dir1 state=directory'
例子:删除文件
[student@master ansible] ansible node1 -m file -a 'path=/tmp/file11 state=absent'
例子:创建软连接
[student@master ansible] ansible node1 -m file -a 'dest=/tmp/file11 src=/tmp/file1 state=link'
例子:创建硬链接
[student@master ansible] ansible node1 -m file -a 'dest=/tmp/file22 src=/tmp/file2 state=hard'
6、yum_repository
模块
- 在目标节点上配置和管理 YUM/DNF 软件仓库(定义
.repo
文件)
常用参数 | 作用 |
---|---|
baseurl | 地址 |
mirrorlist | 设置mirrorlist地址 |
description | 描述信息 |
enabled | 是否启用该仓库,默认为yes |
file | 保存此仓库的文件,不设置该项的话则默认以name选项中的名称命名 |
gpgcheck | 是否要进行gpgcheck |
name | 仓库的名称,要保证名称的唯一性 |
reposdir | 保存.repo文件的目录 |
state | repo文件的状态,present/absent,默认present |
例子:配置yum仓库
[student@master ansible] ansible node1 -m yum_repository -a 'file=server name=aa description=aa1 baseurl=http://ansible.example.com/rhel9/BaseOS enabled=yes gpgcheck=no'
[student@master ansible] ansible node1 -m yum_repository -a 'file=server name=cc description=cc1 baseurl=http://ansible.example.com/rhel9/AppStream enabled=yes gpgcheck=no'
7、yum
模块
- 使用 YUM 或 DNF 包管理器在 RHEL/CentOS/Fedora 等系统上安装、升级、降级或删除软件包
常用参数 | 作用 |
---|---|
disable_gpg_check | 安装包时禁止gpgcheck,仅在state=present或latest时生效 |
disablerepo | 禁用指定的repoid,多个repoid使用逗号分隔 |
enablerepo | 明确使用该repoid |
exclude | 排除哪些包不安装,仅在state=present或latest |
list | 类似于yum list |
name | 指定安装的包名,可带上版本号。多个包可使用逗号分隔 |
state | present、installed、latest用于安装包;absent、removed用于移除已安装包 |
update_cache | 强制更新yum的cache |
例子:安装httpd
[student@master ansible] ansible node1 -m yum -a 'name=httpd state=installed'
例子:卸载httpd
[student@master ansible] ansible node1 -m yum -a 'name=httpd state=removed'
8、service
模块
- 管理系统服务(守护进程)的状态,例如启动、停止、重启、重载以及设置开机自启
常用参数 | 作用 |
---|---|
enabled | 设置服务为开机自启动,默认为no |
name | 服务名 |
state | started启动服务,stopd停止服务,幂等操作 |
restarted重启服务 | |
reloaded重读配置文件,如果服务是未运行状态,则reloaded会启动服务 | |
(state和enabled两者至少要给一个) |
例子:重启httpd服务并设置下次启动生效
[student@master ansible] ansible node1 -m service -a 'name=httpd state=started enabled=yes'
9、fetch
模块
- 从远程目标节点拉取文件到控制机,通常用于收集日志或备份配置文件
常用参数 | 作用 |
---|---|
dest | 本地存储拉取文件的目录 |
src | 远程主机的源文件,只能是文件,不支持目录 |
fail_on_missing | 当设置为yes时,如果拉取的源文件不存在则此任务失败,默认为no |
flat | 改变拉取后的路径存储方式,如果设置为yes,且当dest以/结尾时,将直接把源文件的basename存储在dest下 |
validate_checksum | fetch到文件后,检查其md5和源文件是否相同 |
例子:将受控主机 node1 的/tmp/file3文件拉取到本地来,存储的名字为/tmp/file3-node1(node2)
[student@master ansible]$ ansible node1,node2 -m fetch -a 'src=/tmp/file3 dest=/tmp/file3-{{inventory_hostname}} flat=yes'
10、firewalld
模块
- 管理目标系统上的
firewalld
守护进程,配置防火墙规则( zones, services, ports 等)
常用参数 | 作用 |
---|---|
service | 指定服务名 |
permanent | yes |
state | enabled添加,disabled移除 |
immediate | yes |
例子:允许http流量的传入
[student@master ansible] ansible node1 -m firewalld -a 'service=http permanent=yes state=enabled immediate=yes'
例子:富规则 允许192.168.100.0/24主机http流量的传入
[student@master ansible] ansible node1 -m firewalld -a 'zone=public rich_rule="rule family=ipv4 source address=192.168.100.0/24 service name=http accept" permanent=yes state=enabled immediate=yes'
例子:允许80端口http流量的传入
[student@master ansible]$ ansible node1 -m firewalld -a 'port=80/tcp state=enabled permanent=yes immediate=yes'
11、replace
模块
- 使用正则表达式匹配并替换文件中的特定文本行或字符串
常用参数 | 作用 |
---|---|
path | 指定操作文件,可使用dest、destfile、name |
regexp | 指定被替换字符串 |
replace | 指定替换字符串 |
backup | 设置为yes,进行备份 |
例子:把受控主机 node1 的 /tmp/file1 文件中的 ab 替换为 yy
[student@master ansible] ansible node1 -m replace -a 'path=/tmp/file1 regexp="ab" replace="yy"'
12、parted
模块
- 对目标节点上的磁盘进行分区操作(创建、调整、删除分区等)
常用参数 | 作用 |
---|---|
device | 指定设备 |
number | 指定分区号 |
part_type | 指定分区类型 |
part_start | 指定起始大小 |
part_end | 指定结束大小 |
state | present创建,absent移除 |
例子:创建分区1,大小为500M
[student@master ansible] ansible node1 -m parted -a 'device=/dev/vdb number=1 part_type=primary part_start=10MiB part_end=510MiB state=present'
13、filesystem
模块
- 在目标块设备(如分区)上创建指定类型的文件系统(如 ext4, xfs, swap)
常用参数 | 作用 |
---|---|
dev | 指定设备 |
fstype | 指定格式化类型 |
例子:格式化 /dev/vdb1 为 xfs 类型
[student@master ansible] ansible node1 -m filesystem -a 'dev=/dev/vdb1 fstype=xfs'
14、mount
模块
- 挂载或卸载文件系统,并永久性地将挂载信息写入
/etc/fstab
常用参数 | 作用 |
---|---|
src | 指定设备 |
path | 指定挂载点 |
fstype | 指定文件系统 |
opts | 指定挂载选项 |
state | mounted挂载,absent卸载 |
例子:永久挂载 /dev/vdb1 ,需要先获取 /dev/vdb1 的 UUID
[student@master ansible] ansible node1 -m shell -a 'blkid /dev/vdb1'
[student@master ansible] ansible node1 -m mount -a 'src="UUID=85275060-72ce-40cb-98b8-9b3b9283c59d" path=test fstype=xfs state=mounted'
15、lvg
模块
- 管理 LVM(逻辑卷管理)的物理卷(PV)和卷组(VG)
常用参数 | 作用 |
---|---|
vg | 指定卷组名 |
pesize | 指定PE大小 |
pvs | 指定设备 |
例子:创建卷组
[student@master ansible] ansible node1 -m lvg -a 'vg=vg0 pesize=4M pvs=/dev/vdb2'
16、lvol
模块
- 管理 LVM 的逻辑卷(LV),包括创建、调整大小和删除
常用参数 | 作用 |
---|---|
lv | 指定逻辑卷名 |
size | 指定大小 |
vg | 指定卷组 |
resizefs | yes,调整大小 |
例子:创建逻辑卷
[student@master ansible] ansible node1 -m lvol -a 'lv=lv0 size=1000M vg=vg0'
17、debug
模块
- 在任务执行期间打印调试信息到输出,常用于输出变量值或自定义消息以辅助排错
常用参数 | 作用 |
---|---|
msg | 输出自定义信息,如果省略,则输出普通字符 |
var | 指定待测试的变量,只能指定变量,不能指定自定义信息,且变量不能加{{}}包围,而是直接的变量名 |
verbosity | 控制debug运行的调试级别,有效值为一个数值N |
例子:输出123321
[student@master ansible] ansible node1 -m debug -a 'msg="123321"'
例子:输出变量
[student@master ansible] ansible node1 -m debug -a 'msg="this is {{ inventory_hostname }}"'
18、cron
模块
- 管理计划任务(cron jobs),可以创建、修改或删除用户的 cron 任务
常用参数 | 作用 |
---|---|
backup | 如果设置了,则会在修改远程cron_file前备份这些文件 |
cron_file | 自定义cron_file的文件名,使用相对路径表示在/etc/cron.d,必须同时指定user选项 |
user | 指定哪个用户,默认为root |
disabled | 禁用crontab中的某个job,要求state=present |
env | 设置一个环境变量 |
job | 需要执行的命令 |
minute | 分 |
hour | 时 |
day | 日 |
month | 月 |
weekday | 周 |
name | 描述crontab任务的字符串 |
special_time | 定时任务的别称,用于定义何时运行的job条目 |
state | present创建,absent移除 |
例子:创建计划任务 test ,每个月 11 号下午 2 点每 5 分钟执行一次 /bin/echo I AM RHCE
[student@master ansible] ansible node1 -m cron -a 'name="test" minute="*/5" hour=14 day=11 job="/bin/echo I AM RHCE" state=present'
19、get_url
模块
- 从 HTTP、HTTPS 或 FTP URL 下载文件到目标节点
常用命令 | 作用 |
---|---|
backup | 下载文件时同时创建一个带时间戳的备份文件 |
dest | 文件保存路径,必须为绝对路径 |
tmp_dest | 下载时临时存放目录,在任务执行完成前会删除下载的临时文件 |
group | 文件/目录的所属组 |
owner | 文件/目录的所有者 |
mode | 设置文件/目录的权限 |
timeout | 请求url时的超时时间,默认10秒钟 |
url | 要下载的url路径 |
例子:下载受控主机 node1 的 /var/www/html/file1 文件到控制主机 master 的 /tmp/file1
[student@master ansible]$ ansible node1 -m get_url -a 'url=http://node1.example.com/file1 dest=/tmp/file1'
20、sefcontext
模块
- 为 SELinux 策略设置文件上下文(安全上下文)标签,但不立即应用更改(需要后续调用
restorecon
)
常用参数 | 作用 |
---|---|
target | 指定目标 |
setype | 更改context |
state | present |
例子:
[student@master ansible] ansible node1 -m sefcontext -a 'target="/share(/.*)?" setype=samba_share_t state=present'
[student@master ansible] ansible node1 -m shell -a 'restorecon -Rv /share'