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