• ansible file模块、参数详细讲解、例子


    Ansible的file模块是用来管理文件和目录的模块。它可以用来创建、删除、修改文件和目录的权限、所有权等属性。

    一些常用的file模块的功能有:

    • 创建目录:通过设置state为directory,可以创建目录。
    • 删除文件或目录:通过设置state为absent,可以删除文件或目录。
    • 修改文件和目录的权限:通过设置mode参数,可以修改文件和目录的权限。
    • 修改文件和目录的所有权:通过设置owner和group参数,可以修改文件和目录的所有权。
    • 复制文件:通过设置src和dest参数,可以复制文件。
    • 移动文件:通过设置src和dest参数,可以移动文件。
    • 设置文件的粘滞位:通过设置sticky参数,可以设置文件的粘滞位。

    命令形式

    ansible 主机组名 -m file -a "key=value1 key=values2..."

    主机组名可以写在前方或者后方。

    模块参数

    参数选项说明类型
    path:必需性:是的,path是file模块的必填参数。

    (必需)

    path告诉Ansible你要操作的文件或目录的具体位置。

    要管理的文件的路径。如果在默认位置/etc/ansible/下可以只写文件名

    字符串,应包含你希望操作的文件或目录的绝对路径或相对路径。
    state:absent(删除)、directory(目录)、touch(文件)、hard(硬链接)、link(软连接)、present(创建)

    absent:确保文件或目录不存在。如果文件或目录存在,则删除它们。

    directory:确保目录存在。如果目录不存在,则创建它。如果目录已经存在,则不会执行任何操作。

    file:确保文件存在。如果文件不存在,则创建它。如果文件已经存在,则不会执行任何操作。

    hard:确保硬链接存在。如果硬链接不存在,则创建它。如果硬链接已经存在,则不会执行任何操作。

    link:确保符号链接存在。如果符号链接不存在,则创建它。如果符号链接已经存在,则不会执行任何操作。

    present:确保文件或目录存在。如果文件或目录不存在,则创建它们。如果文件或目录已经存在,则不会执行任何操作。这是默认值。

    mode:通常以八进制数字表示,如06440755等。

    指定文件的权限。

    前两位控制所有者权限,中间两位控制所属组权限,最后两位控制其他人权限。每一位可以是0、1、2、3、4、5、6、7,分别对应无权限、执行权限、写权限、写+执行权限、只读权限、读+执行权限、读+写权限、读+写+执行权限。

    owner:用户名称

    指定文件所有者。

    注意事项

    • 确保指定的用户名存在于系统中,否则Ansible会在执行时失败。
    • 当使用sudo或become特性以提升权限执行Ansible任务时,必须确保有权限更改指定文件或目录的所有权。
    • 如果同时需要改变组所有权,可以结合使用group选项。
    字符串,通常应该是系统中存在的用户名。
    group:组名称

    指定文件所属用户组。

    注意事项

    • 确保指定的用户组名存在于系统中,否则Ansible执行任务时会遇到错误。
    • 使用sudobecome提升权限执行Ansible任务时,需确保有权限修改文件或目录的组所有权。
    • 可以与owner选项一起使用,以同时改变文件或目录的所有者和所属组。
    字符串,通常是系统中存在的用户组名。
    src:

    文件绝对路径

    默认路径在/etc/ansible/下

    用途:指定要复制的源文件路径。

    当使用state参数为link、hard、copy或template时,src参数是必需的。

    它可以是一个本地文件路径或远程URL。

    如果src参数是一个文件路径,则可以使用相对路径或绝对路径。

    默认位置在/etc/ansible/下。

    字符串,可以是本地文件路径(相对于playbook或使用lookup插件的绝对路径),或者是远程主机上的文件路径(当使用Ansible的URL或ansible.builtin.fetch模块下载文件时)。
    dest:

    指定了文件  [  复制 |  或模板  ]  输出后在远程主机上的存放位置。

    默认位置在/etc/ansible/下。

    用途:指定文件复制或生成的目标路径。

    当使用state参数为link、hard、copy、move、template或absent时,dest参数是必需的。

    是看选用模块如copy所意思就是复制到远程主机的位置是哪里。

    如果dest参数是一个文件路径,则可以使用相对路径或绝对路径。

    字符串,表示目标主机上的文件或目录路径。
    force:

    覆盖写入,yes为覆盖,no不覆盖。

    1. file模块中,直接使用force选项的场景较少见,因为该模块更多是用于改变文件或目录的基本属性,而非内容替换。对于文件内容的复制,通常会用到copy模块,而在该模块中,force参数更常见且实用。
    2. 当使用copy或其他涉及文件内容操作的模块时,考虑是否真的需要强制覆盖现有文件,以避免不必要的数据丢失。
    force:

    注意事项:

    force参数用于指定是否强制覆盖目标文件或目录。

    当force参数设置为true时,如果目标文件或目录已经存在,Ansible会强制覆盖它。如果目标文件或目录不存在,则会创建它。

    当force参数设置为false时,如果目标文件或目录已经存在,Ansible不会进行任何更改。如果目标文件或目录不存在,则会创建它。

    follow:yes/no

    follow参数用于指定是否跟随符号链接。

    • 作用:当设置为yes时,Ansible会跟随符号链接并对其指向的目标文件或目录执行操作。如果设置为no,Ansible则直接对符号链接本身进行操作,而不是它的目标。
    follow选项是一个布尔类型的参数,用于控制符号链接(symlinks)的处理方式,默认值为yes
    access_time:

    参数用于设置或修改文件的访问时间。

    access_time参数可以接受以下几种格式的值:

    • Unix时间戳(以秒为单位):可以使用整数值来表示特定的时间。
    • 绝对日期和时间:可以使用ISO 8601格式(例如2022-01-01T12:00:00Z)或其他常用日期格式来指定时间。
    • 相对时间:可以使用+或-符号来指定相对于当前时间的偏移量,例如+1h表示将访问时间设为当前时间后的1小时。
    access_time_format:

    参数用于指定access_time参数值的日期和时间格式。access_time_format参数的值为"unix",即将access_time参数值解释为Unix时间戳(以秒为单位)。

    常见的access_time_format参数值及其对应的日期和时间格式:

    • "iso8601":使用ISO 8601格式表示日期和时间(例如"2022-01-01T12:00:00Z")。
    • "short":使用短日期和时间格式表示(例如"2022-01-01"或"12:00:00")。
    • "long":使用长日期和时间格式表示(例如"January 1, 2022"或"12:00:00 PM")。
    attributes:

    参数用于设置文件或目录的属性。

    attributes参数的值应该是一个字符串,由以下字符组成:

    • "a"表示只能追加写入文件。
    • "b"表示将文件内容存储为二进制格式。
    • "c"表示将文件内容压缩。
    • "d"表示当访问到达文件结尾时,将其作为目录。
    • "e"表示删除文件时不要将其关闭。
    • "f"表示将文件视为固定长度记录。
    • "i"表示文件内容不可修改。
    • "l"表示文件为符号链接。
    • "n"表示当写入文件时,文件指针不追加到文件末尾。
    • "p"表示文件为FIFO(命名管道)。
    • "r"表示文件可读取。
    • "s"表示文件为套接字。
    • "t"表示文件是字节流文本文件。
    • "u"表示文件有未高速缓冲区的同步更新。
    • "w"表示文件可写入。
    • "x"表示文件可执行。

    可以组合一起使用。

    modification_time:

    参数用于设置文件或目录的修改时间。

    修改时间(modification time)指的是文件或目录最后一次被修改的时间戳。在Ansible中,modification_time参数可以用来设置文件或目录的修改时间。

    modification_time参数的值可以是一个绝对时间戳,也可以是一个相对时间。绝对时间戳是一个特定的日期和时间,而相对时间是相对于当前时间的偏移量。

    modification_time_format:

    用于设置文件或目录修改时间的格式。

    允许指定修改时间的格式,以便将时间字符串解析为正确的时间戳。它支持的格式与Python的strftime格式化字符串相同。

    请注意,这种方法依赖于目标系统上的 touch 命令支持 -d 参数来指定日期时间格式。
    recurse:yes/no

    用于指定是否递归地处理目录。

    当使用file模块操作目录时,可以通过设置recurse参数来控制是否递归地处理目录中的文件和子目录。recurse参数的取值为布尔类型,即True或False,默认为False。

    当recurse参数设置为True时,file模块会递归地处理目录中的所有文件和子目录。这意味着,无论在操作文件还是目录时,都会对目录及其内容进行相应操作。

    selevel:
    • selevel:设置SELinux安全级别的部分,如s0
    • serole:设置SELinux角色,如system_r
    • setype:设置SELinux类型,这是最具体的分类,如httpd_sys_content_t
    • seuser:设置SELinux用户上下文,如system_u

    用于指定SELinux安全策略的级别。

    在SELinux中,每个文件和进程都有一个安全上下文(Security Context),用于控制其访问权限。selevel参数用于指定要应用的SELinux安全策略的级别。

    selevel参数的取值可以是一个字符串,表示安全策略的级别,也可以是一个变量,根据需要动态设置安全策略级别。

    serole:system_robject_r等。设置SELinux角色(SEROLE)的名称。SELinux角色定义了一组权限,这些权限决定了哪些域(类型)可以由拥有该角色的进程执行。字符串,代表SELinux角色,如system_robject_r等。

    例子

    • 复制管理机/tmp/test.log到客户机的/root目录下

    1. touch /tmp/test.txt
    2. echo "hello" > /tmp/test.txt
    3. ansible all -m copy -a "src=/tmp/test.txt dest=/root" # 默认force=yes
    4. # 查看
    5. ansible all -m shell -a "ls -al /root && cat test.txt"
    • 复制管理机/tmp/test.log到客户机的/root目录下并备份

    1. echo "hello ansible ..." > /tmp/test.txt
    2. ansible all -m copy -a "src=/tmp/test.txt dest=/root backup=yes"
    • 写入数据到客户机的/test/yum.log中

    ansible all -m copy -a "content='你好,全世界' dest=/root/test02.txt"

    src与content选项互斥

    • 向客户机/tmp目录下创建单/多级目录 test(单级) aa/bb/cc(多级)

    1. ansible all -m file -a "path=/tmp/test state=directory"
    2. ansible all -m file -a "path=/tmp/aa/bb/cc state=directory"
    • 向指定组中的客户机/tmp目录下创建demo03.txt文件

    ansible test -l 192.168.88.201 -m file -a "path=/tmp/demo03.txt state=touch"
    • 向指定组/tmp目录下创建demo02.txt文件

    ansible test -m file -a "path=/tmp/demo02.txt state=touch"
    • 向所有客户机的/tmp目录下创建demo01.txt文件

    ansible all -m file -a "path=/tmp/demo01.txt state=touch mode=777 owner=ftp group=daemon"
  • 相关阅读:
    《数据结构与算法基础 by王卓老师》学习笔记——1.4算法与算法分析
    SpringBoot热部署
    C#插件开发之带控件的插件开发(基础篇)
    【无标题】
    C++模拟实现——list
    开一家咖啡店应具备什么
    WebSSH远程管理Linux服务器、Web终端窗口自适应(二)
    Java版本电子招标采购系统源码:营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展
    使用Golang Web3库进行区块链开发
    Ubuntu18.04 ROS-Melodic安装Moveit
  • 原文地址:https://blog.csdn.net/2301_77161927/article/details/139804503