【规则说明·安全】避免含糊不清

本文是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
广告
将在 10 秒后关闭
bannerAds