使用 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 来补充这一点,以断言故障场景并未使主机处于损坏状态。