美文网首页ansible
03-常用模块(一)-文件操作模块

03-常用模块(一)-文件操作模块

作者: 洛神鬼道 | 来源:发表于2018-08-27 11:02 被阅读0次

    Ansible

    Ansible version : 2.6.2

    常用模块(一)

    文件操作模块

    • acl
    • archive
    • assemble
    • blockinfile
    • copy
    • fetch
    • file
    • find
    • ini_file
    • iso_extract
    • lineinfile
    • patch
    • replace
    • stat
    • synchronize
    • tempfile
    • template
    • unarchive
    • xattr
    • xml

    模块:file

    概要

    设置文件、symlinks和目录的属性,或删除文件/symlinks/目录。许多其他模块支持与[file]模块相同的选项—包括[copy]、[template]和[assemble]。对于Windows主机,使用[win_file]模块。

    参数
    参数(*必选) 默认值 注释
    attributes null 文件或者目录具有的属性。该字符串应包含与`lsattr'显示的属性顺序相同的属性。
    follow yes 表示应遵循文件系统链接(如果存在)。在2.5版本以前,默认值为no
    force no 在两种情况下强制创建符号链接:源文件不存在(但稍后会出现); 目标存在并且是一个文件(需要取消链接“路径”文件并创建符号链接到“src”文件来替代)。
    group null 文件/目录所属组名,将会提供给chown使用
    mode 设置文件或目录权限。 1.为了yaml能够解析,可以使用八进制表示,例如0644 2. ansible接收到字符串通过自己内部的方式转化为数字,例如'644'、‘0644’。 3. 采用symbolic模式。例如u+rwx 或者 u=rw,g=r,o=r
    owner 文件/目录所属用户名,将会提供给chown使用
    * path 要管理的文件的路径。 别名:destname
    recurse no 递归设置指定的文件属性(仅适用于目录)
    selevel s0 SELinux文件上下文的级别部分。 这是MLS / MCS属性,有时称为range_default功能与seuser功能相同。
    serole null SELinux文件上下文的角色部分。_default功能与seuser功能相同。
    setype null SELinux文件上下文的类型部分。_default功能与seuser功能相同。
    seuser null SELinux文件上下文的用户部分。将默认系统策略,如果适用。如果设置为_default,它将使用策略的user部分(如果可用)。
    src null 要链接到的文件的路径(仅适用于state=linkstate=hard)。接受绝对,相对和不存在的路径。相对路径是相对于正在创建的文件path),这是UNIX命令ln -s SRC DEST处理相对路径的方式。
    state file 1. 如果是directory,如果它们不存在,将创建所有中间子目录。 从Ansible 1.7开始,它们将使用提供的权限创建。2. 如果是file,如果该文件不存在,则不会创建该文件; 如果您想要这种行为,请查看touch值或[copy]或[template]模块。3. 如果是link,将创建或更改符号链接。 使用hard进行硬链接。4. 如果absent,将递归删除目录,并且将取消链接文件或符号链接。注意,如果path不存在,并且状态没有改变,那么absent不会导致file失败。如果touch(1.4中新增),如果path不存在,将创建一个空文件,而现有文件或目录将接收到更新的文件访问和修改时间(类似于命令行中的touch工作方式)。可选参数:absent, directory, file, hard, link, touch
    unsafe_writes no 通常,此模块使用原子操作来防止数据损坏或来自目标文件的不一致读取,有时系统配置或仅以阻止此操作的方式中断。 一个例子是docker挂载的文件,它们不能以原子方式更新,并且只能以安全的方式完成。
    例子
    ad-hoc

    创建文件(指定权限)

    ansible localhost -m file -a 'dest=/tmp/testdir.txt mode=0644 state=touch'
    

    创建目录(指定用户、组、权限)

    ansible localhost -m file -a 'dest=/tmp/testdir3 mode=0644 state=directory owner=luoshen group=luoshen' 
    
    playbook

    修改所属用户、组、权限。如果mode使用8进制,首位必须为0.

    - file:
        path: /etc/foo.conf
        owner: foo
        group: foo
        mode: 0644
    - file:
        src: /file/to/link/to
        dest: /path/to/symlink
        owner: foo
        group: foo
        state: link
    - file:
        src: '/tmp/{{ item.src }}'
        dest: '{{ item.dest }}'
        state: link
      with_items:
        - { src: 'x', dest: 'y' }
        - { src: 'z', dest: 'k' }
    

    创建文件(指定权限)

    - file:
        path: /etc/foo.conf
        state: touch
        mode: "u=rw,g=r,o=r"
    

    修改已有文件权限

    - file:
        path: /etc/foo.conf
        state: touch
        mode: "u+rw,g-wx,o-rwx"
    

    如果目录不存在,则创建

    - file:
        path: /etc/some_directory
        state: directory
        mode: 0755
    
    

    模块:copy

    概要

    [copy]模块将文件从本地或远程计算机复制到远程计算机上的某个位置。 使用[fetch]模块将文件从远程位置复制到本地。如果需要在复制的文件中进行变量插值,使用[template]模块。 对于Windows,采用[win_copy]模块。

    参数
    参数(*必选) 默认 注释
    attributes null 文件或目录应具有的属性。 要获得支持的标志,请查看目标系统上chattr的手册页。 该字符串应包含与lsattr显示的属性顺序相同的属性。
    backup no 创建一个包含时间戳信息的备份文件,如果你以某种方式错误地破坏了原始文件,就可以将其恢复原状。
    checksum null 预期的sha1校验值,用于验证文件副本是否成功。如果未提供,则ansible将使用src文件的本地计算校验和。
    content null 当替代src使用时,将文件的内容直接设置为指定的值。 对于任何高级或格式化的内容,查看template模块。
    decrypt yes 此选项使用Vault控制源文件的自动解密。
    * dest 复制到远端必须是绝对路径。如果'src'是一个目录,'dest'也必须是一个目录。如果'dest'是一个不存在的路径并且'dest'已'/'结尾或者’src‘是一个目录,'dest'被创建。如果'src'与'dest'都是文件,则'dest'的父文件夹不会被创建,如果不存在则task会失败。
    directory_mode null 执行递归复制时,设置目录的模式。 如果未设置,我们将使用系统默认值。 该模式仅在创建新目录上设置,不会影响已存在的目录。
    follow no 目标主机中的文件系统连接,如果存在,则保持一致。
    force yes 默认值为yes,当内容与源不同时,将替换远程文件。 如果不是,则仅在目标不存在时才传输文件。
    group null 文件/目录所属组名,将会提供给chown使用
    local_follow yes 源主机中的文件系统连接,如果存在,则保持一致。
    mode 设置文件或目录权限。 对于习惯于/usr/bin/chmod的人来说,实际上是八进制数。 你必须指定首位为零,以便Ansible的YAML解析器知道它是一个八进制数(如0644或01777)或引用它(如'644'或'0644'所以Ansible接收一个字符串并可以自己从字符串转换,在没有遵循这些规则之一的情况下给Ansible一个数字将得到一个十进制数,这将产生意想不到的结果。从版本1.8开始,模式可以指定为符号模式(例如,u + rwx或u = rw ,g = r,o = r)。从版本2.3开始,模式也可以是特殊的字符串保留.reserved表示文件将被赋予与源文件相同的权限。
    owner null 文件/目录所属用户名,将会提供给chown使用
    remote_src no 如果不是,它将在来源/master上搜索src。如果是,它将转到src的远程/目标机器。 默认为否。目前remote_src不支持递归复制。remote_src仅适用于版本2.6的mode = preserve。
    selevel s0 SELinux文件上下文的级别部分。 这是MLS / MCS属性,有时称为range。 _default功能与seuser功能相同。
    serole null SELinux文件上下文的角色部分。_default功能与seuser功能相同。
    setype null SELinux文件上下文的类型部分。_default功能与seuser功能相同。
    seuser null SELinux文件上下文的用户部分。将默认系统策略,如果适用。如果设置为_default,它将使用策略的user部分(如果可用)。
    src null 要复制到远程服务器的文件的本地路径; 可以是绝对的或相对的。 如果path是目录,则以递归方式复制它。 在这种情况下,如果路径以“/”结尾,则只将该目录的内部内容复制到目标。 否则,如果它不以“/”结尾,则复制具有所有内容的目录本身。 此行为类似于Rsync。
    unsafe_writes no 通常,此模块使用原子操作来防止数据损坏或来自目标文件的不一致读取,有时系统配置或仅以阻止此操作的方式中断。 一个例子是docker挂载的文件,它们不能以原子方式更新,只能以不安全的方式完成。这个布尔选项允许ansible回退到不安全的更新文件的方法,用于那些你没有任何其他选择的情况。 请注意,这受竞争条件的影响,并可能导致数据损坏。
    validate null 要在复制到位之前运行的验证命令。 要验证的文件的路径是通过'%s'传递的,这必须在下面的例子中显示。 该命令是安全传递的,因此扩展和管道等shell功能将无法正常工作。
    注意
    • [copy]模块递归复制大量规模(超过数百个)文件,不会很方便。作为替代品,我们可以使用封装了rsync的[synchronize]模块。
    • 对于windows主机,使用[win_copy]代替。
    例子
    ad-hoc

    指定预期的校验值

    ansible localhost -m copy -a "src=1.py dest=/tmp/ checksum=bbe26b84e40cfb01ac6f1395260b55afedf641b7"
    

    复制内容到目标服务器

    ansible localhost -m copy -a 'content="this is test text." dest=/tmp/test.txt'
    
    playbook

    复制文件(指定权限、用户、组)

    - name: example copying file with owner and permissions
      copy:
        src: /srv/myfiles/foo.conf
        dest: /etc/foo.conf
        owner: foo
        group: foo
        mode: 0644
    

    复制文件,如果不一样则先备份后复制

    - name: Copy a new "ntp.conf file into place, backing up the original if it differs from the copied version
      copy:
        src: /mine/ntp.conf
        dest: /etc/ntp.conf
        owner: root
        group: root
        mode: 0644
        backup: yes
    

    在安全验证之后,复制文件

    - name: Copy a new "sudoers" file into place, after passing validation with visudo
      copy:
        src: /mine/sudoers
        dest: /etc/sudoers
        validate: /usr/sbin/visudo -cf %s
    
    

    在安全验证之后,源文件来自目标服务器,复制文件。

    - name: Copy a "sudoers" file on the remote machine for editing
      copy:
        src: /etc/sudoers
        dest: /etc/sudoers.edit
        remote_src: yes
        validate: /usr/sbin/visudo -cf %s
    
    

    复制内容到目标服务器,如果有内容会覆盖

    - name: Copy using the 'content' for inline data
      copy:
        content: '# This file was moved to /etc/other.conf'
        dest: /etc/mine.conf'
    
    

    模块:template

    概要

    template模块是用来处理jinja语法的。6个额外的变量可以在template使用。

    变量 注释
    ansible_managed 包含了一个字符串,可以用于描述模板名称、主机、模板文件修改时间以及所有者的uid,可以通过ansible.cfg里面的default配置
    template_host 包含了模板机器的节点名称
    template_uid 所有者的数字用户ID
    template_path 模板路径
    template_fullpath 模板绝对路径
    template_run_date 模板呈现的日期。
    参数
    参数(*必选) 默认值 注释
    attributes null 文件或目录应具有的属性。 要获得支持的标志,请查看目标系统上chattr的手册页。 该字符串应包含与lsattr显示的属性顺序相同的属性。
    backup no 创建一个包含时间戳信息的备份文件,如果你以某种方式错误地破坏了原始文件,就可以将其恢复原状。
    block_end_string %} 标记块结尾的字符串。
    block_start_string {% 标记块起始的字符串。
    * dest 在远程计算机上呈现模板的位置。
    follow no 此标志表示如果存在应遵循目标中的文件系统链接。在Ansible 2.4版本以前为yes
    force yes 默认值为yes,当内容与源不同时,将替换远程文件。 如果不是,则仅在目标不存在时才传输文件。
    group null 文件/目录所属组名,将会提供给chown使用
    lstrip_blocks no 如果将此设置为True,则前置空格和制表符将从行首开始删除到块。将此选项设置为True需要Jinja2版本> = 2.7。
    mode null 设置文件或目录权限。 对于习惯于/usr/bin/chmod的人来说,实际上是八进制数。 你必须指定首位为零,以便Ansible的YAML解析器知道它是一个八进制数(如0644或01777)或引用它(如'644'或'0644'所以Ansible接收一个字符串并可以自己从字符串转换,在没有遵循这些规则之一的情况下给Ansible一个数字将得到一个十进制数,这将产生意想不到的结果。从版本1.8开始,模式可以指定为符号模式(例如,u + rwx或u = rw ,g = r,o = r)。从版本2.3开始,模式也可以是特殊的字符串保留.reserved表示文件将被赋予与源文件相同的权限。
    newline_sequence \n 指定用于模板文件的换行符。可选:\n\r\r\n
    own null 文件/目录所属用户名,将会提供给chown使用
    selevel s0 SELinux文件上下文的级别部分。 这是MLS / MCS属性,有时称为range。 _default功能与seuser功能相同。
    serole null SELinux文件上下文的角色部分。_default功能与seuser功能相同。
    setype null SELinux文件上下文的类型部分。_default功能与seuser功能相同。
    seuser null SELinux文件上下文的用户部分。将默认系统策略,如果适用。如果设置为_default,它将使用策略的user部分(如果可用)。
    * src Ansible控制节点上Jinja2格式化模板的路径。可以是绝对路径或者相对路径。
    trim_blocks yes 如果将其设置为True,则删除块后的第一个换行符(块,而不是变量标签!)。
    unsafe_writes no 通常,此模块使用原子操作来防止数据损坏或来自目标文件的不一致读取,有时系统配置或仅以阻止此操作的方式中断。 一个例子是docker挂载的文件,它们不能以原子方式更新,只能以不安全的方式完成。这个布尔选项允许ansible回退到不安全的更新文件的方法,用于那些你没有任何其他选择的情况。 请注意,这受竞争条件的影响,并可能导致数据损坏。
    validate null 要在复制到位之前运行的验证命令。 要验证的文件的路径是通过'%s'传递的,这必须在下面的例子中显示。 该命令是安全传递的,因此扩展和管道等shell功能将无法正常工作。
    variable_end_string }} 标记打印语句末尾的字符串。
    variable_start_string {{ 标记打印语句起始的字符串。
    例子

    ansible playbook

    - template:
        src: /mytemplates/foo.j2
        dest: /etc/file.conf
        owner: bin
        group: wheel
        mode: 0644
    

    symbolic模式的ansible playbook

    - template:
        src: /mytemplates/foo.j2
        dest: /etc/file.conf
        owner: bin
        group: wheel
        mode: "u=rw,g=r,o=r"
    
    

    从template创建ini格式文件

    - template:
        src: config.ini.j2
        dest: /share/windows/config.ini
        newline_sequence: '\r\n'
    

    sshd配置安全升级,避免自己锁定退出

    - template:
        src: etc/ssh/sshd_config.j2
        dest: /etc/ssh/sshd_config
        owner: root
        group: root
        mode: '0600'
        validate: /usr/sbin/sshd -t -f %s
        backup: yes
    

    相关文章

      网友评论

        本文标题:03-常用模块(一)-文件操作模块

        本文链接:https://www.haomeiwen.com/subject/odeziftx.html