天天看点

hualinux 进阶 2-1.3:ansible常用模块

目录

​​一、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      

2.13 其它模块

继续阅读