copy模块

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表示

ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_文件拷贝


测试1:

准备:

ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_文件权限_02


ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_文件拷贝_03


执行以下命令

[root@server1 testdir]# ansible testB -m copy -a "src=/testdir/copytest dest=/opt"#与主机的不同则会进行覆盖

ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_文件拷贝_04


可以发现server4中的文件被覆盖:

ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_文件拷贝_05


再次执行则不再发生改变,为false.因为相同的内容已经存在。(ansible的幂等性)

ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_时间戳_06


测试2:

[root@server1 testdir]# ansible testB -m copy -a "content="westos\nlinux\n" dest=/opt/test"

内容被导入到server4中

ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_时间戳_07


文件不一致的时候如果不想覆盖的操作:

准备工作:

ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_文件拷贝_08


ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_文件权限_09


可以发现文件内容不同时,没有发生改变

ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_时间戳_10


ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_文件拷贝_11


内容不一致进行拷贝,并且进行备份:

[root@server1 testdir]# ansible testB -m copy -a "src=/testdir/copytest dest=/opt backup=yes "

ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_文件拷贝_12


ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_文件权限_13

改变拥有者,文件存在的时候只会改变拥有者,不会对内容进行改变

[root@server1 testdir]# ansible testB -m copy -a "src=/testdir/copytest dest=/opt owner=hhh "

ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_文件拷贝_14


ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_文件权限_15


如果创建新文件,则文件自动创建,拥有者改变

ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_文件拷贝_16


ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_文件权限_17

file模块

file模块功能
file模块可以帮助我们完成一些对文件的基本操作, 比如:创建文件或目录、删除文件或目录、修改文件权限等

file模块参数
path参数:必须参数,用于指定要操作的文件或目录,在之前版本的ansible中,使用dest参数或者name参数指定要操作的文件或目录,为了兼容之前的版本,使用dest或name也可以

state参数:此参数非常灵活,此参数对应的值需要根据情况设定,比如,当我们需要在远程主机中创建一个目录的时候,我们需要使用path参数指定对应的目录路径。
假设:我想要在远程主机上创建/testdir/a/b目录,那么我则需要设置path=/testdir/a/b,但是,我们无法从"/testdir/a/b"这个路径看出b是一个文件还是一个目录,ansible也同样无法单单从一个字符串就知道你要创建文件还是目录。所以,我们需要通过state参数进行说明,当我们想要创建的/testdir/a/b是一个目录时,需要将state的值设置为directory,"directory"为目录之意, 当它与path结合,ansible就能知道我们要操作的目标是一个目录,同理,当我们想要操作的/testdir/a/b是一个文件时,则需要将state的值设置为touch,当我们想要创建软链接文件时,需将state设为link,想要创建硬链接文件时,需要将state设置为hard,当我们想要删除一个文件时(删除时不用区分目标是文件、目录、还是链接),则需要将state的值设置为absent,“absent” 为缺席之意,当我们想让操作的目标"缺席"时,就表示我们想要删除目标。

src参数:当state设置为link或者hard时,表示我们想要创建一个软链或者硬链,所以,我们必须指明软链或硬链链接的哪个文件,通过src参数即可指定链接源

force参数:当state=link的时候,可配合此参数强制创建链接文件,当force=yes时,表示强制创建链接文件,不过强制创建链接文件分为两种情况:
情况一:当你要创建的链接文件指向的源文件并不存在时,使用此参数,可以先强制创建出链接文件。
情况二:当你要创建链接文件的目录中已经存在与链接文件同名的文件时,将force设置为yes,会将同名文件覆盖为链接文件,相当于删除同名文件,创建链接文件。
情况三:当你要创建链接文件的目录中已经存在与链接文件同名的文件,并且链接文件指向的源文件也不存在,这时会强制替换同名文件为链接文件。

owner参数:用于指定被操作文件的属主,属主对应的用户必须在远程主机中存在,否则会报错。

group参数:用于指定被操作文件的属组,属组对应的组必须在远程主机中存在,否则会报错。

mode参数:用于指定被操作文件的权限,比如,如果想要将文件权限设置t为rw-r-x—,则可以使用mode=650进行设置,或者使用mode=0650,效果也是相同的,如果你想要设置特殊权限,比如为二进制文件设置suid,则可以使用mode=4700

recurse参数:当要操作的文件为目录,将recurse设置为yes,可以递归的修改目录中文件的属性

ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_文件权限_18


测试:

ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_时间戳_19


使用该命令,远程主机不存在该目录则会报错

创建目录:

ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_文件拷贝_20


此时执行成功:

ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_文件拷贝_21


ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_文件拷贝_22


在执行一遍的时候,时间戳发生改变,时间戳的幂等性不成立,文件内容没有发生改变

ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_文件权限_23


ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_文件权限_24


ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_文件权限_25

建立目录:
[root@server1 testdir]# ansible testB -m file -a “path=/testdir/westosdir state=directory”

ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_文件拷贝_26


ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_文件权限_27


再次更新的话,由于幂等性,目录的时间戳不发生改变:

ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_文件拷贝_28


建立链接文件:

软链接:

[root@server1 testdir]# ansible testB -m file -a "path=/testdir/linkfile state=link src=/testdir/westos"

ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_时间戳_29


硬链接:

[root@server1 testdir]# ansible testB -m file -a "path=/testdir/hardlink state=hard src=/testdir/westos"

ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_时间戳_30


强制进行链接,只对于state=link成立

[root@server1 testdir]# ansible testB -m file -a "path=/testdir/linkwestos state=link src=westos-haha force=yes"

ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_文件拷贝_31


删除文件:

root@server1 testdir]# ansible testB -m file -a "path=/testdir/linkwestos state=absent"

ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_文件权限_32


改变文件权限,可以改变源文件的属性,也可以新创建的时候改变属性

[root@server1 testdir]# ansible testB -m file -a "path=/testdir/c mode=666"

ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_文件拷贝_33


新创建的时候改变属性

[root@server1 testdir]# ansible testB -m file -a "path=/testdir/d state=directory mode=644"

ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_文件拷贝_34

递归创建新目录:

[root@server1 testdir]# ansible testB -m file -a "path=/testdir/1/2 state=directory owner=hhh recurse=yes"

ansible怎么从其他主机拉取文件到本地 ansible 读取文件内容_文件拷贝_35