跳至内容

Ansible - 文件管理

在本章中,您将学习如何使用 Ansible 管理文件。


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

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

🏁 ansible, module, files

知识⭐ ⭐
难度⭐

阅读时间: 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

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