ansible常用模块详解

发布时间:2026/7/12 0:08:00
ansible常用模块详解 命令执行类模块pingping模块通常用于检测控制机与被控制机之间的连通性示例all表示所有主机rootmaster:~# ansible all -m ping10.37.120.9 | SUCCESS {“ansible_facts”: {“discovered_interpreter_python”: “/usr/local/bin/python3.13”},“changed”: false,“ping”: “pong”}10.37.99.63 | SUCCESS {“ansible_facts”: {“discovered_interpreter_python”: “/usr/local/bin/python3.13”},“changed”: false,“ping”: “pong”}command执行简单命令不支持管道、重定向、变量 $、、|、、速度最快无 shell 解析风险。核心参数cmd要执行的命令chdir执行前切换目录creates文件存在则不执行命令removes文件不存在则不执行命令示例rootmaster:~# ansible web -m command -a ‘hostname -I’10.37.120.9 | CHANGED | rc0 10.37.120.9 172.17.0.1 100.95.185.192 fdbd:dc01:ff:324:7f74:8dda:726c:431210.37.99.63 | CHANGED | rc0 10.37.99.63 172.17.0.1 100.117.144.128 fdbd:dc01:ff:318:71d3:f428:1bc5:b474shell调用 /bin/sh支持管道、重定向、、变量、通配符高危慎用。核心参数同commandcmd要执行的命令chdir执行前切换目录creates文件存在则不执行命令removes文件不存在则不执行命令示例rootmaster:~# ansible web -m shell -a ‘echo test /root/test.txt’10.37.120.9 | CHANGED | rc0 10.37.99.63 | CHANGED | rc0 rootmaster:~# ansible web -m shell -a ‘cat /root/test.txt’10.37.120.9 | CHANGED | rc0 test10.37.99.63 | CHANGED | rc0 test如果使用command会报错rootmaster:~# ansible web -m command -a ‘echo test /root/test1.txt’10.37.120.9 | CHANGED | rc0 test /root/test1.txt10.37.99.63 | CHANGED | rc0 test /root/test1.txtrootmaster:~# ansible web -m command -a ‘cat /root/test1.txt’[ERROR]: Task failed: Module failed: The command exited with a non-zero return code.Origin: adhoc ‘command’ task{‘action’: ‘command’, ‘args’: {‘_raw_params’: ‘cat /root/test1.txt’}, ‘timeout’: 0, ‘async_val’: 0, ‘poll’: 15}10.37.120.9 | FAILED | rc1 cat: /root/test1.txt: No such file or directoryThe command exited with a non-zero return code.10.37.99.63 | FAILED | rc1 cat: /root/test1.txt: No such file or directoryThe command exited with a non-zero return code.script把本地机器的脚本自动上传远程并执行无需手动拷贝。参数chdir远程执行目录creates/removes条件执行示例编写脚本rootmaster:~# cat check.sh#!/bin/bashhostnamehostname -Ipwd使用ansible执行rootmaster:~# ansible web -m script -a ‘chdir/data00 /root/check.sh’10.37.120.9 | CHANGED {“changed”: true,“rc”: 0,“stderr”: “Shared connection to 10.37.120.9 closed.\r\n”,“stderr_lines”: [“Shared connection to 10.37.120.9 closed.”],“stdout”: “node02\r\n10.37.120.9 172.17.0.1 100.95.185.192 fdbd:dc01:ff:324:7f74:8dda:726c:4312 \r\n/data00\r\n”,“stdout_lines”: [“node02”,10.37.120.9 172.17.0.1 100.95.185.192 fdbd:dc01:ff:324:7f74:8dda:726c:4312 ,“/data00”]}10.37.99.63 | CHANGED {“changed”: true,“rc”: 0,“stderr”: “Shared connection to 10.37.99.63 closed.\r\n”,“stderr_lines”: [“Shared connection to 10.37.99.63 closed.”],“stdout”: “node01\r\n10.37.99.63 172.17.0.1 100.117.144.128 fdbd:dc01:ff:318:71d3:f428:1bc5:b474 \r\n/data00\r\n”,“stdout_lines”: [“node01”,10.37.99.63 172.17.0.1 100.117.144.128 fdbd:dc01:ff:318:71d3:f428:1bc5:b474 ,“/data00”]}回到顶部文件目录操作模块filefile通常用于创建、删除文件或者目录修改文件权限创建文件软连接或者硬连接。核心参数path路径必须要写srcsource源源文件一般用于link创建软链接用于指定源文件state状态具体要做什么操作文件、目录、软链接statedirectory 创建目录statefile(默认)更新文件如果文件不存在也不创建statelink 创建软链接statetouch 创建文件stateabsent 删除文件、目录如果是目录会递归删除mode创建并修改权限建议mode“0600”owner指定用户group指定用户组示例创建/tmp/test.txt文件rootmaster:~# ansible web -m file -a ‘path/tmp/test.txt statetouch mode0600 ownerroot’10.37.120.9 | CHANGED {“ansible_facts”: {“discovered_interpreter_python”: “/usr/local/bin/python3.13”},“changed”: true,“dest”: “/tmp/test.txt”,“gid”: 0,“group”: “root”,“mode”: “0600”,“owner”: “root”,“size”: 0,“state”: “file”,“uid”: 0}10.37.99.63 | CHANGED {“ansible_facts”: {“discovered_interpreter_python”: “/usr/local/bin/python3.13”},“changed”: true,“dest”: “/tmp/test.txt”,“gid”: 0,“group”: “root”,“mode”: “0600”,“owner”: “root”,“size”: 0,“state”: “file”,“uid”: 0}查看一下rootmaster:~# ansible web -m command -a ‘stat /tmp/test.txt’10.37.120.9 | CHANGED | rc0 File: /tmp/test.txtSize: 0 Blocks: 0 IO Block: 4096 regular empty fileDevice: fe02h/65026d Inode: 138238 Links: 1Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)Access: 2026-07-10 11:06:51.634161945 0800Modify: 2026-07-10 11:06:51.634161945 0800Change: 2026-07-10 11:06:51.634161945 0800Birth: -10.37.99.63 | CHANGED | rc0 File: /tmp/test.txtSize: 0 Blocks: 0 IO Block: 4096 regular empty fileDevice: fe02h/65026d Inode: 138231 Links: 1Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)Access: 2026-07-10 11:06:51.652183477 0800Modify: 2026-07-10 11:06:51.652183477 0800Change: 2026-07-10 11:06:51.652183477 0800Birth:创建目录 /tmp/a/s/d/f/g/rootmaster:~# ansible web -m file -a ‘path/tmp/a/s/d/f/g/ statedirectory’10.37.120.9 | CHANGED {“ansible_facts”: {“discovered_interpreter_python”: “/usr/local/bin/python3.13”},“changed”: true,“gid”: 0,“group”: “root”,“mode”: “0755”,“owner”: “root”,“path”: “/tmp/a/s/d/f/g/”,“size”: 4096,“state”: “directory”,“uid”: 0}10.37.99.63 | CHANGED {“ansible_facts”: {“discovered_interpreter_python”: “/usr/local/bin/python3.13”},“changed”: true,“gid”: 0,“group”: “root”,“mode”: “0755”,“owner”: “root”,“path”: “/tmp/a/s/d/f/g/”,“size”: 4096,“state”: “directory”,“uid”: 0}创建软连接rootmaster:~# ansible web -m file -a ‘path/tmp/hosts src/etc/hosts statelink’10.37.120.9 | CHANGED {“ansible_facts”: {“discovered_interpreter_python”: “/usr/local/bin/python3.13”},“changed”: true,“dest”: “/tmp/hosts”,“gid”: 0,“group”: “root”,“mode”: “0777”,“owner”: “root”,“size”: 10,“src”: “/etc/hosts”,“state”: “link”,“uid”: 0}10.37.99.63 | CHANGED {“ansible_facts”: {“discovered_interpreter_python”: “/usr/local/bin/python3.13”},“changed”: true,“dest”: “/tmp/hosts”,“gid”: 0,“group”: “root”,“mode”: “0777”,“owner”: “root”,“size”: 10,“src”: “/etc/hosts”,“state”: “link”,“uid”: 0}查看一下rootmaster:~# ansible web -m command -a ‘stat /tmp/hosts’10.37.120.9 | CHANGED | rc0 File: /tmp/hosts - /etc/hostsSize: 10 Blocks: 0 IO Block: 4096 symbolic linkDevice: fe02h/65026d Inode: 138239 Links: 1Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)Access: 2026-07-10 11:12:09.209070628 0800Modify: 2026-07-10 11:12:09.209070628 0800Change: 2026-07-10 11:12:09.209070628 0800Birth: -10.37.99.63 | CHANGED | rc0 File: /tmp/hosts - /etc/hostsSize: 10 Blocks: 0 IO Block: 4096 symbolic linkDevice: fe02h/65026d Inode: 138328 Links: 1Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)Access: 2026-07-10 11:12:09.221759696 0800Modify: 2026-07-10 11:12:09.221759696 0800Change: 2026-07-10 11:12:09.221759696 0800Birth: -copy推送本地文件至远程支持内容写入、权限、备份。参数src主控端文件位置dest 要将源文件复制到远程机器的绝对路径必选项。owner文件复制过去后的所有者group文件复制过去后的所属组mode文件的权限设定执行ax这种方式backupbackupyes 会在覆盖前进行备份文件内容有变化或区别backupno则直接覆盖directory_mode:递归设定目录的权限。content直接写入文本替代本地文件示例将本地文件复制到远程准备文件rootmaster:~# cat check.sh#!/bin/bashhostnamehostname -Ipwd执行ansible命令rootmaster:~# ansible web -m copy -a ‘src/root/check.sh dest/data00/check.sh backupyes ownerroot’10.37.120.9 | CHANGED {“ansible_facts”: {“discovered_interpreter_python”: “/usr/local/bin/python3.13”},“changed”: true,“checksum”: “f458a04709a54eed4539d771bc761b2d79cdfbbb”,“dest”: “/data00/check.sh”,“gid”: 0,“group”: “root”,“md5sum”: “20f734e70a45e0df35c2cde454bb94c2”,“mode”: “0644”,“owner”: “root”,“size”: 37,“src”: “/root/.ansible/tmp/ansible-tmp-1783653540.5392613-1973974-7642431353431/.source.sh”,“state”: “file”,“uid”: 0}10.37.99.63 | CHANGED {“ansible_facts”: {“discovered_interpreter_python”: “/usr/local/bin/python3.13”},“changed”: true,“checksum”: “f458a04709a54eed4539d771bc761b2d79cdfbbb”,“dest”: “/data00/check.sh”,“gid”: 0,“group”: “root”,“md5sum”: “20f734e70a45e0df35c2cde454bb94c2”,“mode”: “0644”,“owner”: “root”,“size”: 37,“src”: “/root/.ansible/tmp/ansible-tmp-1783653540.542557-1973973-858857181216/.source.sh”,“state”: “file”,“uid”: 0}查看一下rootmaster:~# ansible web -m command -a ‘stat /data00/check.sh’10.37.120.9 | CHANGED | rc0 File: /data00/check.shSize: 37 Blocks: 8 IO Block: 4096 regular fileDevice: fe10h/65040d Inode: 12 Links: 1Access: (0644/-rw-r–r–) Uid: ( 0/ root) Gid: ( 0/ root)Access: 2026-07-10 11:19:01.251030921 0800Modify: 2026-07-10 11:19:01.251031637 0800Change: 2026-07-10 11:19:01.249954932 0800Birth: -10.37.99.63 | CHANGED | rc0 File: /data00/check.shSize: 37 Blocks: 8 IO Block: 4096 regular fileDevice: fe10h/65040d Inode: 12 Links: 1Access: (0644/-rw-r–r–) Uid: ( 0/ root) Gid: ( 0/ root)Access: 2026-07-10 11:19:01.268908262 0800Modify: 2026-07-10 11:19:01.268908977 0800Change: 2026-07-10 11:19:01.267692999 0800Birth: -使用content直接写入内容rootmaster:~# ansible web -m copy -a ‘dest/data00/check.sh backupyes content123’10.37.120.9 | CHANGED {“ansible_facts”: {“discovered_interpreter_python”: “/usr/local/bin/python3.13”},# 可以看到这里已经备份了“backup_file”: “/data00/check.sh.153008.2026-07-1011:21:34~”,“changed”: true,“checksum”: “40bd001563085fc35165329ea1ff5c5ecbdbbeef”,“dest”: “/data00/check.sh”,“gid”: 0,“group”: “root”,“md5sum”: “202cb962ac59075b964b07152d234b70”,“mode”: “0644”,“owner”: “root”,“size”: 3,“src”: “/root/.ansible/tmp/ansible-tmp-1783653694.0950441-1977803-183011264332546/.source.sh”,“state”: “file”,“uid”: 0}10.37.99.63 | CHANGED {“ansible_facts”: {“discovered_interpreter_python”: “/usr/local/bin/python3.13”},“backup_file”: “/data00/check.sh.160197.2026-07-1011:21:34~”,“changed”: true,“checksum”: “40bd001563085fc35165329ea1ff5c5ecbdbbeef”,“dest”: “/data00/check.sh”,“gid”: 0,“group”: “root”,“md5sum”: “202cb962ac59075b964b07152d234b70”,“mode”: “0644”,“owner”: “root”,“size”: 3,“src”: “/root/.ansible/tmp/ansible-tmp-1783653694.092595-1977802-74590298560295/.source.sh”,“state”: “file”,“uid”: 0}fetch拉取远程文件到本地自动按主机名分目录存储仅支持文件不支持目录。核心参数src远程系统上要获取的文件。 这必须是一个文件而不是一个目录。 后续版本可能会支持递归提取。dest保存文件的目录。 例如如果dest目录是/backup在主机host.example.com上命名为/ etc/profile的src文件将被保存示例rootmaster:~# ansible web -m fetch -a ‘src/etc/hosts dest/data00’10.37.120.9 | CHANGED {“changed”: true,“checksum”: “ce9964c64b3d6c002d8a0fdc015009090fa5ccf0”,# 拉取到本地的这个目录下“dest”: “/data00/10.37.120.9/etc/hosts”,“file”: “/etc/hosts”,“md5sum”: “1b3869c148c86190b1b5c004a91adf0f”,“remote_checksum”: “ce9964c64b3d6c002d8a0fdc015009090fa5ccf0”,“remote_md5sum”: null}10.37.99.63 | CHANGED {“changed”: true,“checksum”: “a3f1671554da35a2b22a0a4c3d3f611528745891”,“dest”: “/data00/10.37.99.63/etc/hosts”,“file”: “/etc/hosts”,“md5sum”: “bea8ca6ca04563655de18130ddab5d22”,“remote_checksum”: “a3f1671554da35a2b22a0a4c3d3f611528745891”,“remote_md5sum”: null}lineinfile修改文件中的行,类似linux工具中的sed工具确保某一行文本存在于指定的文件中或者确保从文件中删除指定的文本即确保指定的文本不存在于文件中还可以根据正则表达式替换修改某一行文本参数path 必须参数指定要操作的文件。line : 使用此参数指定文本内容。regexp 使用正则表达式匹配对应的行当替换文本时如果有多行文本都能被匹配则只有最后面被匹配到的那行文本才会被替换当删除文本时如果有多行文本都能被匹配这么这些行都会被删除。state 当想要删除对应的文本时需要将state参数的值设置为absentabsent为缺席之意表示删除state的默认值为present。backrefs 默认是yesbackrefs为yes时如果没有匹配则文件保持不变。如果匹配了把匹配内容替被换为line内容backrefs为no时如果没有匹配,则添加一行line。如果匹配了则把匹配内容替被换为line内容。insertafter 借助insertafter参数可以将文本插入到“指定的行”之后insertafter参数的值可以设置为EOF或者正则表达式EOF为End Of File之意表示插入到文档的末尾默认情况下insertafter的值为EOF如果将insertafter的值设置为正则表达式表示将文本插入到匹配到正则的行之后如果正则没有匹配到任何行则插入到文件末尾当使用backrefs参数时此参数会被忽略。insertbefore 借助insertbefore参数可以将文本插入到“指定的行”之前insertbefore参数的值可以设置为BOF或者正则表达式BOF为Begin Of File之意表示插入到文档的开头如果将insertbefore的值设置为正则表达式表示将文本插入到匹配到正则的行之前如果正则没有匹配到任何行则插入到文件末尾当使用backrefs参数时此参数会被忽略。backup 是否在修改文件之前对文件进行备份。create 当要操作的文件并不存在时是否创建对应的文件。示例在指定文件中写入内容rootmaster:~# ansible web -m lineinfile -a ‘path/data00/check.sh line456’10.37.120.9 | CHANGED {“ansible_facts”: {“discovered_interpreter_python”: “/usr/local/bin/python3.13”},“backup”: “”,“changed”: true,“msg”: “line added”}10.37.99.63 | CHANGED {“ansible_facts”: {“discovered_interpreter_python”: “/usr/local/bin/python3.13”},“backup”: “”,“changed”: true,“msg”: “line added”}查看一下rootmaster:~# ansible web -m command -a ‘cat /data00/check.sh’10.37.120.9 | CHANGED | rc0 12345610.37.99.63 | CHANGED | rc0 123456blockinfile插入 / 删除一段多行内容自带# BEGIN/END ANSIBLE MANAGED BLOCK标记只管理标记内内容。参数path 必须参数指定要操作的文件。block : 使用此参数指定文本块内容。state 当想要删除对应的文本时需要将state参数的值设置为absentabsent为缺席之意表示删除state的默认值为present。insertafter 借助insertafter参数可以将文本插入到“指定的行”之后insertafter参数的值可以设置为EOF或者正则表达式EOF为End Of File之意表示插入到文档的末尾默认情况下insertafter的值为EOF如果将insertafter的值设置为正则表达式表示将文本插入到匹配到正则的行之后如果正则没有匹配到任何行则插入到文件末尾当使用backrefs参数时此参数会被忽略。insertbefore 借助insertbefore参数可以将文本插入到“指定的行”之前insertbefore参数的值可以设置为BOF或者正则表达式BOF为Begin Of File之意表示插入到文档的开头如果将insertbefore的值设置为正则表达式表示将文本插入到匹配到正则的行之前如果正则没有匹配到任何行则插入到文件末尾当使用backrefs参数时此参数会被忽略。backup 是否在修改文件之前对文件进行备份。create 当要操作的文件并不存在时是否创建对应的文件。marker默认值# {mark} ANSIBLE MANAGED BLOCK,自定义标记行的模板。{mark} 是一个占位符会被替换为 BEGIN 和 END示例rootmaster:~# ansible web -m blockinfile -a “path/data00/check.sh block123456789 marker‘# {mark} ANSIBLE MANAGED BLOCK’”10.37.120.9 | CHANGED {“ansible_facts”: {“discovered_interpreter_python”: “/usr/local/bin/python3.13”},“changed”: true,“msg”: “Block inserted”}10.37.99.63 | CHANGED {“ansible_facts”: {“discovered_interpreter_python”: “/usr/local/bin/python3.13”},“changed”: true,“msg”: “Block inserted”}synchronizesynchronize 模块是 Ansible 中对 rsync 工具的一个封装。它主要用于在控制节点和远程主机之间高效地同步文件和目录。它利用 rsync 的增量传输算法同步时只传输发生变化的部分因此在处理大量文件或大文件时效率远超 copy 等模块参数src定义要同步的源文件或目录。dest目标路径。定义同步的目标位置。mode定义同步方式。push推送默认将本地文件推送到远程pull拉取则将远程文件拉取到本地。archive默认值yes开启归档模式。相当于 rsync 的 -a 选项会保留权限、所有者、时间戳等文件属性。compress默认值为noyes代表传输压缩。在传输过程中压缩数据可节省带宽但会消耗一些 CPU 资源。delete默认值为noyes删除无关文件。删除目标端存在但源端不存在的文件使目标完全与源一致。rsync_opts自定义 rsync 参数。可以传递额外的 rsync 命令行选项如 --exclude。recursive默认值yes递归目录。当 archiveyes 时自动启用。dest_port默认值为22目标 SSH 端口。如果目标主机的 SSH 端口不是默认的 22则需指定。delay_updatesdelay_updates 参数控制 rsync 的 --delay-updates 选项。启用后rsync 会将更新的文件先放到一个临时目录等所有文件都传输完成再一次性重命名到目标位置第一次pull时需要将此参数设置为no示例将远程文件拉取到本地rootmaster:~# ansible web -m synchronize -a ‘src/etc dest/data00/ modepull compressyes archiveyes delay_updatesno’10.37.99.63 | CHANGED {“changed”: true,“cmd”: “/usr/bin/rsync --compress --archive --rsh‘/usr/bin/ssh -S none -o StrictHostKeyCheckingno -o UserKnownHostsFile/dev/null’ --out-format‘%i %n%L’ 10.37.99.63:/etc /data00/”,#…省略万字内容}回到顶部软件包管理模块yumCentOS/RHEL 系统安装软件核心参数name服务名state进行的操作安装、更新、删除installed/present 安装软件包默认不更新默认值removed/absen 删除软件包类似 yum removed需要慎用latest安装或更新(安装最新版本)示例安装常用的软件htop,iotop、tree、sshpassrootmaster:/data00# ansible web -m yum -a ‘namehtop,iotop,tree,sshpass statelatest’aptUbuntu/Debian系统安装软件核心参数name服务名update_cache更新 apt 缓存state进行的操作安装、更新、删除installed/present 安装软件包默认不更新默认值removed/absen 删除软件包类似 yum removed需要慎用latest安装或更新(安装最新版本)示例安装常用的软件htop,iotop、tree、sshpassrootmaster:/data00# ansible web -m apt -a ‘namehtop,iotop,tree,sshpass statelatest’ -e ‘ansible_python_interpreter/usr/bin/python3’unarchive支持 tar/zip可解压本地包或远程 url 包。核心参数src指定要解压的归档文件路径。路径含义取决于 remote_src 的设置desc解压目标目录的绝对路径。注意该目录必须已存在模块不会自动创建remote_src控制源文件位置。no 表示文件在控制节点yes 表示文件已在远程主机owner指定解压后的所属用户group指定解压后的所属组mode设置解压后文件和目录的权限。建议使用引号括起来的八进制数如 ‘0755’示例压缩包在控制节点解压到目标主机rootmaster:~# ansible web -m unarchive -a ‘src/root/jdk.tar.gz dest/usr/local remote_srcno’压缩包在目标主机直接解压rootmaster:~# ansible web -m unarchive -a ‘src/root/jdk.tar.gz dest/usr/local remote_srcyes’archive压缩某个文件参数path要归档的源文件或目录路径。支持列表可指定多个路径。dest目标归档文件的完整路径。如果 path 是多个则此参数必须多个format归档格式。可选gz (tar.gz)、bz2、xz、zip、tar。remove归档成功后是否删除源文件yes是no否owner归档后的所属人group归档后的所属组mode归档后的权限示例ansible all -m archive -a “path/var/log dest/tmp/logs.tar.gz formatgz”回到顶部服务、进程模块systemd用于管理服务启动、停止、重启、开机自启动等参数name服务名称enabled指定服务是否开机自启动yes代表开机自启动no代表不是state表示服务的状态started启动stopped停止restarted重启reloaded重新加载示例rootmaster:~# ansible web -m systemd -a ‘namesshd enabledyes statestarted’10.37.120.9 | SUCCESS {“ansible_facts”: {“discovered_interpreter_python”: “/usr/local/bin/python3.13”},“changed”: false,“enabled”: true,# … 省略万字内容}回到顶部用户模块user远程批量管理用户例如创建、删除用户修改用户密码等参数name指定用户名uid用户idshell指定命令解释器create_home是否创建家目录no表示不创建yes表示创建state管理用户的动作present添加用户adsent删除用户password设置密码示例所有机器创建虚拟用户web_wwwrootmaster:~# ansible all -m user -a ‘nameweb_www statepresent create_homeno shell/sbin/nologin’10.37.120.9 | CHANGED {“ansible_facts”: {“discovered_interpreter_python”: “/usr/local/bin/python3.13”},“changed”: true,“comment”: “”,“create_home”: false,“group”: 2003,“groups”: “”,“home”: “/home/web_www”,“name”: “web_www”,“shell”: “/sbin/nologin”,“state”: “present”,“system”: false,“uid”: 2002}10.37.99.63 | CHANGED {“ansible_facts”: {“discovered_interpreter_python”: “/usr/local/bin/python3.13”},“changed”: true,“comment”: “”,“create_home”: false,“group”: 2003,“groups”: “”,“home”: “/home/web_www”,“name”: “web_www”,“shell”: “/sbin/nologin”,“state”: “present”,“system”: false,“uid”: 2002}rootmaster:~# ansible all -m command -a ‘id web_www’10.37.120.9 | CHANGED | rc0 uid2002(web_www) gid2003(web_www) groups2003(web_www)10.37.99.63 | CHANGED | rc0 uid2002(web_www) gid2003(web_www) groups2003(web_www)创建www用户并设置密码为wwwrootmaster:~# ansible all -m user -a “namewww statepresent shell/bin/bash password{{ ‘www’ | password_hash(‘sha512’, ‘1’) }}”groupgroup是批量管理用户组的模块核心参数name用户组名state管理用户组的动作present添加用户组adsent删除用户组gid用户组的id示例rootmaster:~# ansible web -m group -a ‘nametest gid11111 statepresent’10.37.120.9 | CHANGED {“ansible_facts”: {“discovered_interpreter_python”: “/usr/local/bin/python3.13”},“changed”: true,“gid”: 11111,“name”: “test”,“state”: “present”,“system”: false}10.37.99.63 | CHANGED {“ansible_facts”: {“discovered_interpreter_python”: “/usr/local/bin/python3.13”},“changed”: true,“gid”: 11111,“name”: “test”,“state”: “present”,“system”: false}回到顶部定时任务模块cron设置Linux系统的定时任务参数name定时任务的名称minute指定分钟hour指定小时day指定天month指定月份week指定周几job要执行的命令或脚本即 cron 中的命令行部分。state处理任务的动作present表示新增任务absent表示删除匹配的任务示例每天凌晨2点备份日志rootmaster:~# ansible all -m cron -a “name‘nginx backup’ minute0 hour2 job‘/bin/sh /data/sh/log_backup.sh /var/log/backup.log’ statepresent”10.37.120.9 | CHANGED {“ansible_facts”: {“discovered_interpreter_python”: “/usr/local/bin/python3.13”},“changed”: true,“envs”: [],“jobs”: [“nginx backup”]}10.37.99.63 | CHANGED {“ansible_facts”: {“discovered_interpreter_python”: “/usr/local/bin/python3.13”},“changed”: true,“envs”: [],“jobs”: [“nginx backup”]}回到顶部其它常用模块mount该模块可实现mount命令进行挂载并修改/etc/fstab实现永久挂载参数src源地址需要挂载的设备或文件信息path挂载点目标挂载点fstype指定文件系统xfsext4nfs…mount命令的-t选项state进行操作absent立即卸载并删除/etc/fstab里的配置umounted立即卸载但是不会删除/etc/fstab里的配置present不会立即挂载但会修改/etc/fstab里的信息mounted立即挂载并修改/etc/fstab里的信息remounted重新挂载debug使用 Ansible 最痛苦的就是远程命令没有生效但又看不到报错信息Debug 就是为了解决这个烦恼。参数msg要打印的自定义消息。支持使用 {{ }} 模板来引用变量。var指定要打印的变量名注意不包含 {{ }} 包裹。Ansible 会自动输出该变量的完整结构和值。控制输出所需的详细程度级别。只有 Ansible 的 -v 级别大于或等于此值时消息才会显示。数值范围 0-4。rootmaster:~# ansible web -m debug -a “msg当前正在部署nginx”10.37.120.9 | SUCCESS {“msg”: “当前正在部署nginx”}10.37.99.63 | SUCCESS {“msg”: “当前正在部署nginx”}setupsetup 模块是 Ansible 的核心模块之一专门用于收集被管理主机的系统信息Facts。这些 Facts 信息非常丰富涵盖了操作系统、网络、硬件、软件等方方面面。它是实现自动化运维中“智能决策”的基础。参数filter按名称过滤。只返回匹配指定模式支持 fnmatch 风格通配符的 Facts。例如只获取网络相关信息。gather_subset按类别过滤。指定要收集的 Facts 类别。可选项包括 all、network、hardware、virtual、min 等fact_path自定义 Facts 路径。指定一个目录setup 模块会读取该目录下的文件如 .fact 文件将其内容作为自定义 Facts 一并收集gather_timeout超时设置。设置收集 Facts 的超时时间秒适用于网络较慢的环境示例获取所有的系统信息会返回一个特别庞大的json串rootmaster:~# ansible all -m setup过滤系统信息获取IProotmaster:~# ansible all -m setup -a ‘filteransible_locally_reachable_ips’10.37.120.9 | SUCCESS {“ansible_facts”: {“ansible_locally_reachable_ips”: {“ipv4”: [“10.37.120.9”,“10.96.0.1”,“10.96.0.10”,“10.96.1.170”,“10.96.3.164”,“10.96.3.191”,“100.95.185.192”,“127.0.0.0/8”,“127.0.0.1”,“172.17.0.1”],“ipv6”: [“::1”,“fdbd:dc01:ff:324:7f74:8dda:726c:4312”,“fe80::216:3eff:fe6e:be29”,“fe80::d03d:73ff:fed7:397c”,“fe80::ecee:eeff:feee:eeee”]},“discovered_interpreter_python”: “/usr/local/bin/python3.13”},“changed”: false}10.37.99.63 | SUCCESS {“ansible_facts”: {“ansible_locally_reachable_ips”: {“ipv4”: [“10.37.99.63”,“10.96.0.1”,“10.96.0.10”,“10.96.1.170”,“10.96.3.164”,“10.96.3.191”,“100.117.144.128”,“127.0.0.0/8”,“127.0.0.1”,“172.17.0.1”],“ipv6”: [“::1”,“fdbd:dc01:ff:318:71d3:f428:1bc5:b474”,“fe80::216:3eff:fe0f:60d7”,“fe80::ecee:eeff:feee:eeee”]},“discovered_interpreter_python”: “/usr/local/bin/python3.13”},“changed”: false}get_urlget_url 模块是 Ansible 中用于从 HTTP、HTTPS 或 FTP 服务器下载文件到远程主机的核心模块。核心参数url要下载的文件的完整 URL 地址支持 http、https、ftp。dest下载目标路径。如果是一个目录则使用 URL 中的文件名如果是一个文件路径则直接保存为指定文件名。headers自定义 HTTP 头以字典格式传递。可用于添加认证 Token 或 Cookie。timeout超时时间示例ansible node1 -m get_url -a “urlhttps://example.com/file.tar.gz dest/tmp/”