ansible常⽤模块---对⽂件的操作模块详解⼀(copy,file,blockinfi。。。
(1)模块介绍
见名知义,copy模块的作⽤就是拷贝⽂件,它与之前介绍的fetch模块类似,不过,fetch模块是从远程主机中拉取⽂件到ansible主机,⽽copy模块是将ansible主机上的⽂件拷贝到远程主机中。
(2)模块参数
此处我们介绍⼀些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主机中/testdir/copytest⽂件复制到远程主机的/opt⽬录下,注意,如果copytest⽂件已经存在于远程主机的/opt⽬录中,并且远程主机中的copytest与ansible主机中copytest⽂件内容不同,那么使
⽤如下命令时,远程主机中的copytest⽂件将被覆盖。
在server4中只执⾏:
ansible testB -m copy -a "src=/testdir/copytest dest=/opt/"
上图可以看出内容已经被覆盖
在远程主机的/opt⽬录下⽣成⽂件test1,test1⽂件中有两⾏⽂本,第⼀⾏⽂本为aaa,第⼆⾏为bbb,当使⽤content指定⽂件内容
时,dest参数对应的值必须是⼀个⽂件,⽽不能是⼀个路径。
ansible testB -m copy -a 'content="aaa\nbbb\n" dest=/opt/test1'
将ansible主机中/testdir/copytest⽂件复制到远程主机的/opt⽬录中时,如果远程主机中已经存在/opt/copytest⽂件,并且⽂件内容与ansible主机中的copytest⽂件的内容不⼀致,则不执⾏拷贝操作,远程主机中的/opt/copytest⽂件内容不会被改变。
ansible testB -m copy -a "src=/testdir/copytest dest=/opt/ force=no"
将ansible主机中/testdir/copytest⽂件复制到远程主机的/opt⽬录中时,如果远程主机中已经存在/opt/copytest⽂件,并且⽂件内容与ansible主机中的copytest⽂件的内容不⼀致,会执⾏拷贝操作,但是在执⾏拷贝操作之前,会将远程主机中的原⽂件重命名,以作备份,然后再进⾏拷贝操作。
ansible testB -m copy -a "src=/testdir/copytest dest=/opt/ backup=yes"
拷贝⽂件时,指定⽂件的属主,需要注意,远程主机上必须存在对应的⽤户。
ansible testB -m copy -a "src=/testdir/westos dest=/opt/ owner=dd"
如果拷贝的⽂件在⽬标主机存在且相同时,只会更改⽂件所属⽤户:
ansible testB -m copy -a "src=/testdir/copytest dest=/opt owner=dd"
执⾏后
拷贝⽂件时,指定⽂件的属组,需要注意,远程主机上必须存在对应的组。
ansible testB -m copy -a "src=/testdir/copytest dest=/opt/ group=dd"
执⾏后
拷贝⽂件时,指定⽂件的权限无法复制文件
ansible testB -m copy -a "src=/testdir/pp dest=/opt mode=0640"
当⽬标⽂件存在且相同时,只会更改权限:
ansible testB -m copy -a
"src=/testdir/copytest dest=/opt mode=0640"
2.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 参数 ⽤于指定被操作⽂件的权限,⽐如,如果想要将⽂件权限设置为"rw-r-x—",则可以使⽤mode=650进⾏设置,或者使⽤mode=0650,效果也是相同的,如果你想要设置特殊权限,⽐如为⼆进制⽂件设置suid,则可以使⽤mode=4700,很⽅便吧。
recurse参数 当要操作的⽂件为⽬录,将recurse设置为yes,可以递归的修改⽬录中⽂件的属性。
参数含义
模块⽰例
对应上述参数的⽰例命令如下:
在testB(server3)主机上创建⼀个名为westos的⽂件,如果testfile⽂件已经存在,则会更新⽂件的时间戳,与touch命令的作⽤相同。在server4:
[root@server4 testdir]# ansible testB -m file -a "path=/testdir/westos state=touch"
当远程主机中⽂件已经从在再次执⾏命令依然会成功,会修改远程主机⽂件的时间戳:
在testB(server3)主机上创建⼀个名为westosdir的⽬录,如果westosdir⽬录已经存在,则不进⾏任何操作
[root@server4 testdir]# ansible testB -m file -a "path=/testdir/westosdir state=directory"
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论