测试插件
测试插件评估模板表达式并返回 True 或 False。使用测试插件,您可以创建 条件语句 来实现任务、块、剧本、剧本集和角色的逻辑。Ansible 使用作为 Jinja 的一部分提供的 标准测试 并添加一些专门的测试插件。您可以 创建自定义 Ansible 测试插件.
启用测试插件
您可以通过将自定义测试插件放置到与您的剧本相邻的 test_plugins
目录中,放置到角色内,或者放置到在 ansible.cfg 中配置的测试插件目录源中来添加自定义测试插件。
使用测试插件
您可以在 Ansible 中可以使用模板的任何地方使用测试:在剧本中、在变量文件中或在 template 模块的 Jinja2 模板中。有关使用测试插件的更多信息,请参阅 测试.
测试始终返回 True
或 False
,它们始终是布尔值,如果您需要不同的返回值类型,则应该查看过滤器。
您可以在模板中通过使用 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
左侧的内容。测试还可以接受其他参数,就像您对大多数编程函数所做的那样。这些参数可以是 位置
(按顺序传递)或 命名
(作为键值对传递)。在同时传递两种类型时,位置参数应放在前面。
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
过滤器系列(select
、reject
、selectattr
、rejectattr
)。
# 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>
来查看特定于插件的文档和示例。