Сбой теста плейбука с Ansible Molecule

Я создаю роль sudo и хочу проверить с помощью Molecule, что роль не работает, если правило неверно.

Как мы можем определить, что мы ожидаем, что сценарий потерпит неудачу с Molecule?

Например, если у меня есть следующая конфигурация:

sudo__entries:
  - name: super_alice
    content: "alice ALL NOPASSWD"

Роль завершится ошибкой, поскольку visudo не проверит файл.

И это поведение я хочу проверить.


person Alexandre Salomé    schedule 05.12.2019    source источник
comment
Я еще не нашел правильного способа сделать это самостоятельно удовлетворительным образом. Тем временем вас может заинтересовать side effect шаг, который не включено по умолчанию (см. документ Ansible provionner)   -  person Zeitounator    schedule 05.12.2019
comment
На этой странице я нашел документацию о том, что является побочным эффектом, но не помогает тестировать сбой плейбука. Я обновил свой вопрос примером.   -  person Alexandre Salomé    schedule 05.12.2019


Ответы (1)


Вы можете изменить 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, чтобы подтвердить, что сценарий сбоя не оставил хост в неисправном состоянии.

person ParkerM    schedule 13.03.2020