ansible批量推送本地文件到目标机器

avatar 2021年3月13日18:12:30 评论 1,888 次浏览

在工作中,批量执行一些操作很有必要,比如我写了一个脚本,但是这个脚本可以在每一个机器都可以执行。举个例子:我在我的k8s环境中,所有的node节点上因为长时间的更新操作,导致下载的镜像过多,占用过多的空间资源,所以,就写了一个脚本批量删除镜像的脚本,但是这个脚本在我电脑本地,已经测试过了没有问题,下面就需要copy到目标机器上,方便批量执行了。

先看一下我的ansible的配置吧,我根据自己的需求划分后,不通的需求不通的文件里

[root@www.wulaoer.org ~]# cat ops_10_16
[ops_tools]
ali-bj-g-ops-web ansible_ssh_user=root ansible_ssh_host=10.16.208.133 ansible_ssh_port=11011

下面我就把本地的脚本推动到目标机器上,这里用到了ansible的copy模块,src是本地的文件路径,dest是目标路径。

[root@www.wulaoer.org ~]# ansible ops_tools -m copy -a "src=/opt/sh/docker_images.sh dest=/home"
ali-bj-g-ops-web | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "checksum": "063b694974d74422fc5cac9ed500a29bed52d791",
    "dest": "/home/docker_images.sh",
    "gid": 0,
    "group": "root",
    "md5sum": "408b443a6debeecdb2e3174208818f95",
    "mode": "0644",
    "owner": "root",
    "size": 287,
    "src": "/root/.ansible/tmp/ansible-tmp-1615538133.88-25836-263055278069757/source",
    "state": "file",
    "uid": 0
}

推送成功,下面进入目标机器验证一下,文件是存在的。

[root@www.wulaoer.org ~]#  ll /home/docker_images.sh
-rw-r--r-- 1 root root 287 Mar 12 16:35 /home/docker_images.sh

这里需要注意一下,我们推送过去的文件都是系统默认的权限,和原文件型属性不一致。这样在推送脚本时,目标文件是无法执行的。所以,在copy模块里还可以增加五个参数分别是owner,group,mode,backup,force五个参数owner指的是用户。group指的是用户组。mode指的是文件属性。如果给文件加个执行权限可以使用mode=u+x表示。backup参数是指本地和远程目标机器里的文件同名,内容不一样,可以对文件做备份远程机器中的文件,然后在将本地的文件copy过去,可以选择yes或no,备份不备份。这里还有一个扩展内容就是src,srccopy的是文件或者文件夹,content copy的是文件的内容,两者必须有一个,否则报错

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: