Linux Ansible自动化运维 copy模块

1.实验环境

首先配置好ansibel清单:

vim /etc/ansible/hosts
[testA]
server2
server3
[testB]
server4
[test:children]
testA
testB

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2.模块管理

ansible-doc-l	#列出ansible所支持的模块
ansible-doc -s fetch	#查看模块的详细帮助信息(fetch模块)
ansible all -m ping	#调用模块(调用ping模块)

 
 
  • 1
  • 2
  • 3

3.fetch模块

在这里插入图片描述
fetch模块中参数作用:

  • dest:指定拉取文件到本地以后,文件存放的位置
  • src:指定从受管主机中拉取哪个文件

调用模块的同时传入参数:把testA组受管主机中的/etc/fstab拉取到本机的/testdir/ansible中

ansible testA -m fetch -a "src=/etc/fstab dest=/testdir/ansible"

 
 
  • 1

在这里插入图片描述
查看到"changed": true,说明拉取成功(字体为黄色)
注意:/testdir/ansible目录原本并不存在

进入目录可以查看到拉取过来的文件:
在这里插入图片描述
再次拉取:

ansible testA -m fetch -a "src=/etc/fstab dest=/testdir/ansible"

 
 
  • 1

在这里插入图片描述
虽然会有SUCCESS字样,但并不代表已经完成了拉取动作,由"changed": false可以知道并未发生改变,而SUCCESS字样只是代表该动作已经进行过了,或者说该目录中已经有需要拉取的文件了,这就是ansible的幂等性

md5sum校验的应用:
如果此时我们改变文件的内容,但文件名和目录都还存在,ansible是否会进行拉取这一动作呢?

在server2中:

cd /testdir/ansible/server2/etc/
echo "hello nigar" >> fstab
ansible testA -m fetch -a "src=/etc/fstab dest=/testdir/ansible"

 
 
  • 1
  • 2
  • 3

在这里插入图片描述
可以看到server2进行了拉取的动作,而server3没有。这是因为server2的md5sum改变了,这就是md5sum校验的应用。

4.copy模块

copy模块与fetch模块的区别:

见名知义,copy模块的作用就是拷贝文件,它与之前介绍的fetch模块类似,不过,fetch模块是从远程主机中拉取文件到ansible主机,而copy模块是将ansible主机上的文件拷贝到远程主机中

copy模块参数:

  • src参数:用于指定需要copy的文件或目录
  • dest参数:用于指定文件将被拷贝到远程主机的哪个目录中,dest为必须参数
  • content参数:当不使用src指定拷贝的文件时,可以使用content直接指定文件内容,src与content两个参数必有其一,否则会报错。
  • force参数:当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否强制覆盖,可选值有yes和no,默认值为yes表示覆盖,如果设置为no,则不会执行覆盖拷贝操作,远程主机中的文件保持不变。
  • backup参数:当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否对远程主机的文件进行备份,可选值有yes和no,当设置为yes时,会先备份远程主机中的文件,然后再将ansible主机中的文件拷贝到远程主机。
  • owner参数:指定文件拷贝到远程主机后的属主,但是远程主机上必须有对应的用户,否则会报错。
  • group参数:指定文件拷贝到远程主机后的属组,但是远程主机上必须有对应的组,否则会报错。
  • mode参数:指定文件拷贝到远程主机后的权限,如果你想将权限设置为"rw-r–r--", 则可以使用mode=0644表示,如果你想要在user对应的权限位,上添加执行权限,则可以使用mode=u+x表示

copy模块应用

cd /testdir
touch copytest
echo 'hellp nigar' > copytest 
cat copytest

 
 
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
在远程主机中:

cd /opt/
touch copytest
echo 'hello world' > copytest
cat copytest

 
 
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
当文件内容不一致时,直接覆盖:

ansible testB -m copy -a "src=/testdir/copytest dest=/opt"

 
 
  • 1

在这里插入图片描述
在这里插入图片描述
当文件内容一致时,不进行copy动作:

ansible testB -m copy -a "src=/testdir/copytest dest=/opt"

 
 
  • 1

在这里插入图片描述

使用content参数指定文件内容:

ansible testB -m copy -a "content="westos\nlinux\n" dest=/opt/test"

 
 
  • 1

在这里插入图片描述
在这里插入图片描述
改变远程主机中copytest内容:

echo "hello-ansible" >>copytest 

 
 
  • 1

在这里插入图片描述
当文件内容不一致时,不覆盖:

ansible testB -m copy -a "src=/testdir/copytest dest=/opt force=no" 

 
 
  • 1

在这里插入图片描述
查看文件内容并没有改变
在这里插入图片描述

当文件内容不一致时,先备份,再覆盖:

ansible testB -m copy -a "src=/testdir/copytest dest=/opt backup=yes" 

 
 
  • 1

在这里插入图片描述
查看到文件内容改变,但目录中多了备份文件
在这里插入图片描述

指定文件拥有者:
指定拥有者的前提条件是远程主机中要有该用户,在远程主机中创建用户:

useradd nigar
id nigar

 
 
  • 1
  • 2

当远程主机中不存在要拷贝的文件时,直接进行拷贝:

cd /testdir
touch westos
ansible testB -m copy -a "src=/testdir/westos dest=/opt owner=nigar" 

 
 
  • 1
  • 2
  • 3

在这里插入图片描述
在这里插入图片描述
当远程主机中存在要拷贝的文件时,不进行拷贝动作,单纯的修改拥有者:

ansible testB -m copy -a "src=/testdir/copytest dest=/opt owner=nigar" 

 
 
  • 1

在这里插入图片描述
查看到copytest文件的拥有者变为nigar,但文件的时间戳并没有改变,说明没有进行拷贝动作,单纯的修改了拥有者
在这里插入图片描述

指定文件所属组:
当远程主机中存在要拷贝的文件时,不进行拷贝动作,单纯的修改所属组:

ansible testB -m copy -a "src=/testdir/copytest dest=/opt group=nigar" 

 
 
  • 1

在这里插入图片描述

指定文件权限:

touch hh
ansible testB -m copy -a "src=/testdir/hh dest=/opt mode=0640"

 
 
  • 1
  • 2

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值