跳至内容

args

此规则验证任务参数是否符合插件文档。

规则验证将检查选项名称是否有效,并具有正确的值,以及对选项的条件,例如mutually_exclusiverequired_togetherrequired_one_of等等。

更多信息请参见Ansible模块实用程序文档中的参数规范验证器主题。

可能的错误信息

  • args[module] - 缺少必需参数: ...
  • args[module] - 缺少…所需的参数。

问题代码

---
- name: Fixture to validate module options failure scenarios
  hosts: localhost
  tasks:
    - name: Clone content repository
      ansible.builtin.git: # <- Required option `repo` is missing.
        dest: /home/www
        accept_hostkey: true
        version: master
        update: false

    - name: Enable service httpd and ensure it is not masked
      ansible.builtin.systemd: # <- Missing 'name' parameter required by 'enabled'.
        enabled: true
        masked: false

    - name: Use quiet to avoid verbose output
      ansible.builtin.assert:
        test:
          - my_param <= 100
          - my_param >= 0
        quiet: invalid # <- Value for option `quiet` is invalid.

正确代码

---
- name: Fixture to validate module options pass scenario
  hosts: localhost
  tasks:
    - name: Clone content repository
      ansible.builtin.git: # <- Contains required option `repo`.
        repo: https://github.com/ansible/ansible-examples
        dest: /home/www
        accept_hostkey: true
        version: master
        update: false

    - name: Enable service httpd and ensure it is not masked
      ansible.builtin.systemd: # <- Contains 'name' parameter required by 'enabled'.
        name: httpd
        enabled: false
        masked: false

    - name: Use quiet to avoid verbose output
      ansible.builtin.assert:
        that:
          - my_param <= 100
          - my_param >= 0
        quiet: True # <- Has correct type value for option `quiet` which is boolean.

特殊情况

在一些复杂的案例中,如果您使用的是Jinja表达式,linter可能无法完全验证所有可能的值并报告误报。下面的例子通常会报告parameters are mutually exclusive: data|file|keyserver|url,但是因为我们添加了# noqa: args[module],它将直接通过。

- name: Add apt keys # noqa: args[module]
  become: true
  ansible.builtin.apt_key:
    url: "{{ zj_item['url'] | default(omit) }}"
    data: "{{ zj_item['data'] | default(omit) }}"
  loop: "{{ repositories_keys }}"
  loop_control:
    loop_var: zj_item