Ansible常用模块

目录

  • 1.主机连通性测试
  • 2.command模块
  • 3.shell模块
  • 4.copy模块
  • 5.file模块
  • 6.fetch模块
  • 7.cron模块
  • 8.yum模块
  • 9.service模块
  • 10.user模块
  • 11.group模块
  • 12.script模块
  • 13.setup模块

Ansible常用模块

1.主机连通性测试

[root@tdm1 ~]# ansible  web -m ping
47.93.98.117 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

这样就说明我们主机是连通状态,后续的操作正常进行

2.command模块

该模块可以在远程主机上执行命令,并将结果返回给本机

[root@tdm1 ~]# ansible  web -m command  -a 'netstat -lntup'
47.93.98.117 | CHANGED | rc=0 >>
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      551/rpcbind         
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1091/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1087/master         
tcp6       0      0 :::111                  :::*                    LISTEN      551/rpcbind         
tcp6       0      0 ::1:25                  :::*                    LISTEN      1087/master         
udp        0      0 127.0.0.1:323           0.0.0.0:*                           535/chronyd         
udp        0      0 0.0.0.0:719             0.0.0.0:*                           551/rpcbind         
udp        0      0 0.0.0.0:68              0.0.0.0:*                           795/dhclient        
udp        0      0 0.0.0.0:111             0.0.0.0:*                           551/rpcbind         
udp6       0      0 ::1:323                 :::*                                535/chronyd         
udp6       0      0 :::719                  :::*                                551/rpcbind         
udp6       0      0 :::111                  :::*                                551/rpcbind 

命令模块接受命令名称,后面是空格分隔的列表参数。给定的命令将在所有选定的节点上执行。它不会通过 shell 进行处理,比如 $HOME 和操作如 "<",">","|",";","&" 工作(需要使用( shell )模块实现这些功能)。注意,该命令不支持| 管道命令。下面来看一看该模块下常用的几个命令:

chdir       # 在执行命令之前,先切换到该目录
executable       # 切换 shell 来执行命令,需要使用命令的绝对路径
free_form       # 要执行的 Linux 指令,一般使用 Ansible 的 -a 参数代替。
creates         # 一个文件名,当这个文件存在,则该命令不执行,可以用来做判断
removes          # 一个文件名,这个文件不存在,则该命令不执行

测试

[root@tdm1 ~]# ansible web -m command -a 'chdir=/root/ ls'
47.93.98.117 | CHANGED | rc=0 >>
abc.txt
root@tdm1
tdm2.txt
[root@tdm1 ~]# ansible web -m command -a 'creates=/root/abc.txt ls'   #如果abc.txt文件在,则不执行ls命令
47.93.98.117 | SUCCESS | rc=0 >>
skipped, since /root/abc.txt exists
[root@tdm1 ~]# ansible web -m command -a 'removes=/root/abc.txt ls'   #如果abc.txt文件在,则执行ls命令
47.93.98.117 | CHANGED | rc=0 >>
abc.txt
root@tdm1
tdm2.txt

3.shell模块

shell模块可以在远程主机上调用shell解释器运行命令,支持shell各种功能

[root@tdm1 ~]# ansible web -m shell -a 'cat /etc/passwd | grep root'
47.93.98.117 | CHANGED | rc=0 >>
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

4.copy模块

该模块用于将文件复制到远程主机,同时支持给定内容生成文件和修改权限登

src     #被复制到远程主机的本地文件。可以是绝对路径,也可以是相对路径。如果路径是一个目录,则会递归复制,用法类似于 "rsync"
content #用于替换 "src",可以直接指定文件的值
dest    #必选项,将源文件复制到的远程主机的绝对路径
backup  #当文件内容发生改变后,在覆盖之前把源文件备份,备份文件包含时间信息
directory_mode #递归设定目录的权限,默认为系统默认权限
force   #当目标主机包含该文件,但内容不同时,设为 "yes",表示强制覆盖;设为 "no",表示目标主机的目标位置不存在该文件才复制。默认为 "yes"
others  #所有的 file 模块中的选项可以在这里使用

测试
1.复制文件

[root@tdm1 ~]# ansible  web -m copy -a 'src=/root/hello dest=/root/'
47.93.98.117 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", 
    "dest": "/root/hello", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e", 
    "mode": "0644", 
    "owner": "root", 
    "size": 0, 
    "src": "/root/.ansible/tmp/ansible-tmp-1693292079.78-22690-71230918611926/source", 
    "state": "file", 
    "uid": 0
}

