Files modules(copy file fetch)

copy – Copy files to remote locations

把主控节点本地的文件上传同步到远程受控节点上, 该模块不支持从远程受控节点拉取文件到主控节点上。 参数选项如下:
src:指定源文件路径,可以是相对路径,也可以是绝对路径,可以是目录(并非是必须的,可以使用content,直接生成文件内容). src即是要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用”/”来结尾,则只复制目录里的内容,如果没有使用”/”来结尾,则包含目录在内的整个内容全部复制,类似于rsync。
dest:指定目标文件路径,只能是绝对路径,如果src是目录,此项必须是目录. 这个是必选项!
owner:指定属主;
group:指定属组;
mode:指定权限,可以以数字指定比如0644;
content:代替src,直接往dest文件中写内容,可以引用变量,也可以直接使用inventory中的主机变量. 写后会覆盖原文件内容!
backup:在覆盖之前将原文件备份,备份文件包含时间信息。有两个选项:yes|no
force: 如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes ;
directory_mode:递归的设定目录的权限,默认为系统默认权限;
others:所有的file模块里的选项都可以在这里使用;

特别注意:  src和content不能同时使用!!!! 

root@ansible-server:~$ ansible 192.168.1.38 -m copy -a "src=/home/gota/test.sh dest=/work/file"
192.168.1.38 | CHANGED => {  ###对哪台主机进行操作
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true,  ###是否对主机信息进行改变
    "checksum": "dcaa896be5c669bbfcc657cc25452d46962aedb6", #???
    "dest": "/work/file/test.sh",  #显示目标路径信息
    "gid": 0,         #复制后的文件gid信息
    "group": "root",  #显示复制后文件属组信息
    "md5sum": "bf53066b75afbc91cd8917d43e10880d", #test.sh文件的md5值
    "mode": "0644",  #显示复制后文件的权限信息
    "owner": "root", #显示复制后文件的属主信息
    "size": 637,     #显示复制后文件的大小信息
    "src": "/root/.ansible/tmp/ansible-tmp-1564988630.38-248746591491638/source", 
    "state": "file",  #显示当前操作的是一个文件
    "uid": 0          #显示复制后文件uid信息
}

1、在传输文件时修改文件的属主和属组信息 

[root@ansble-server ansible]# ansible 10.192.27.115 -m copy -a "src=/home/ansible/lnmp_deploy.sh dest=/data/ owner=mysql group=mysql"
10.192.27.115 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "462cc62be4f5eabb2c4b887e922608a1cd82474a", 
    "dest": "/data/lnmp_deploy.sh", 
    "gid": 1000, 
    "group": "mysql", 
    "mode": "0644", 
    "owner": "mysql", 
    "path": "/data/lnmp_deploy.sh", 
    "size": 16818, 
    "state": "file", 
    "uid": 1000
}
ansible 10.192.27.115 -m copy -a "src=/home/ansible/lnmp_deploy.sh dest=/data/ owner=mysql group=mysql"

2、在传输文件时修改文件的权限信息(以后没事看看Linux特殊文件权限有三个玩意:sticky bit、SGID、SUID)

[root@ansible-server ansible]# ansible 10.192.27.115 -m copy -a "src=/home/ansible/lnmp_deploy.sh dest=/data/ mode=1777"
10.192.27.115 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "462cc62be4f5eabb2c4b887e922608a1cd82474a", 
    "dest": "/data/lnmp_deploy.sh", 
    "gid": 0, 
    "group": "root", 
    "mode": "01777", 
    "owner": "root", 
    "path": "/data/lnmp_deploy.sh", 
    "size": 16818, 
    "state": "file", 
    "uid": 0
}
ansible 10.192.27.115 -m copy -a "src=/home/ansible/lnmp_deploy.sh dest=/data/ mode=1777"

 3、在传输数据文件信息时,远程主机中已经存在的源文件 :如果backup=yes,就是生成一个源文件的备份文件,否则则直接覆盖

