使用 Ansible Molecule 测试剧本失败
Test failure of a playbook with Ansible Molecule
我正在创建一个 sudo 角色,并想用 Molecule 测试如果规则不正确,角色会失败。
我们如何定义我们预期 playbook 会因 Molecule 而失败?
例如,如果我有以下配置:
sudo__entries:
- name: super_alice
content: "alice ALL NOPASSWD"
角色将失败,因为 visudo
不会验证文件。
这就是我要测试的行为。
您可以修改 converge.yml
以使用救援块测试故障场景,使用与此单元测试范例类似的方法:
try {
foo();
Assert.fail();
} catch(FooException e) {
// Caught expected exception from foo()
}
角色 sudo
的示例失败场景将有一个 converge.yml
看起来像:
---
- name: Does not converge
hosts: all
tasks:
- block:
- name: "Include sudo"
include_role:
name: "sudo"
register: expected_failure
- name: "Check execution halted"
fail:
msg: "Execution should stop before this task"
register: should_not_run
rescue:
- assert:
that:
- expected_failure is defined
- should_not_run is not defined
您还可以使用 verify.yml
来补充这一点,以断言故障场景并未使主机处于损坏状态。
我正在创建一个 sudo 角色,并想用 Molecule 测试如果规则不正确,角色会失败。
我们如何定义我们预期 playbook 会因 Molecule 而失败?
例如,如果我有以下配置:
sudo__entries:
- name: super_alice
content: "alice ALL NOPASSWD"
角色将失败,因为 visudo
不会验证文件。
这就是我要测试的行为。
您可以修改 converge.yml
以使用救援块测试故障场景,使用与此单元测试范例类似的方法:
try {
foo();
Assert.fail();
} catch(FooException e) {
// Caught expected exception from foo()
}
角色 sudo
的示例失败场景将有一个 converge.yml
看起来像:
---
- name: Does not converge
hosts: all
tasks:
- block:
- name: "Include sudo"
include_role:
name: "sudo"
register: expected_failure
- name: "Check execution halted"
fail:
msg: "Execution should stop before this task"
register: should_not_run
rescue:
- assert:
that:
- expected_failure is defined
- should_not_run is not defined
您还可以使用 verify.yml
来补充这一点,以断言故障场景并未使主机处于损坏状态。