#查看
[root@tdm2 ~]# ll
total 0
-rw-r--r-- 1 root root 0 Aug 29 14:54 hello
[root@tdm2 ~]# 

2.给定内容生成文件,并制定权限

[root@tdm1 ~]# ansible web -m copy -a 'content="I am king\n" dest=/root/name mode=666'
47.93.98.117 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "339cdafdbfde0e371162aded48e32d135045751d", 
    "dest": "/root/name", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "fe4c40566a6a19975af1a3353cce507d", 
    "mode": "0666", 
    "owner": "root", 
    "size": 10, 
    "src": "/root/.ansible/tmp/ansible-tmp-1693292971.49-30234-99806702984952/source", 
    "state": "file", 
    "uid": 0
}

验证生成的文件和权限

[root@tdm1 ~]# ansible  web -m shell  -a 'ls -l /root'
47.93.98.117 | CHANGED | rc=0 >>
total 4
-rw-rw-rw- 1 root root 10 Aug 29 15:09 name

文件已经生成,权限是666
3.关于覆盖
修改文件内容,选择覆盖备份

[root@tdm1 ~]# ansible web -m copy -a 'content="I am kingdom\n" backup=yes dest=/root/name'
47.93.98.117 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "backup_file": "/root/name.17027.2023-08-29@15:14:18~", 
    "changed": true, 
    "checksum": "43c4a1712a4f91fd0e42aba43e3ce661862de578", 
    "dest": "/root/name", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "dd519715b7ca2285dd844ec066763aed", 
    "mode": "0666", 
    "owner": "root", 
    "size": 13, 
    "src": "/root/.ansible/tmp/ansible-tmp-1693293257.56-32694-151196578742125/source", 
    "state": "file", 
    "uid": 0
}

查看一下备份情况和文件内容

[root@tdm1 ~]# ansible web -m shell -a 'ls -l /root'
47.93.98.117 | CHANGED | rc=0 >>
total 8
-rw-rw-rw- 1 root root 13 Aug 29 15:14 name
-rw-rw-rw- 1 root root 10 Aug 29 15:09 name.17027.2023-08-29@15:14:18~

[root@tdm1 ~]#  ansible web -m shell -a 'cat /root/name'
47.93.98.117 | CHANGED | rc=0 >>
I am kingdom

5.file模块

该模块主要用于设置文件的属性:创建文件、创建链接文件、删除文件登。

force    #需要在两种情况下强制创建软链接,一种是源文件不存在,但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no
group    #定义文件/目录的属组。后面可以加上mode:定义文件/目录的权限
owner    #定义文件/目录的属主。后面必须跟上path:定义文件/目录的路径
recurse  #递归设置文件的属性,只对目录有效,后面跟上src:被链接的源文件路径,只应用于state=link的情况
dest     #被链接到的路径,只应用于state=link的情况

state    #状态,有以下选项:
directory:如果目录不存在,就创建目录
file:     即使文件不存在,也不会被创建
link:     创建软链接
hard:     创建硬链接
touch:    如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
absent:   删除目录、文件或者取消链接文件

1.创建目录

[root@tdm1 ~]# ansible web -m file -a 'path=/root/app state=directory'
47.93.98.117 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "gid": 0, 
    "group": "root", 
    "mode": "0755", 
    "owner": "root", 
    "path": "/root/app", 
    "size": 4096, 
    "state": "directory", 
    "uid": 0
}

#查看目录
[root@tdm1 ~]# ansible web -m shell -a 'ls -l /root'
47.93.98.117 | CHANGED | rc=0 >>
total 4
drwxr-xr-x 2 root root 4096 Aug 29 15:38 app

2.创建链接文件

[root@tdm1 ~]# ansible web -m file -a 'path=/root/bbb.txt src=/root/aaa.txt state=link'
47.93.98.117 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "dest": "/root/bbb.txt", 
    "gid": 0, 
    "group": "root", 
    "mode": "0777", 
    "owner": "root", 
    "size": 13, 
    "src": "/root/aaa.txt", 
    "state": "link", 
    "uid": 0
}

#查看链接
[root@tdm1 ~]# ansible web -m shell -a 'ls -l /root'
47.93.98.117 | CHANGED | rc=0 >>
total 0
-rw-r--r-- 1 root root  0 Aug 29 16:31 aaa.txt
lrwxrwxrwx 1 root root 13 Aug 29 16:32 bbb.txt -> /root/aaa.txt