[root@ansible-server ansible]# ansible 10.192.27.115 -m copy -a "src=/home/ansible/lnmp_deploy.sh dest=/data/ backup=yes"
10.192.27.115 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "backup_file": "/data/lnmp_deploy.sh.21708.2020-04-01@14:16:56~", 
    "changed": true, 
    "checksum": "3e45de4e26e36e966c28f59ccb6787dab1a34e0a", 
    "dest": "/data/lnmp_deploy.sh", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "c5eaae0c74503a4c33373945d191edb5", 
    "mode": "01777", 
    "owner": "root", 
    "size": 16822, 
    "src": "/root/.ansible/tmp/ansible-tmp-1585721824.6-19759395643049/source", 
    "state": "file", 
    "uid": 0
}
ansible 10.192.27.115 -m copy -a "src=/home/ansible/lnmp_deploy.sh dest=/data/ backup=yes"

 4、创建一个文件并直接编辑文件的内容 或覆盖一个已有文件的内容

[root@ansible-server ansible]# ansible 10.192.27.115 -m copy -a "content='oldboy' dest=/data/lnmp_deploy.sh"
10.192.27.115 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "da3a7ab3551120059810d0c7156a8150a0bc245a", 
    "dest": "/data/lnmp_deploy.sh", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "890b185727556f1be31d7fe5ee5ce4dc", 
    "mode": "01777", 
    "owner": "root", 
    "size": 6, 
    "src": "/root/.ansible/tmp/ansible-tmp-1585724141.05-258435538166891/source", 
    "state": "file", 
    "uid": 0
}
[root@ansible-server ansible]# ansible 10.192.27.115 -m copy -a "content='oldboy' dest=/data/haha.sh"
10.192.27.115 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "da3a7ab3551120059810d0c7156a8150a0bc245a", 
    "dest": "/data/haha.sh", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "890b185727556f1be31d7fe5ee5ce4dc", 
    "mode": "0644", 
    "owner": "root", 
    "size": 6, 
    "src": "/root/.ansible/tmp/ansible-tmp-1585724331.23-86897353811244/source", 
    "state": "file", 
    "uid": 0
}
ansible 10.192.27.115 -m copy -a "content='oldboy' dest=/data/lnmp_deploy.sh"

file – Manage files and file properties

file模块主要用于远程主机上的文件操作,file模块包含如下选项:
force: 需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项: yes|no
group: 定义文件/目录的属组
mode: 定义文件/目录的权限
owner: 定义文件/目录的属主
path: 必选项,定义文件/目录的路径
recurse: 递归的设置文件的属性,只对目录有效
src: 要被链接的源文件的路径,只应用于state=link的情况
dest: 被链接到的路径,只应用于state=link的情况
state: 表示file的状态, 主要分为:
directory: 如果目录不存在,创建目录;
file: 即使文件不存在,也不会被创建;
link: 创建软链接;
hard: 创建硬链接;
touch: 如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间;
absent: 删除目录、文件或者取消链接文件;

file模块创建空文件不行,适合设置文件属性 。空文件可以用copy

空文件创建报错
gota@gota-linux61:~$ ansible 192.168.1.20 -m file -a "dest=/work/file/haha.txt owner=gota group=gota mode=666" 192.168.1.20 | FAILED! => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "msg": "file (/work/file/haha.txt) is absent, cannot continue", "path": "/work/file/haha.txt" } gota@gota-linux61:~$ ansible 192.168.1.38 -m file -a "dest=/work/file/haha.txt owner=gota group=gota mode=666" 192.168.1.38 | CHANGED => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": true, "gid": 1000, "group": "gota", "mode": "0666", "owner": "gota", "path": "/work/file/haha.txt", "size": 5, "state": "file", "uid": 1000 }

 

fetch – Fetch files from remote nodes

gota@gota-linux61:~$ ansible 192.168.1.38 -m fetch -a "src=/work/ansible/test.sh dest=/tmp"
192.168.1.38 | CHANGED => {
    "changed": true, 
    "checksum": "dcaa896be5c669bbfcc657cc25452d46962aedb6", 
    "dest": "/tmp/192.168.1.38/work/ansible/test.sh", 
    "md5sum": "bf53066b75afbc91cd8917d43e10880d", 
    "remote_checksum": "dcaa896be5c669bbfcc657cc25452d46962aedb6", 
    "remote_md5sum": null
}
gota@gota-linux61:~$ ls /tmp/192.168.1.38/work/ansible/test.sh 
/tmp/192.168.1.38/work/ansible/test.sh

数据移动模块:copy模块、fetch模块、synchronize模块数据移动原理图

原文地址:https://www.cnblogs.com/linux985/p/11303010.html