Ansible常用模块之文件操作模块

  • 2019-09-02
  • 0
  • 0

Ansible官方手册

文件操作的模块有

  • copy模块
  • file模块
  • blockfile模块
  • lineinfile模块

一、copy模块

作用:用于将ansible主机中的文件拷贝到远程主机上。

常用参数:

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

对应上述参数的ad-hoc示例命令如下:

将ansible主机中httpd.conf文件复制到远程主机的/tmp目录下。如果httpd.conf文件在远程主机/tmp目录下存在,并且两者中的内容不容,则会直接覆盖。

[root@jumper project]# ansible web -m copy -a "src=httpd.conf dest=/tmp" -i hosts 
192.168.1.7 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "92e81629062311316bdb7b5d4cd43fadde7b5291", 
    "dest": "/tmp/httpd.conf", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "9eb2762e6f8347f5b7964b959b2c214a", 
    "mode": "0644", 
    "owner": "root", 
    "size": 11754, 
    "src": "/root/.ansible/tmp/ansible-tmp-1560418068.89-245160834982008/source", 
    "state": "file", 
    "uid": 0
}

#假如使用backup参数的话,则先备份远程主机中的文件,然后再拷贝。
#"backup_file": "/tmp/httpd.conf.27985.2019-06-13@17:29:50~",为备份的文件
[root@jumper project]# ansible web -m copy -a "src=httpd.conf dest=/tmp backup=yes" -i hosts 
192.168.1.7 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "backup_file": "/tmp/httpd.conf.27985.2019-06-13@17:29:50~",    #备份的文件
    "changed": true, 
    "checksum": "4bf52843818cedf755de33a74dc7c10badc6ae33", 
    "dest": "/tmp/httpd.conf", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "b5546fc90aa35f9a589d65c6cb6c9582", 
    "mode": "0644", 
    "owner": "root", 
    "size": 11755, 
    "src": "/root/.ansible/tmp/ansible-tmp-1560418189.07-257649163981777/source", 
    "state": "file", 
    "uid": 0
}

拷贝文件时,指定文件的属主,属组,以及指定文件的权限。远程主机需存在对应的用户和组
owner=ljc group=ljc mode=0640

[root@jumper project]# ansible web -m copy -a "src=httpd.conf dest=/tmp backup=yes owner=ljc group=ljc mode=0640" -i hosts   
192.168.1.7 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "4bf52843818cedf755de33a74dc7c10badc6ae33", 
    "dest": "/tmp/httpd.conf", 
    "gid": 1001, 
    "group": "ljc",             #组为ljc
    "mode": "0644", 
    "owner": "ljc",             #主为ljc
    "path": "/tmp/httpd.conf", 
    "size": 11755, 
    "state": "file", 
    "uid": 1001
}

#远程主机查看,用户和组已经改变,权限也改变
[root@web7 tmp]# ll
total 24
-rw-r----- 1 ljc  ljc  11755 Jun 13 17:29 httpd.conf

在远程主机中生成一个test文件,并写入内容。可以使用content参数。当使用content指定文件内容时,dest参数对应的值必须是一个文件,而不能是一个路径。 content='1234\n'

[root@jumper project]# ansible web -m copy -a "content='1234\n' dest=/tmp/httpd.conf  backup=yes owner=ljc group=ljc mode=0640" -i hosts 

#远程主机查看确认
[root@web7 tmp]# cat httpd.conf
1234

二、file模块

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

常用参数:

path参数 :用于指定要操作的文件或目录,也可以使用dest或者name
state参数 :用于指定创建文件`touch`或者目录`directory`,也可以创建软连接`link`。删除时使用`absent`。
src参数 :指定要链接到的文件的路径。这只适用于state=link和state=hard。
force参数 : 当state=link的时候,可配合此参数强制创建链接文件,当force=yes时,表示强制创建链接文件。不过强制创建链接文件分为三种情况。情况一:当要创建的链接文件指向的源文件并不存在时,使用此参数,可以先强制创建出链接文件。情况二:当要创建链接文件的目录中已经存在与链接文件同名的文件时,将force设置为yes,会将同名文件覆盖为链接文件,相当于删除同名文件,创建链接文件。情况三:当要创建链接文件的目录中已经存在与链接文件同名的文件,并且链接文件指向的源文件也不存在,这时会强制替换同名文件为链接文件。
owner参数 :用于指定被操作文件的属主,属主对应的用户必须在远程主机中存在,否则会报错。
group参数 :用于指定被操作文件的属组,属组对应的组必须在远程主机中存在,否则会报错。
mode参数:用于指定被操作文件的权限,常用数字型`mode=0650`进行设置.
recurse参数:当要操作的文件为目录,将recurse设置为yes,可以递归的修改目录中文件的属性。
#示例一、创建文件,并设定属主、属组、权限。
[root@jumper project]# ansible web -m file -a "path=/tmp/tt.html state=touch owner=apache group=apache mode=644" -i hosts
192.168.1.7 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "dest": "/tmp/tt.html", 
    "gid": 48, 
    "group": "apache", 
    "mode": "0644", 
    "owner": "apache", 
    "size": 0, 
    "state": "file", 
    "uid": 48
}
#示例二、创建目录,并设定属主、属组、权限。
[root@jumper project]# ansible web -m file -a "path=/tmp/dd state=directory owner=apache group=apache mode=755" -i hosts
192.168.1.7 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "gid": 48, 
    "group": "apache", 
    "mode": "0755", 
    "owner": "apache", 
    "path": "/tmp/dd", 
    "size": 6, 
    "state": "directory", 
    "uid": 48
}

#示例三、递归授权目录的方式。
[root@jumper project]# ansible web -m file -a "path=/tmp/ owner=apache group=apache recurse=yes" -i hosts

#示例四、删除远程机器上的指定文件或目录
[root@jumper project]# ansible web -m file -a "path=/tmp/dd state=absent" -i hosts
192.168.1.7 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "path": "/tmp/dd", 
    "state": "absent"
}

#示例五、在远程机器上创建软连接
 ansible web -m file -a "path=/tmp/linkfile state=link src=/tmp/tt.html" -i hosts

未完待续~~~

点我查看所有:Ansible系列所有文章

 Ansible常用模块之命令模块           Ansible常用模块之系统管理模块

Ansible常用模块之解包模块            Ansible常用模块之用户管理模块

Ansible常用模块之YUM模块

评论

还没有任何评论,你来说两句吧

提供支持 - 友情链接 - 衫小寨