3.删除文件

[root@tdm1 ~]# ansible web -m file -a 'path=/root/bbb.txt state=absent'
47.93.98.117 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "path": "/root/bbb.txt", 
    "state": "absent"
}

#查看
[root@tdm1 ~]# ansible  web -m shell -a 'ls -l /root'
47.93.98.117 | CHANGED | rc=0 >>
total 0

6.fetch模块

该模块用于从远程主机获取(复制)文件到本地

dest   #用来存放文件的目录
src    #在远程拉去的文件,必须是一个file,不能是目录

测试

[root@tdm1 ~]# ansible web -m fetch -a 'src=/root/test.txt dest=/root'
47.93.98.117 | CHANGED => {
    "changed": true, 
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", 
    "dest": "/root/47.93.98.117/root/test.txt", 
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e", 
    "remote_checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", 
    "remote_md5sum": null
}

#查看
[root@tdm1 ~]# ll
total 4
drwxr-xr-x 3 root root 4096 Aug 29 16:49 47.93.98.117
[root@tdm1 ~]# cd 47.93.98.117/
[root@tdm1 47.93.98.117]# ll
total 4
drwxr-xr-x 2 root root 4096 Aug 29 16:49 root
[root@tdm1 47.93.98.117]# cd root/
[root@tdm1 root]# ll
total 0
-rw-r--r-- 1 root root 0 Aug 29 16:49 test.txt

7.cron模块

该模块适用于管理cron计划任务的,使用的语法跟我们的crontab文件中的语法一致,可以指定选项

day=         #日应该运行的工作( 1-31, *, */2, )
hour=        # 小时 ( 0-23, *, */2, )
minute=      #分钟( 0-59, *, */2, )
month=       # 月( 1-12, *, /2, )
weekday=     # 周 ( 0-6 for Sunday-Saturday,, )
job=         #指明运行的命令是什么
name=        #定时任务描述
reboot       # 任务在重启时运行,不建议使用,建议使用 special_time
special_time #特殊的时间范围,参数:reboot(重启时),annually(每年),monthly(每月),weekly(每周),daily(每天),hourly(每小时)
state        #指定状态,present 表示添加定时任务,也是默认设置,absent 表示删除定时任务
user         # 以哪个用户的身份执行

1.添加计划任务

[root@tdm1 root]# ansible web -m cron -a 'name="restart nginx every 5 minutes" minute=*/5 job="/usr/local/nginx/sbin/nginx -s reload >>/dev/dull  2>&1"'
47.93.98.117 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "envs": [], 
    "jobs": [
        "restart nginx every 5 minutes"
    ]
}

#查看
[root@tdm1 root]# ansible web -m shell -a 'crontab -l'
47.93.98.117 | CHANGED | rc=0 >>
#Ansible: restart nginx every 5 minutes
*/5 * * * * /usr/local/nginx/sbin/nginx -s reload >>/dev/dull  2>&1

2.删除计划任务

[root@tdm1 root]# ansible web -m shell -a 'crontab -l'
47.93.98.117 | CHANGED | rc=0 >>
#Ansible: restart nginx every 5 minutes
*/5 * * * * /usr/local/nginx/sbin/nginx -s reload >>/dev/dull  2>&1

[root@tdm1 root]# ansible web -m cron -a 'name="restart nginx every 5 minutes" minute=*/5 job="/usr/local/nginx/sbin/nginx -s reload >>/dev/dull  2>&1" state=absent'
47.93.98.117 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "envs": [], 
    "jobs": []
}

#查看
[root@tdm1 root]# ansible web -m shell -a 'crontab -l'
47.93.98.117 | CHANGED | rc=0 >>

8.yum模块

该模块用于安装软件

name=        #所安装的包的名称
state=       #present--->安装, latest--->安装最新的, absent---> 卸载软件。
update_cache #强制更新yum的缓存
conf_file    #指定远程yum安装时所依赖的配置文件(安装本地已有的包)。
disable_pgp_check #是否禁止GPG checking,只用于presentor latest。
disablerepo  #临时禁止使用yum库。 只用于安装或更新时。
enablerepo   #临时使用的yum库。只用于安装或更新时。

测试

