目录
一、ansible常用模块学习说明
1.1 学会使用ansible-doc命令
1.2 Ad-hoc
二、ansible常用模块
2.1 shell模块
2.2 raw模块
2.3 file模块(文件模块)
2.4 copy模块
2.5 yum模块
2.6 user模块与group模块
2.7 service模块
2.8 cron模块
2.9 mount模块
2.10 synchronize模块
2.11 get_url模块
2.12 setup模块
2.13 其它模块
要学好ansible,学习使用ansible常用的模块,是很必要的,所以本篇介绍ansible的常用模块。
一、ansible常用模块学习说明
我们在学习的时候可能只记得某个模块名,大概有什么作用,用到的时候,有时还要是查看一下用户和参数,所以学会使用帮助命令是很有必须的!而 ansible-doc 就是我们想要的。
1.1 学会使用ansible-doc命令
用到模块一般会用到如下的帮助命令,来进行对模块的了解:
ansible-doc -l 列出Ansible系统支持的所有模块
ansible-doc <module_name> 模块的详细说明
ansible-doc -s <module_name> 模块支持的操作,显示playbook片断
1.2 Ad-hoc
Ad-hoc 是指ansible下临时执行的一条命令,并且不需要保存的命令,对于复杂的命令后面会说playbook。讲到Ad-hoc 就要提到模块,所有的命令执行都要依赖于事先写好的模块,默认安装好的ansible 里面已经自带了很多模块,如:command、raw、shell、file、cron等,具体可以通过ansible-doc -l 进行查看 。
PS:这里提Ad-hoc这个并不是命令!而是一个临时执行命令的格式,可以指定模块。
所谓 ad-hoc 命令是什么呢?这其实是一个概念性的名字,是相对于写 Ansible playbook 来说的.类似于在命令行敲入shell命令和 写shell scripts两者之间的关系
一个ad-hoc命令的执行,需要按以下格式进行执行:
ansible 主机或组 -m 模块名 -a '模块参数' ansible参数
- 主机和组,是在/etc/ansible/hosts 里进行指定的部分,当然动态Inventory 使用的是脚本从外部应用里获取的主机
- 模块名,可以通过ansible-doc -l 查看目前安装的模块,默认不指定时,使用的是command模块,具体可以查看/etc/ansible/ansible.cfg 的“#module_name = command ” 部分,默认模块可以在该配置文件中进行修改;
- 模块参数,可以通过 “ansible-doc 模块名” 查看具体的用法及后面的参数;
- ansible参数,可以通过ansible命令的帮忙信息里查看到,这里有很多参数可以供选择,如是否需要输入密码、是否sudo等。
命令执行时间比较长时,也可以放到后台执行,这里会用到-B、-P参数
-B SECONDS, --background SECONDS,default=15 后台运行默认是15秒
-P POLL_INTERVAL, --poll POLL_INTERVAL,轮询间隔,如果是0则表示不轮询,执行一次;如果是非0则表示间隔
如:ansible 192.168.3.21 -B 100 -P 30 -a '命令'
上面命令的意思:-B 100 表示在后台执行,最多100秒;-P 30意思是每隔30秒执行一次命令。这里只能执行3次,第4次已经超过100秒了。
#在后台运行,是看不到结果的,但有job_id号
[root@vm82 ~]# ansible 192.168.3.21 -B 100 -P 0 -a 'hostname'
192.168.3.21 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"ansible_job_id": "67484747359.11028",
"changed": true,
"finished": 0,
"results_file": "/root/.ansible_async/67484747359.11028",
"started": 1
}
#通过 async_status 指定 job_id 号就可以查看到结果了
[root@vm82 ~]# ansible 192.168.3.21 -m async_status -a "jid=67484747359.11028"
192.168.3.21 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"ansible_job_id": "67484747359.11028",
"changed": true,
"cmd": [
"hostname"
],
"delta": "0:00:00.010212",
"end": "2020-09-05 23:58:40.767768",
"finished": 1,
"rc": 0,
"start": "2020-09-05 23:58:40.757556",
"stderr": "",
"stderr_lines": [],
"stdout": "vm821",
"stdout_lines": [
"vm821"
]
}
二、ansible常用模块
操作之前我把ansible hosts配置文件如下:
#查看ansible host配置文件
[root@vm82 ~]# egrep -v '^$|^#' /etc/ansible/hosts
[hua]
192.168.3.21
[h1]
192.168.3.76
2.1
#shell模块用法
ansible-doc shell
#shell模块的playbook剧本摘要
ansible-doc -s shell
默认ansible使用的module 是 command,这个模块并不支持 shell 变量和管道等,若想使用shell 来执行模块,请使用-m 参数指定 shell 模块,但是值得注意的是普通的命令执行模块是通过python的ssh执行。
#查看主机的IP地址,有$的要加转义符反斜杠
[root@vm82 ~]# ansible hua -m shell -a "ip addr|grep 'inet\>'|awk '{print \$2}'"
192.168.3.21 | CHANGED | rc=0 >>
127.0.0.1/8
192.168.128.21/24
192.168.3.21/24
2.2 raw模块
Raw也是命令执行模块,而raw模块则是直接用ssh模块进行执行,通常用在客户机还没有python的环境的时候。
[root@vm82 ~]#ansible hua -m raw -a "echo $TERM"
192.168.3.21 | CHANGED | rc=0 >>
linux
Shared connection to 192.168.3.21 closed.
2.3 file模块(文件模块)
#使用说明
ansible-doc file
file模块主要用于远程主机上的文件操作,file模块包含如下选项:
- force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no
- group:定义文件/目录的属组
- mode:定义文件/目录的权限
- owner:定义文件/目录的属主
- path:必选项,定义文件/目录的路径
- recurse:递归的设置文件的属性,只对目录有效
- src:要被链接的源文件的路径,只应用于state=link的情况
- dest:被链接到的路径,只应用于state=link的情况
state: directory:如果目录不存在,创建目录
file:即使文件不存在,也不会被创建
link:创建软链接
hard:创建硬链接
touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
absent:删除目录、文件或者取消链接文件
例子:
#在hua主机组下建立一个/disk1/tools目录
[root@vm82 ~]# ansible hua -m file -a "dest=/disk1/tools mode=755 state=directory"
192.168.3.21 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"gid": 0,
"group": "root",
"mode": "0755",
"owner": "root",
"path": "/disk1/tools",
"size": 6,
"state": "directory",
"uid": 0
}
#在目标下hua主机组下建立一个/disk1/tools创建一个s2.txt文件
[root@vm82 ~]# ansible hua -m file -a "dest=/disk1/tools/s2.txt state=touch"
192.168.3.21 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"dest": "/disk1/tools/s2.txt",
"gid": 0,
"group": "root",
"mode": "0644",
"owner": "root",
"size": 0,
"state": "file",
"uid": 0
}
#修改文件权限
[root@vm82 ~]# ansible hua -m file -a "dest=/disk1/tools/s2.txt mode=600 owner=daemon"
192.168.3.21 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"gid": 0,
"group": "root",
"mode": "0600",
"owner": "daemon",
"path": "/disk1/tools/s2.txt",
"size": 0,
"state": "file",
"uid": 2
}
#删除文件(如果接的是目录则删除的是目录及下面所有文件)
[root@vm82 ~]# ansible hua -m file -a "dest=/disk1/tools/s2.txt state=absent"
192.168.3.21 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"path": "/disk1/tools/s2.txt",
"state": "absent"
}
2.4 copy模块
实现主控端向目标主机拷贝文件,类似于scp的功能
复制文件到远程主机,copy模块包含如下选项:
- backup:在覆盖之前将原文件备份,备份文件包含时间信息。有两个选项:yes|no
- content:用于替代"src",可以直接设定指定文件的值
- dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录
- directory_mode:递归的设定目录的权限,默认为系统默认权限
- force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
- others:所有的file模块里的选项都可以在这里使用
- src:要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制,类似于rsync。
- validate :The validation command to run before copying into place. The path to the file to validate is passed in via '%s' which must be present as in the visudo example below.
例子:把ansible服务器本地文件/disk1/tools/t1.txt,复制到hua主机组的/disk1下
#ansible本地上创建一个文件
echo "this is ansible of t1.txt">/disk1/tools/t1.txt
#执行
[root@vm82 ~]# ansible hua -m copy -a "src=/disk1/tools/t1.txt dest=/disk1/"
192.168.3.21 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"checksum": "5b3826c075ea02e3432997eba18f61f8bc22a31a",
"dest": "/disk1/t1.txt",
"gid": 0,
"group": "root",
"md5sum": "adffdfbb22fb15ec023d35bae830705b",
"mode": "0644",
"owner": "root",
"size": 26,
"src": "/root/.ansible/tmp/ansible-tmp-1599542722.5104127-4027-24635474292193/source",
"state": "file",
"uid": 0
}
[root@vm82 ~]# ansible hua -a "cat /disk1/t1.txt"
192.168.3.21 | CHANGED | rc=0 >>
this is ansible of t1.txt
注:src源目录是本机所在的目录,drst为目标主机/主机组所在目录
2.5 yum模块
使用yum包管理器来管理软件包,其选项有:
- config_file:yum的配置文件
- disable_gpg_check:关闭gpg_check
- disablerepo:不启用某个源
- enablerepo:启用某个源
- name:要进行操作的软件包的名字,也可以传递一个url或者一个本地的rpm包的路径
- state:状态(present,absent,latest)
#如在hua组上安装nginx指定nginx官方yum源
#对于rpm包我们一起是下载到本地,然后推送过去,安装后之后可以留在哪里也可以删除
cd /disk1/tools
wget http://nginx.org/packages/centos/8/x86_64/RPMS/nginx-1.18.0-1.el8.ngx.x86_64.rpm
ansible hua -m copy -a "src=/disk1/tools/nginx-1.18.0-1.el8.ngx.x86_64.rpm dest=/disk1/tools"
#执行yum安装
ansible hua -m yum -a 'name=/disk1/tools/nginx-1.18.0-1.el8.ngx.x86_64.rpm state=present'
#执行效果
[root@vm82 tools]# ansible hua -m yum -a 'name=/disk1/tools/nginx-1.18.0-1.el8.ngx.x86_64.rpm state=present'
192.168.3.21 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"msg": "",
"rc": 0,
"results": [
"Installed /disk1/tools/nginx-1.18.0-1.el8.ngx.x86_64.rpm",
"Installed: nginx-1:1.18.0-1.el8.ngx.x86_64"
]
}
[root@vm82 tools]# ansible hua -m raw -a "rpm -qa|grep nginx"
192.168.3.21 | CHANGED | rc=0 >>
nginx-1.18.0-1.el8.ngx.x86_64
Shared connection to 192.168.3.21 closed.
[root@vm82 tools]# cd ~
2.6 user模块与group模块
user模块是请求的是useradd, userdel, usermod三个指令,goup模块请求的是groupadd, groupdel, groupmod 三个指令,具体参数这里不再细讲,直接上示例。
#添加用户组t1
ansible hua -m user -a "name=t1 group=t1"
192.168.3.21 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"gid": 1000,
"name": "t1",
"state": "present",
"system": false
}
#添加用户名t1,组名也是t1
[root@vm82 ~]# ansible hua -m user -a "name=t1 group=t1"
192.168.3.21 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"comment": "",
"create_home": true,
"group": 1000,
"home": "/home/t1",
"name": "t1",
"shell": "/bin/bash",
"state": "present",
"system": false,
"uid": 1000
}
#查看一下结果
[root@vm82 ~]# ansible hua -a "id t1"
192.168.3.21 | CHANGED | rc=0 >>
uid=1000(t1) gid=1000(t1) 组=1000(t1)
#删除t1用户
[root@vm82 ~]# ansible hua -m user -a "name=t1 state=absent remove=yes"
192.168.3.21 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"force": false,
"name": "t1",
"remove": true,
"state": "absent"
}
#查看一下
[root@vm82 ~]# ansible hua -m group -a "name=t1 state=absent"
192.168.3.21 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"name": "t1",
"state": "absent"
}
#用户被删除了,所以查不到,属于正常
[root@vm82 ~]# ansible hua -m shell -a "cat /etc/group |grep t1"
192.168.3.21 | FAILED | rc=1 >>
non-zero return code
2.7 service模块
用于管理服务
该模块包含如下选项:
arguments:给命令行提供一些选项
enabled:是否开机启动 yes|no
name:必选项,服务名称
pattern:定义一个模式,如果通过status指令来查看服务的状态时,没有响应,就会通过ps指令在进程中根据该模式进行查找,如果匹配到,则认为该服务依然在运行
runlevel:运行级别
sleep:如果执行了restarted,在则stop和start之间沉睡几秒钟
state:对当前服务执行启动,停止、重启、重新加载等操作(started,stopped,restarted,reloaded)
例子:我们在vm821上,启动nginx服务
#启动服务
ansible hua -m service -a "name=nginx state=started"
#重启
ansible hua -m service -a "name=nginx state=restarted"
#停止
ansible hua -m service -a "name=nginx state=stopped"
#效果
root@vm82 ~]# ansible hua -m service -a "name=nginx state=started"
192.168.3.21 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"name": "nginx",
"state": "started",
"status": {
"ActiveEnterTimestampMonotonic": "0",
"ActiveExitTimestampMonotonic": "0",
"ActiveState": "inactive",
"After": "basic.target systemd-journald.socket system.slice remote-fs.target network-online.target nss-lookup.target sysinit.target",
"AllowIsolate": "no",
"AllowedCPUs": "",
"AllowedMemoryNodes": "",
"AmbientCapabilities": "",
"AssertResult": "no",
"AssertTimestampMonotonic": "0",
"Before": "shutdown.target",
"BlockIOAccounting": "no",
"BlockIOWeight": "[not set]",
"CPUAccounting": "no",
"CPUAffinity": "",
"CPUQuotaPerSecUSec": "infinity",
"CPUSchedulingPolicy": "0",
"CPUSchedulingPriority": "0",
"CPUSchedulingResetOnFork": "no",
"CPUShares": "[not set]",
"CPUUsageNSec": "[not set]",
"CPUWeight": "[not set]",
"CacheDirectoryMode": "0755",
"CanIsolate": "no",
"CanReload": "yes",
"CanStart": "yes",
"CanStop": "yes",
"CapabilityBoundingSet": "cap_chown cap_dac_override cap_dac_read_search cap_fowner cap_fsetid cap_kill cap_setgid cap_setuid cap_setpcap cap_linux_immutable cap_net_bind_service cap_net_broadcast cap_net_admin cap_net_raw cap_ipc_lock cap_ipc_owner cap_sys_module cap_sys_rawio cap_sys_chroot cap_sys_ptrace cap_sys_pacct cap_sys_admin cap_sys_boot cap_sys_nice cap_sys_resource cap_sys_time cap_sys_tty_config cap_mknod cap_lease cap_audit_write cap_audit_control cap_setfcap cap_mac_override cap_mac_admin cap_syslog cap_wake_alarm cap_block_suspend",
...
"ExecReload": "{ path=/bin/kill ; argv[]=/bin/kill -s HUP $MAINPID ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }",
"ExecStart": "{ path=/usr/sbin/nginx ; argv[]=/usr/sbin/nginx -c /etc/nginx/nginx.conf ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }",
"ExecStop": "{ path=/bin/kill ; argv[]=/bin/kill -s TERM $MAINPID ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }",
"FailureAction": "none",
...
"Type": "forking",
"UID": "[not set]",
"UMask": "0022",
"UnitFilePreset": "disabled",
"UnitFileState": "disabled",
"UtmpMode": "init",
"Wants": "network-online.target",
"WatchdogTimestampMonotonic": "0",
"WatchdogUSec": "0"
}
}
2.8 cron模块
用于管理计划任务
包含如下选项:
- backup:对远程主机上的原任务计划内容修改之前做备份
- cron_file:如果指定该选项,则用该文件替换远程主机上的cron.d目录下的用户的任务计划
- day:日(1-31,*,*/2,……)
- hour:小时(0-23,*,*/2,……)
- minute:分钟(0-59,*,*/2,……)
- month:月(1-12,*,*/2,……)
- weekday:周(0-7,*,……)
- job:要执行的任务,依赖于state=present
- name:该任务的描述
- special_time:指定什么时候执行,参数:reboot,yearly,annually,monthly,weekly,daily,hourly
- state:确认该任务计划是创建还是删除
- user:以哪个用户的身份执行
例子:
#在hua组的主同上添加一个定时任务,每3分钟同步时间一次
#增加一个定时任务
[root@vm82 ~]# ansible hua -m cron -a 'name="custom job" minute=*/3 hour=* day=* month=* weekday=* job="/usr/bin/date"'
192.168.3.21 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"envs": [],
"jobs": [
"custom job"
]
}
[root@vm82 ~]# ansible hua -m shell -a "crontab -l|grep -A 1 job"
192.168.3.21 | CHANGED | rc=0 >>
#Ansible: custom job
*/3 * * * * /usr/bin/date
2.9 mount模块
配置挂载点
选项:
dump
fstype:必选项,挂载文件的类型 ,可以是iso9660、ext4、xfs等,卸载不用
- name:必选项,挂载点
- path:挂载路径,如果有name就不用写了,2个只能存一个
- opts:传递给mount命令的参数
- src:必选项,要挂载的文件
- state:必选项
present:只处理fstab中的配置
absent:删除挂载点
mounted:自动创建挂载点并挂载之
unmounted:卸载
例子:
我在vmen821机子上虚拟机弄一个iso文件,我这里随便弄了一个就使用kali的iso文件吧,
现在尝试挂载它原来的挂载命令为“mount /dev/cdrom /mnt/”现在用ansible写为
#挂载iso,name相当于路径,也可以直接改用path,使用命令式不能name和path一起使用
[root@vm82 ~]# ansible hua -m mount -a "name=/mnt src=/disk1/tools/kali-amd64.iso fstype=iso9660 state=mounted"
192.168.3.21 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"dump": "0",
"fstab": "/etc/fstab",
"fstype": "iso9660",
"name": "/mnt",
"opts": "defaults",
"passno": "0",
"src": "/disk1/tools/kali-amd64.iso"
}
[root@vm82 ~]# ansible hua -m shell -a "ls -l /mnt"
192.168.3.21 | CHANGED | rc=0 >>
总用量 969
-r--r--r-- 1 root root 140 7月 29 04:31 autorun.inf
dr-xr-xr-x 1 root root 2048 7月 29 04:31 boot
lr-xr-xr-x 1 root root 1 7月 29 04:31 debian -> .
dr-xr-xr-x 1 root root 2048 7月 29 04:31 dists
dr-xr-xr-x 1 root root 2048 7月 29 04:31 EFI
dr-xr-xr-x 1 root root 6144 7月 29 04:31 firmware
-r--r--r-- 1 root root 183580 7月 10 15:41 g2ldr
-r--r--r-- 1 root root 8192 7月 10 15:41 g2ldr.mbr
dr-xr-xr-x 1 root root 2048 7月 29 04:31 install
dr-xr-xr-x 1 root root 2048 7月 29 04:31 install.amd
dr-xr-xr-x 1 root root 6144 7月 29 04:31 isolinux
-r--r--r-- 1 root root 91178 7月 29 04:31 md5sum.txt
dr-xr-xr-x 1 root root 4096 7月 29 04:31 pics
dr-xr-xr-x 1 root root 2048 7月 29 04:31 pool
-r--r--r-- 1 root root 195 7月 29 04:31 README.html
-r--r--r-- 1 root root 84 7月 29 04:31 README.txt
-r--r--r-- 1 root root 675381 7月 10 15:41 setup.exe
dr-xr-xr-x 1 root root 2048 7月 29 04:31 simple-cdd
-r--r--r-- 1 root root 233 7月 29 04:31 win32-loader.ini
#卸载命令,只需要指定路径即可
[root@vm82 ~]# ansible hua -m mount -a "path=/mnt state=unmounted"
192.168.3.21 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"dump": "0",
"fstab": "/etc/fstab",
"name": "/mnt",
"opts": "defaults",
"passno": "0"
}
2.10 synchronize模块
使用rsync同步文件,其参数如下:
- archive: 归档,相当于同时开启recursive(递归)、links、perms、times、owner、group、-D选项都为yes ,默认该项为开启
- checksum: 跳过检测sum值,默认关闭
- compress:是否开启压缩
- copy_links:复制链接文件,默认为no ,注意后面还有一个links参数
- delete: 删除不存在的文件,默认no
- dest:目录路径
- dest_port:默认目录主机上的端口 ,默认是22,走的ssh协议
- dirs:传速目录不进行递归,默认为no,即进行目录递归
- rsync_opts:rsync参数部分
- set_remote_user:主要用于/etc/ansible/hosts中定义或默认使用的用户与rsync使用的用户不同的情况
- mode: push或pull 模块,push模的话,一般用于从本机向远程主机上传文件,pull 模式用于从远程主机上取文件
另外还有其他参数,这里不再一一说明。
#该模板默认使用的是push,即推送。若要实现拉取得功能,则指定mode=pull
#在ansible本地建立一个t2.txt
echo 'this is ansible of t2.txt' > /disk1/t2.txt
#把ansible本地的t2.txt文件推荐到 hua主机组所有主机的 /disk1/tools中
[root@vm82 ~]# ansible hua -m synchronize -a 'src=/disk1/t2.txt dest=/disk1/tools'
192.168.3.21 | CHANGED => {
"changed": true,
"cmd": "/usr/bin/rsync --delay-updates -F --compress --archive --rsh=/usr/bin/ssh -S none -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null --out-format=<<CHANGED>>%i %n%L /disk1/t2.txt 192.168.3.21:/disk1/tools",
"msg": "<f+++++++++ t2.txt\n",
"rc": 0,
"stdout_lines": [
"<f+++++++++ t2.txt"
]
}
[root@vm82 ~]# ansible hua -m shell -a "cat /disk1/tools/t2.txt"
192.168.3.21 | CHANGED | rc=0 >>
this is ansible of t2.txt
PS:注意,主的是是ansible本地文件同步到远程!
2.11 get_url模块
该模块主要用于从http、ftp、https服务器上下载文件(类似于wget),主要有如下选项:
sha256sum:下载完成后进行sha256 check;
timeout:下载超时时间,默认10s
url:下载的URL
url_password、url_username:主要用于需要用户名密码进行验证的情况
use_proxy:是事使用代理,代理需事先在环境变更中定义
例子:
#下载你百度首页文件到hua主机组/disk1/tools下
[root@vm82 ~]# ansible hua -m get_url -a "url=http://www.baidu.com dest=/disk1/tools"
192.168.3.21 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"checksum_dest": null,
"checksum_src": "b3fce75f45aaa27939e51f0c74018b1e131890a5",
"dest": "/disk1/tools/index.html",
"elapsed": 0,
"gid": 0,
"group": "root",
"md5sum": "657b38683cf877eca9db809bad4b7c94",
"mode": "0644",
"msg": "OK (unknown bytes)",
"owner": "root",
"size": 284471,
"src": "/root/.ansible/tmp/ansible-tmp-1599551660.5824263-5386-133816260040569/tmpfwwtk57e",
"state": "file",
"status_code": 200,
"uid": 0,
"url": "http://www.baidu.com"
}
[root@vm82 ~]# ansible hua -a 'ls -l /disk1/tools/index.html'
192.168.3.21 | CHANGED | rc=0 >>
-rw-r--r-- 1 root root 284471 9月 8 15:54 /disk1/tools/index.html
2.12 setup模块
#查看主机信息
ansible hua -m setup -a 'filter=ansible_*_mb'
#查看地接口为ens33 ens34的网卡信息
ansible hua -m setup -a 'filter=ansible_ens3[3-4]'
#将所有主机的信息输入到/tmp/facts目录下,每台主机的信息输入到主机名文件中
#(/etc/ansible/hosts里的主机名)
ansible hua -m setup --tree /tmp/facts