【规则说明·基础】神社

这篇文章是Ansible lint Advent Calendar 2022日历第2天的第9篇文章。

这次我们将解释关于神社规则的事项。(Zhè cì de .)

仅需一种选择:金瓯 ‘ōu)

当在Ansible内容中使用jinja2模板时,jinja会验证模板的编写是否符合要求。

当前正在验证以下项目。

仁仁

如果在变量和操作符之间没有空格(包括过滤器),将会输出错误。在Ansible中,应该写成{{ var_name | filter }}。

对不起 [无效]。

如果模板的描述不正确,将会输出错误信息,就像”{{ & }}”一样。在Ansible中,应该这样写:”{{ ‘&’ }}”。

有问题的代码

---
- name: Example playbook
  gather_facts: false
  hosts: all
  vars:
    bar: "{{ & }}" # <- 記号がエスケープされていない
    dict: "{name:Ansible, github:https://github.com/ansible/ansible}" # <- key と value の間にスペースがない
    foo: "{{ dict|dict2items(key_name='name', value_name='github') }}" # <- 演算子との間にスペースがない
  tasks:
    - name: Debug 1
      ansible.builtin.debug:
        var: bar

    - name: Debug 2
      ansible.builtin.debug:
        var: foo

被修正的代码 shì de

---
- name: Example playbook
  gather_facts: false
  hosts: all
  vars:
    bar: "{{ '&' }}" # <- 記号はエスケーブする
    dict: "{ name: Ansible, github: https://github.com/ansible/ansible }" # <- key と value の間にスペースを入れる
    foo: "{{ dict | dict2items(key_name='name', value_name='github') }}" # <- 演算子にスペースを入れる
  tasks:
    - name: Debug 1
      ansible.builtin.debug:
        var: bar

    - name: Debug 2
      ansible.builtin.debug:
        var: foo

其他 (qí tā)

目前,Shrine(jinja)存在以下限制。

    • 改行がある Jinja2 ブロックは検証されない。

 

    • チルダを二項演算子として使用する Jinja2 ブロックは検証されない。例 {{a ~ b }}

数字にドット記法を使用する Jinja2 ブロックは検証されない。例 {{ foo.0.bar }}

Jinja不能完全检测到Ansible模板中的描述问题。但最终在Ansible执行时会出现错误并停止处理,因此即使模板中存在描述问题,似乎也不会成为问题。

请查看参考网站。

    jinja — Ansible Lint Documentation
bannerAds