[root@tdm1 root]# ansible web -m yum -a 'name="htop" state=present'
47.93.98.117 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "changes": {
        "installed": [
            "htop"
        ]
    }, 
    "msg": "", 
    "rc": 0, 
    "results": [
        "Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\nResolving Dependencies\n--> Running transaction check\n---> Package htop.x86_64 0:2.2.0-3.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package         Arch              Version                Repository       Size\n================================================================================\nInstalling:\n htop            x86_64            2.2.0-3.el7            epel            103 k\n\nTransaction Summary\n================================================================================\nInstall  1 Package\n\nTotal download size: 103 k\nInstalled size: 218 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Installing : htop-2.2.0-3.el7.x86_64                                      1/1 \n  Verifying  : htop-2.2.0-3.el7.x86_64                                      1/1 \n\nInstalled:\n  htop.x86_64 0:2.2.0-3.el7                                                     \n\nComplete!\n"
    ]
}
[root@tdm1 root]# 

9.service模块

该模块用于服务程序的管理

arguments #命令行提供额外的参数
enabled   #设置开机启动。
name=     #服务名称
runlevel  #开机启动的级别,一般不用指定。
sleep     #在重启服务的过程中,是否等待。如在服务关闭以后等待2秒再启动。(定义在剧本中。)
state     #有四种状态,分别为:started --->启动服务, stopped --->停止服务, restarted --->重启服务, reloaded --->重载配置

1.开启服务并设置自启动

[root@tdm1 ~]# ansible web -m service -a 'name="nfs" state=started enabled=true'
47.93.98.117 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "enabled": true, 
    "name": "nfs", 
    "state": "started", 
    "status": {
     。。。。。。
    }
}

#查看
[root@tdm1 ~]# ansible web -m shell -a 'ps -ef | grep nfs'
47.93.98.117 | CHANGED | rc=0 >>
root     29020     2  0 17:41 ?        00:00:00 [nfsd4_callbacks]
root     29026     2  0 17:41 ?        00:00:00 [nfsd]
root     29027     2  0 17:41 ?        00:00:00 [nfsd]
root     29028     2  0 17:41 ?        00:00:00 [nfsd]
root     29029     2  0 17:41 ?        00:00:00 [nfsd]
root     29030     2  0 17:41 ?        00:00:00 [nfsd]
root     29031     2  0 17:41 ?        00:00:00 [nfsd]
root     29032     2  0 17:41 ?        00:00:00 [nfsd]
root     29033     2  0 17:41 ?        00:00:00 [nfsd]
root     29473 29472  0 17:42 pts/1    00:00:00 /bin/sh -c ps -ef | grep nfs
root     29475 29473  0 17:42 pts/1    00:00:00 /bin/sh -c ps -ef | grep nfs

2.关闭服务

[root@tdm1 ~]# ansible web -m service -a 'name="nfs" state=stopped'
47.93.98.117 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "name": "nfs", 
    "state": "stopped", 
  ......
    }
}

#查看,nfs服务已经关闭
[root@tdm1 ~]# ansible web -m shell -a 'ps -ef | grep nfs' 
47.93.98.117 | CHANGED | rc=0 >>
root     31181 31180  0 17:45 pts/1    00:00:00 /bin/sh -c ps -ef | grep nfs
root     31183 31181  0 17:45 pts/1    00:00:00 /bin/sh -c ps -ef | grep nfs

10.user模块

该模块主要用来管理用户账号

comment    # 用户的描述信息
createhome # 是否创建家目录
force      # 在使用 state=absent 时, 行为与 userdel –force 一致.
group      # 指定基本组
groups     # 指定附加组,如果指定为( groups= )表示删除所有组
home       # 指定用户家目录
move_home  # 如果设置为 home= 时, 试图将用户主目录移动到指定的目录
name       # 指定用户名
non_unique # 该选项允许改变非唯一的用户ID值
password   # 指定用户密码
remove     # 在使用 state=absent 时, 行为是与 userdel –remove 一致
shell      # 指定默认 shell
state      # 设置帐号状态,不指定为创建,指定值为 absent 表示删除
system     # 当创建一个用户,设置这个用户是系统用户。这个设置不能更改现有用户
uid        # 指定用户的 uid

1.添加一个用户并制定uid

[root@tdm1 ~]# ansible web -m user -a 'name="tdm" uid=11111 shell="/sbin/nologin"'
47.93.98.117 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "comment": "", 
    "create_home": true, 
    "group": 11111, 
    "home": "/home/tdm", 
    "name": "tdm", 
    "shell": "/sbin/nologin", 
    "state": "present", 
    "system": false, 
    "uid": 11111
}

