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 }
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 }
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 }
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 }
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