测试插件

测试插件评估模板表达式并返回 True 或 False。使用测试插件,您可以创建 条件语句 来实现任务、块、剧本、剧本和角色的逻辑。Ansible 使用 Jinja 中自带的 标准测试 并添加一些专门的测试插件。您可以 创建自定义 Ansible 测试插件.

启用测试插件

您可以通过将自定义测试插件放到剧本旁边的 test_plugins 目录中、放到角色内部,或将其放到 ansible.cfg 中配置的测试插件目录源之一中来添加自定义测试插件。

使用测试插件

您可以在 Ansible 中使用模板的地方使用测试:在剧本中、在变量文件中,或者在 template 模块的 Jinja2 模板中。有关使用测试插件的更多信息,请参见 测试.

测试总是返回 TrueFalse,它们始终是布尔值,如果您需要不同的返回值类型,则应该使用过滤器。

您可以在模板中通过使用 is 语句来识别测试插件,它们也可以用作 select 过滤器族的一部分。

vars:
  is_ready: '{{ task_result is success }}'

tasks:
- name: conditionals are always in 'template' context
  action: dostuff
  when: task_result is failed

测试总是会有一个 _input,它通常是 is 左侧的内容。测试还可以接受额外的参数,就像您在大多数编程函数中一样。这些参数可以是 positional(按顺序传递)或 named(作为 key=value 对传递)。当同时传递两种类型时,位置参数应放在前面。

tasks:
- name: pass a positional parameter to match test
  action: dostuff
  when: myurl is match("https://example.com/users/.*/resources")

- name: pass named parameter to truthy test
  action: dostuff
  when: myvariable is truthy(convert_bool=True)

- name: pass both types to 'version' test
  action: dostuff
  when: sample_semver_var is version('2.0.0-rc.1+build.123', 'lt', version_type='semver')

使用测试插件处理列表

如上所述,使用测试的一种方法是使用 select 过滤器族(selectrejectselectattrrejectattr)。

# give me only defined variables from a list of variables, using 'defined' test
good_vars: "{{ all_vars|select('defined') }}"

# this uses the 'equalto' test to filter out non 'fixed' type of addresses from a list
only_fixed_addresses:  "{{ all_addresses|selectattr('type', 'equalto', 'fixed') }}"

# this does the opposite of the previous one
only_fixed_addresses:  "{{ all_addresses|rejectattr('type', 'equalto', 'fixed') }}"

插件列表

您可以使用 ansible-doc -t test -l 来查看可用的插件列表。使用 ansible-doc -t test <plugin name> 来查看特定插件的文档和示例。

另请参见

Ansible 剧本

剧本介绍

测试

使用测试

条件语句

使用条件语句

过滤器插件

过滤器插件

测试

使用测试

查找插件

查找插件

沟通

有问题吗?需要帮助吗?想分享你的想法吗?请访问 Ansible 沟通指南