#查看
[root@tdm1 ~]# ansible web -m shell -a 'cat /etc/passwd | grep tdm'
47.93.98.117 | CHANGED | rc=0 >>
tdm:x:11111:11111::/home/tdm:/sbin/nologin

2.删除账户

[root@tdm1 ~]# ansible web -m user -a 'name="tdm" state=absent'
47.93.98.117 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "force": false, 
    "name": "tdm", 
    "remove": false, 
    "state": "absent"
}

#查看
[root@tdm1 ~]# ansible web -m shell -a 'cat /etc/passwd | grep tdm'
47.93.98.117 | FAILED | rc=1 >>
non-zero return code

11.group模块

该模块用于添加或删除组

gid=    #设置组的 GID 号
name=   #指定组的名称
state=  #指定组的状态,默认为创建,设置值为 absent 为删除
system= #设置值为 yes,表示创建为系统组

1.创建组

[root@tdm1 ~]# ansible web -m group -a 'name="TDM" gid=22222'
47.93.98.117 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "gid": 22222, 
    "name": "TDM", 
    "state": "present", 
    "system": false
}

#查看
[root@tdm1 ~]# ansible web -m shell -a 'cat /etc/group | grep TDM'
47.93.98.117 | CHANGED | rc=0 >>
TDM:x:22222:

2.删除组

[root@tdm1 ~]# ansible web -m group -a 'name="TDM" state=absent'
47.93.98.117 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "name": "TDM", 
    "state": "absent"
}

#查看
[root@tdm1 ~]# ansible web -m shell -a 'cat /etc/group | grep TDM'
47.93.98.117 | FAILED | rc=1 >>
non-zero return code

12.script模块

该模块使用本机的脚本在被管理的机器上运行

[root@tdm1 ~]# vim /tmp/df.sh
 
#!/bin/bash
date >> /tmp/disk_total.log
df -lh >> /tmp/disk_total.log
 
[root@tdm1 ~]# chmod +x /tmp/df.sh

运行脚本并查看

[root@tdm1 ~]# ansible web -m script -a '/tmp/df.sh'
47.93.98.117 | CHANGED => {
    "changed": true, 
    "rc": 0, 
    "stderr": "Shared connection to 47.93.98.117 closed.\r\n", 
    "stderr_lines": [
        "Shared connection to 47.93.98.117 closed."
    ], 
    "stdout": "", 
    "stdout_lines": []
}

#查看
[root@tdm1 ~]# ansible web -m shell -a 'cat /tmp/disk_total.log'
47.93.98.117 | CHANGED | rc=0 >>
Tue Aug 29 18:14:30 CST 2023
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        868M  4.0K  868M   1% /dev
tmpfs           879M     0  879M   0% /dev/shm
tmpfs           879M  528K  878M   1% /run
tmpfs           879M     0  879M   0% /sys/fs/cgroup
/dev/vda1        40G  6.0G   32G  17% /
tmpfs           176M     0  176M   0% /run/user/0

13.setup模块

该模块用来收集信息,通过调用facts组件来实现的。我们可以使用 setup 模块查机器的所有 facts 信息,可以使用 filter 来查看指定信息。整个facts信息被包装在一个 JSON 格式的数据结构中,ansible_facts 是最上层的值。facts 就是变量,内建变量 。每个主机的各种信息,cpu 颗数、内存大小等。会存在 facts 中的某个变量中
1.查看信息

[root@tdm1 ~]# ansible web -m setup -a 'filter="*mem*"'
47.93.98.117 | SUCCESS => {
    "ansible_facts": {
        "ansible_memfree_mb": 494, 
        "ansible_memory_mb": {
            "nocache": {
                "free": 1531, 
                "used": 225
            }, 
            "real": {
                "free": 494, 
                "total": 1756, 
                "used": 1262
            }, 
            "swap": {
                "cached": 0, 
                "free": 0, 
                "total": 0, 
                "used": 0
            }
        }, 
        "ansible_memtotal_mb": 1756, 
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false
}
[root@tdm1 ~]# 

通过命令查看的,对比是否一致

[root@tdm1 ~]# ansible web -m shell -a 'free -m'
47.93.98.117 | CHANGED | rc=0 >>
              total        used        free      shared  buff/cache   available
Mem:           1756         147         494           0        1114        1442
Swap:             0           0           0

参考大佬:https://zhanghaiyang.blog.csdn.net/article/details/122089769

你可能感兴趣的:(Ansible,ansible,运维)