【规则说明·安全】避免含糊不清
本文是2022年Ansible Lint圣诞日历第2页的第14天的文章。
本次我们将说明避免隐含规则的规则。
避免隐含
当在ansible.builtin.copy中传递字符串类型的复制源数据时,如果格式不明确,avoid-implicit将输出错误。在ansible.builtin.copy中,复制源数据是通过指定数据路径src来进行的。另外,如果要将字符串复制到文本文件中(写入),则应尽可能使用ansible.builtin.template而不是ansible.builtin.copy。
ParameterCommentscontent
string
added in Ansible 1.1When used instead of src, sets the contents of a file directly to the specified value.
Works only when dest is a file. Creates the file if it does not exist.
For advanced formatting or if content contains a variable, use the ansible.builtin.template module.
如果使用ansible.builtin.copy模块复制(写入)字符串,则尽可能明确数据格式。
有問題的程式碼
---
- name: Example playbook
hosts: localhost
tasks:
- name: Write file content
ansible.builtin.copy:
content: { "foo": "bar" } # <- データの形式が不明瞭
dest: /tmp/foo.txt
修正后的代码
---
- name: Example playbook
hosts: localhost
tasks:
- name: Write file content
vars:
content: { "foo": "bar" }
ansible.builtin.copy:
content: "{{ content | to_json }}" # <- jinja2 フィルターを用いて JSON 形式へ変換する
dest: /tmp/foo.txt
其他
如文档所述,你可以使用 ansible.builtin.copy 进行字符串的复制处理(或写入处理),但其功能有限且不是官方推荐的方法,建议使用 ansible.builtin.template。
参考网站
- avoid-implicit — Ansible Lint Documentation