ansible(四)常用模块(fetch,copy,file)之文件操作
模块基本用法
列出ansible所支持的模块 ansible-doc -|
查看模块的详细帮助信息,比如查看fetch模块的帮助 ansible-doc -s fetch
调用模块,比如调用ping模块 ansible all -m ping
调用模块的同时传入模块所需要的参数,以fetch模块为例
ansible 172.25.0.2 -m fetch -a “src=/etc/fstab dest=/testdir/ansible/”
fetch模块详解
(1)查看fetch模块的使用(2)编写清单
(3)将目标主机的/etc/fstab发送到本机的/testdir/ansible
说明:/testdir/ansible目录不存在,会自动建立!!
成功
(4)验证幂等性再次执行上述命令
(5)当改变fstab的内容时再次执行上述命令
copy模块详解
copy模块
见名知义,copy模块的作用就是拷贝文件,它与之前介绍的fetch模块类似,不过,fetch模块是从远程主机中拉取文件到ansible主机,而copy模块是将ansible主机上的文件拷贝到远程主机中
src参数 | 用于指定需要copy的文件或目录 |
---|---|
dest参数 | 用于指定文件将被拷贝到远程主机的哪个目录 |
content参数 | 当不使用src指定拷贝的文件时,可以使用content直接指定文件内容,src与content两个参数必有其一,否则会报错。 |
force参数 | 当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否强制覆盖,可选值有yes和no,果 状认值为yes,表示覆盖,如果设置为no,则不会执行覆盖拷贝操作,远程主机中的文件保持不变。 |
backup参数 | 当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否对远程主机的文件进行备份,可选值有yes和no,当设i为yes时,会先备份远程主机中的文件,然后再将ansible主机中的文件拷贝到远程主机。 |
owner参数 | 指定文件拷贝到远程主机后的属主,但是远程主机上必须有对应的用户,否则会报错。 |
group参数 | 指定文件拷贝到远程主机后的属组,但是远程主机.上必须有对应的组,否则会报错。 |
mode参数 | 指定文件拷贝到远程主机后的权限,如果你想将权限设置为"rw-r–r--",则可以使用mode =0644表示,如果你想要在user对应的权限位上添加执行权限,则可以使用mode: =u+ x表示 |
(1)在ansible主机和目标主机各写一个文件
说明:两个文件名相同,内容不同
(2)使用ansible会覆盖源目标主机文件的内容
(3)验证幂等性
第二次执行命令不会改变
(4)使用content直接指定文件内容
在目标主机查看
(5)当两个主机文件名相同内容不同时,不想被覆盖用force
(6)当两个主机文件名相同内容不同时,被覆盖时进行备份
在目标主机查看
(7)指定文件拷贝到远程主机后的属主
远程主机必须要有指定用户
当目标主机没有这个文件(westos)和有这个文件(copytest)的对比
文件存在时只会改变拥有者,文件不存在时会改变拥有者和时间戳!!!
在目标主机查看
(8)指定文件拷贝到远程主机后的属组
(9)指定文件拷贝到远程主机后的权限
目标主机查看
file模块详解
file模块可以帮助我们完成一些对文件的基本操作,比如,创建文件或目录、删除文件或目录、修改文件权限等
path参数:必须参数,用于指定要操作的文件或目录
state参数:此参数非常灵活,此参数对应的值需要根据情况设定,比如,当我们需要在远程主机中创建一个目录的时候,我们需要使用path参数指定对应的目录路径,假设,我想要在远程主机上创建/testdir/a/b目录,那么我则需要设置ipath=/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参数:用于指定被操作文件的属主,A 属主对应的用户必须在远程主机中存在,否则会报错。
group参数:用于指定被操作文件的属组,属组对应的组必须在远程主机中存在,否则会报错。
mode参数:用于指定被操作文件的权限,比如,如果想要将文件权限设置为"rw-r-x—”, 则可以使用mode= 650进行设置t,或者使用mode=0650,效果也是相同的,如果你想要设置特殊权限,比如为二进制文件设置isuid, 则可以使用mode=4700
recurse参数:当要操作的文件为目录,将recurse设置为yes,可以递归的修改目录中文件的属性
(1)在目标主机建立目录然后在ansible主机创建文件
查看
再次执行上述命令会改变文件的时间戳!!!
再次查看
(2)创建目录
查看
再次执行没有改变
再次查看
(3)软连接
查看
(4)硬链接
查看
(5)force参数情况一
(6)删除远程主机的文件
查看
(7)创建文件属于ll
查看
当文件存在时再次执行会改变时间戳!!!
(8)创建文件属组为ll
查看
(9)创建目录属组为ll
查看
改属主
查看
(10)改权限
可以改变原来存在的文件和目录,也可改变新建的
查看
(11)递归创建目录
查看