跳至内容

Ansible - 文件管理

本章将学习如何使用 Ansible 管理文件。


目标: 在本章中,您将学习如何

✔ 修改文件内容;
✔ 将文件上传到目标服务器;
✔ 从目标服务器检索文件。

🏁 ansiblemodulefiles

知识: ⭐ ⭐
复杂度: ⭐

阅读时间: 20 分钟


根据您的需要,您将需要使用不同的 Ansible 模块来修改系统配置文件。

ini_file 模块

当您想修改 INI 文件([] 之间的部分,然后是 key=value 对)时,最简单的方法是使用 ini_file 模块。

注意

更多信息可以在 这里找到.

该模块需要

  • 该部分的值
  • 该选项的名称
  • 新值

使用示例

- name: change value on inifile
  community.general.ini_file:
    dest: /path/to/file.ini
    section: SECTIONNAME
    option: OPTIONNAME
    value: NEWVALUE

lineinfile 模块

要确保文件包含某一行,或者当需要在文件中添加或修改某一行时,请使用 linefile 模块。

注意

更多信息可以在 这里找到.

在这种情况下,要修改的文件中的行将使用正则表达式找到。

例如,要确保 /etc/selinux/config 文件中以 SELINUX= 开头的行包含值 enforcing

- ansible.builtin.lineinfile:
    path: /etc/selinux/config
    regexp: '^SELINUX='
    line: 'SELINUX=enforcing'

copy 模块

当需要将文件从 Ansible 服务器复制到一个或多个主机时,最好使用 copy 模块。

注意

更多信息可以在 这里找到.

在这里,我们将 myflile.conf 从一个位置复制到另一个位置

- ansible.builtin.copy:
    src: /data/ansible/sources/myfile.conf
    dest: /etc/myfile.conf
    owner: root
    group: root
    mode: 0644

fetch 模块

当需要将文件从远程服务器复制到本地服务器时,最好使用 fetch 模块。

注意

更多信息可以在 这里找到.

该模块执行与 copy 模块相反的操作

- ansible.builtin.fetch:
    src: /etc/myfile.conf
    dest: /data/ansible/backup/myfile-{{ inventory_hostname }}.conf
    flat: yes

template 模块

Ansible 及其 template 模块使用 Jinja2 模板系统(http://jinja.pocoo.org/docs/)在目标主机上生成文件。

注意

更多信息可以在 这里找到.

例如

- ansible.builtin.template:
    src: /data/ansible/templates/monfichier.j2
    dest: /etc/myfile.conf
    owner: root
    group: root
    mode: 0644

如果目标服务允许,则可以添加验证步骤(例如,apache 使用命令 apachectl -t

- template:
    src: /data/ansible/templates/vhost.j2
    dest: /etc/httpd/sites-available/vhost.conf
    owner: root
    group: root
    mode: 0644
    validate: '/usr/sbin/apachectl -t'

get_url 模块

要从网站或 ftp 上传文件到一个或多个主机,请使用 get_url 模块。

- get_url:
    url: http://site.com/archive.zip
    dest: /tmp/archive.zip
    mode: 0640
    checksum: sha256:f772bd36185515581aa9a2e4b38fb97940ff28764900ba708e68286121770e9a

通过提供文件的校验和,如果目标位置已存在该文件且其校验和与提供的校验和匹配,则不会重新下载该文件。