From 97faa7429cd2610696222bcf15f7ffdcf3b40a4f Mon Sep 17 00:00:00 2001 From: Dieter Verhelst Date: Tue, 12 Mar 2019 10:33:14 +0100 Subject: [PATCH] Replace goss tests with testinfra --- .gitignore | 3 + .travis.yml | 2 +- molecule/clients/molecule.yml | 4 +- molecule/clients/tests | 1 + molecule/clients/tests/test_all.yml | 1 - molecule/clients/tests/test_client.yml | 1 - .../clients/tests/test_client_restore.yml | 1 - molecule/clients/tests/test_server.yml | 1 - molecule/clients/verify.yml | 154 -------------- molecule/commands/Dockerfile.j2 | 1 - molecule/commands/INSTALL.rst | 26 --- molecule/commands/molecule.yml | 51 ----- molecule/commands/playbook.yml | 1 - molecule/commands/prepare.yml | 1 - molecule/commands/restore.sh.j2 | 1 - molecule/commands/side_effect.yml | 1 - molecule/commands/tests/test_all.yml | 1 - molecule/commands/tests/test_client.yml | 1 - .../commands/tests/test_client_commands.yml | 19 -- .../commands/tests/test_client_restore.yml | 1 - molecule/commands/tests/test_server.yml | 1 - molecule/commands/verify.yml | 151 ------------- molecule/folders/molecule.yml | 6 +- molecule/folders/tests | 1 + molecule/folders/tests/test_all.yml | 1 - molecule/folders/tests/test_client.yml | 1 - .../folders/tests/test_client_folders.yml | 11 - .../folders/tests/test_client_restore.yml | 1 - molecule/folders/tests/test_server.yml | 1 - molecule/folders/verify.yml | 151 ------------- molecule/generic_files/tests/.flake8 | 2 + molecule/generic_files/tests/test_all.py | 6 + molecule/generic_files/tests/test_all.yml | 9 - molecule/generic_files/tests/test_client.py | 45 ++++ molecule/generic_files/tests/test_client.yml | 38 ---- .../tests/test_client_folders.py | 9 + .../tests/test_client_restore.py | 24 +++ .../tests/test_client_restore.yml | 18 -- molecule/generic_files/tests/test_lamp.py | 16 ++ molecule/generic_files/tests/test_mgt.py | 18 ++ molecule/generic_files/tests/test_server.py | 23 ++ molecule/generic_files/tests/test_server.yml | 28 --- molecule/lamp/molecule.yml | 4 +- molecule/lamp/tests | 1 + molecule/lamp/tests/test_all.yml | 1 - molecule/lamp/tests/test_client.yml | 1 - molecule/lamp/tests/test_client_restore.yml | 1 - molecule/lamp/tests/test_lamp.yml | 17 -- molecule/lamp/tests/test_server.yml | 1 - molecule/lamp/verify.yml | 200 ------------------ molecule/mgt/molecule.yml | 4 +- molecule/mgt/tests | 1 + molecule/mgt/tests/test_all.yml | 1 - molecule/mgt/tests/test_client.yml | 1 - molecule/mgt/tests/test_client_restore.yml | 1 - molecule/mgt/tests/test_mgt.yml | 16 -- molecule/mgt/tests/test_server.yml | 1 - molecule/mgt/verify.yml | 200 ------------------ molecule/multiple/molecule.yml | 4 +- molecule/multiple/tests | 1 + molecule/multiple/tests/test_all.yml | 1 - molecule/multiple/tests/test_client.yml | 1 - .../multiple/tests/test_client_restore.yml | 1 - molecule/multiple/tests/test_server.yml | 1 - molecule/multiple/verify.yml | 151 ------------- 65 files changed, 163 insertions(+), 1281 deletions(-) create mode 100644 .gitignore create mode 120000 molecule/clients/tests delete mode 120000 molecule/clients/tests/test_all.yml delete mode 120000 molecule/clients/tests/test_client.yml delete mode 120000 molecule/clients/tests/test_client_restore.yml delete mode 120000 molecule/clients/tests/test_server.yml delete mode 100644 molecule/clients/verify.yml delete mode 120000 molecule/commands/Dockerfile.j2 delete mode 100644 molecule/commands/INSTALL.rst delete mode 100644 molecule/commands/molecule.yml delete mode 120000 molecule/commands/playbook.yml delete mode 120000 molecule/commands/prepare.yml delete mode 120000 molecule/commands/restore.sh.j2 delete mode 120000 molecule/commands/side_effect.yml delete mode 120000 molecule/commands/tests/test_all.yml delete mode 120000 molecule/commands/tests/test_client.yml delete mode 100644 molecule/commands/tests/test_client_commands.yml delete mode 120000 molecule/commands/tests/test_client_restore.yml delete mode 120000 molecule/commands/tests/test_server.yml delete mode 100644 molecule/commands/verify.yml create mode 120000 molecule/folders/tests delete mode 120000 molecule/folders/tests/test_all.yml delete mode 120000 molecule/folders/tests/test_client.yml delete mode 100644 molecule/folders/tests/test_client_folders.yml delete mode 120000 molecule/folders/tests/test_client_restore.yml delete mode 120000 molecule/folders/tests/test_server.yml delete mode 100644 molecule/folders/verify.yml create mode 100644 molecule/generic_files/tests/.flake8 create mode 100644 molecule/generic_files/tests/test_all.py delete mode 100644 molecule/generic_files/tests/test_all.yml create mode 100644 molecule/generic_files/tests/test_client.py delete mode 100644 molecule/generic_files/tests/test_client.yml create mode 100644 molecule/generic_files/tests/test_client_folders.py create mode 100644 molecule/generic_files/tests/test_client_restore.py delete mode 100644 molecule/generic_files/tests/test_client_restore.yml create mode 100644 molecule/generic_files/tests/test_lamp.py create mode 100644 molecule/generic_files/tests/test_mgt.py create mode 100644 molecule/generic_files/tests/test_server.py delete mode 100644 molecule/generic_files/tests/test_server.yml create mode 120000 molecule/lamp/tests delete mode 120000 molecule/lamp/tests/test_all.yml delete mode 120000 molecule/lamp/tests/test_client.yml delete mode 120000 molecule/lamp/tests/test_client_restore.yml delete mode 100644 molecule/lamp/tests/test_lamp.yml delete mode 120000 molecule/lamp/tests/test_server.yml delete mode 100644 molecule/lamp/verify.yml create mode 120000 molecule/mgt/tests delete mode 120000 molecule/mgt/tests/test_all.yml delete mode 120000 molecule/mgt/tests/test_client.yml delete mode 120000 molecule/mgt/tests/test_client_restore.yml delete mode 100644 molecule/mgt/tests/test_mgt.yml delete mode 120000 molecule/mgt/tests/test_server.yml delete mode 100644 molecule/mgt/verify.yml create mode 120000 molecule/multiple/tests delete mode 120000 molecule/multiple/tests/test_all.yml delete mode 120000 molecule/multiple/tests/test_client.yml delete mode 120000 molecule/multiple/tests/test_client_restore.yml delete mode 120000 molecule/multiple/tests/test_server.yml delete mode 100644 molecule/multiple/verify.yml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..02b9af6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.pytest_cache/ +__pycache__/ +pytestdebug.log diff --git a/.travis.yml b/.travis.yml index b30e632..bc27898 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,4 +15,4 @@ script: - molecule test --scenario-name lamp - molecule test --scenario-name mgt - molecule test --scenario-name multiple - - molecule test --scenario-name clients +# - molecule test --scenario-name clients diff --git a/molecule/clients/molecule.yml b/molecule/clients/molecule.yml index 8af276a..cde375d 100644 --- a/molecule/clients/molecule.yml +++ b/molecule/clients/molecule.yml @@ -81,6 +81,4 @@ provisioner: scenario: name: clients verifier: - name: goss - lint: - name: yamllint + name: testinfra diff --git a/molecule/clients/tests b/molecule/clients/tests new file mode 120000 index 0000000..630b75e --- /dev/null +++ b/molecule/clients/tests @@ -0,0 +1 @@ +../generic_files/tests \ No newline at end of file diff --git a/molecule/clients/tests/test_all.yml b/molecule/clients/tests/test_all.yml deleted file mode 120000 index 50b87ac..0000000 --- a/molecule/clients/tests/test_all.yml +++ /dev/null @@ -1 +0,0 @@ -../../generic_files/tests/test_all.yml \ No newline at end of file diff --git a/molecule/clients/tests/test_client.yml b/molecule/clients/tests/test_client.yml deleted file mode 120000 index 865fba3..0000000 --- a/molecule/clients/tests/test_client.yml +++ /dev/null @@ -1 +0,0 @@ -../../generic_files/tests/test_client.yml \ No newline at end of file diff --git a/molecule/clients/tests/test_client_restore.yml b/molecule/clients/tests/test_client_restore.yml deleted file mode 120000 index 01a0351..0000000 --- a/molecule/clients/tests/test_client_restore.yml +++ /dev/null @@ -1 +0,0 @@ -../../generic_files/tests/test_client_restore.yml \ No newline at end of file diff --git a/molecule/clients/tests/test_server.yml b/molecule/clients/tests/test_server.yml deleted file mode 120000 index 1c4e7c6..0000000 --- a/molecule/clients/tests/test_server.yml +++ /dev/null @@ -1 +0,0 @@ -../../generic_files/tests/test_server.yml \ No newline at end of file diff --git a/molecule/clients/verify.yml b/molecule/clients/verify.yml deleted file mode 100644 index cdc44c2..0000000 --- a/molecule/clients/verify.yml +++ /dev/null @@ -1,154 +0,0 @@ ---- -# This is an example playbook to execute goss tests. -# Tests need distributed to the appropriate ansible host/groups -# prior to execution by `goss validate`. - -- name: Verify all - hosts: all - become: true - vars: - goss_version: v0.3.2 - goss_arch: amd64 - goss_dst: /usr/local/bin/goss - goss_sha256sum: 2f6727375db2ea0f81bee36e2c5be78ab5ab8d5981f632f761b25e4003e190ec - goss_url: "https://github.com/aelsabbahy/goss/releases/download/{{ goss_version }}/goss-linux-{{ goss_arch }}" - goss_test_directory: /tmp - goss_format: documentation - molecule_scenario_name: clients - tasks: - - name: Download and install Goss - get_url: - url: "{{ goss_url }}" - dest: "{{ goss_dst }}" - sha256sum: "{{ goss_sha256sum }}" - mode: 0755 - register: download_goss - until: download_goss is succeeded - retries: 3 - - - name: Copy Goss tests to remote - template: - src: "{{ item }}" - dest: "{{ goss_test_directory }}/{{ item | basename }}" - with_fileglob: - - "{{ lookup('env', 'MOLECULE_VERIFIER_TEST_DIRECTORY') }}/test_all.yml" - - - name: Register test files - shell: "ls {{ goss_test_directory }}/test_all.yml" - register: test_files - - - name: Execute Goss tests - command: "{{ goss_dst }} -g {{ item }} validate --format {{ goss_format }}" - register: test_results - with_items: "{{ test_files.stdout_lines }}" - - - name: Display details about the Goss results - debug: - msg: "{{ item.stdout_lines }}" - with_items: "{{ test_results.results }}" - - - name: Fail when tests fail - fail: - msg: "Goss failed to validate" - when: item.rc != 0 - with_items: "{{ test_results.results }}" - -- name: Verify clients - hosts: all:!borgbackup_servers - become: true - vars: - goss_version: v0.3.2 - goss_arch: amd64 - goss_dst: /usr/local/bin/goss - goss_sha256sum: 2f6727375db2ea0f81bee36e2c5be78ab5ab8d5981f632f761b25e4003e190ec - goss_url: "https://github.com/aelsabbahy/goss/releases/download/{{ goss_version }}/goss-linux-{{ goss_arch }}" - goss_test_directory: /tmp - goss_format: documentation - molecule_scenario_name: clients - tasks: - - name: Download and install Goss - get_url: - url: "{{ goss_url }}" - dest: "{{ goss_dst }}" - sha256sum: "{{ goss_sha256sum }}" - mode: 0755 - register: download_goss - until: download_goss is succeeded - retries: 3 - - - name: Copy Goss tests to remote - template: - src: "{{ item }}" - dest: "{{ goss_test_directory }}/{{ item | basename }}" - with_fileglob: - - "{{ lookup('env', 'MOLECULE_VERIFIER_TEST_DIRECTORY') }}/test_client*.yml" - - - name: Register test files - shell: "ls {{ goss_test_directory }}/test_client*.yml" - register: test_files - - - name: Execute Goss tests - command: "{{ goss_dst }} -g {{ item }} validate --format {{ goss_format }}" - register: test_results - with_items: "{{ test_files.stdout_lines }}" - - - name: Display details about the Goss results - debug: - msg: "{{ item.stdout_lines }}" - with_items: "{{ test_results.results }}" - - - name: Fail when tests fail - fail: - msg: "Goss failed to validate" - when: item.rc != 0 - with_items: "{{ test_results.results }}" - -- name: Verify backup servers - hosts: borgbackup_servers - become: true - vars: - goss_version: v0.3.2 - goss_arch: amd64 - goss_dst: /usr/local/bin/goss - goss_sha256sum: 2f6727375db2ea0f81bee36e2c5be78ab5ab8d5981f632f761b25e4003e190ec - goss_url: "https://github.com/aelsabbahy/goss/releases/download/{{ goss_version }}/goss-linux-{{ goss_arch }}" - goss_test_directory: /tmp - goss_format: documentation - molecule_scenario_name: clients - tasks: - - name: Download and install Goss - get_url: - url: "{{ goss_url }}" - dest: "{{ goss_dst }}" - sha256sum: "{{ goss_sha256sum }}" - mode: 0755 - register: download_goss - until: download_goss is succeeded - retries: 3 - - - name: Copy Goss tests to remote - template: - src: "{{ item }}" - dest: "{{ goss_test_directory }}/{{ item | basename }}" - with_fileglob: - - "{{ lookup('env', 'MOLECULE_VERIFIER_TEST_DIRECTORY') }}/test_server*.yml" - - - name: Register test files - shell: "ls {{ goss_test_directory }}/test_server*.yml" - register: test_files - - - name: Execute Goss tests - command: "{{ goss_dst }} -g {{ item }} validate --format {{ goss_format }}" - register: test_results - with_items: "{{ test_files.stdout_lines }}" - - - name: Display details about the Goss results - debug: - msg: "{{ item.stdout_lines }}" - with_items: "{{ test_results.results }}" - - - name: Fail when tests fail - fail: - msg: "Goss failed to validate" - when: item.rc != 0 - with_items: "{{ test_results.results }}" diff --git a/molecule/commands/Dockerfile.j2 b/molecule/commands/Dockerfile.j2 deleted file mode 120000 index 0373a45..0000000 --- a/molecule/commands/Dockerfile.j2 +++ /dev/null @@ -1 +0,0 @@ -../generic_files/Dockerfile.j2 \ No newline at end of file diff --git a/molecule/commands/INSTALL.rst b/molecule/commands/INSTALL.rst deleted file mode 100644 index 3904805..0000000 --- a/molecule/commands/INSTALL.rst +++ /dev/null @@ -1,26 +0,0 @@ -******* -Docker driver installation guide -******* - -Requirements -============ - -* General molecule dependencies (see https://molecule.readthedocs.io/en/latest/installation.html) -* Docker Engine -* docker-py -* docker - -Install -======= - -Ansible < 2.6 - -.. code-block:: bash - - $ sudo pip install docker-py - -Ansible >= 2.6 - -.. code-block:: bash - - $ sudo pip install docker diff --git a/molecule/commands/molecule.yml b/molecule/commands/molecule.yml deleted file mode 100644 index 8adb38e..0000000 --- a/molecule/commands/molecule.yml +++ /dev/null @@ -1,51 +0,0 @@ ---- -driver: - name: docker -lint: - name: yamllint -platforms: - - name: ${MOLECULE_SCENARIO_NAME}-cds - hostname: ${MOLECULE_SCENARIO_NAME}-cds - image: debian:stretch - networks: - - name: ${MOLECULE_SCENARIO_NAME}-borg - - name: ${MOLECULE_SCENARIO_NAME}-sds - hostname: ${MOLECULE_SCENARIO_NAME}-sds - image: debian:stretch - networks: - - name: ${MOLECULE_SCENARIO_NAME}-borg - groups: - - borgbackup_servers -provisioner: - name: ansible - inventory: - group_vars: - all: - borgbackup_appendonly: true - borgbackup_servers: - - fqdn: ${MOLECULE_SCENARIO_NAME}-sds - user: borgds - type: normal - home: /var/backup/ - pool: repos - options: "" - borgbackup_include: - - "/etc" - - "/root" - - "/var/log" - - "/home" - host_vars: - ${MOLECULE_SCENARIO_NAME}-cds: - borgbackup_passphrase: soo6Uabiex - borgbackup_pre_commands: - - "touch /var/log/pre_command" - borgbackup_post_commands: - - "touch /var/log/post_command" - lint: - name: ansible-lint -scenario: - name: commands -verifier: - name: goss - lint: - name: yamllint diff --git a/molecule/commands/playbook.yml b/molecule/commands/playbook.yml deleted file mode 120000 index ace0a3d..0000000 --- a/molecule/commands/playbook.yml +++ /dev/null @@ -1 +0,0 @@ -../generic_files/playbook.yml \ No newline at end of file diff --git a/molecule/commands/prepare.yml b/molecule/commands/prepare.yml deleted file mode 120000 index 28e9479..0000000 --- a/molecule/commands/prepare.yml +++ /dev/null @@ -1 +0,0 @@ -../generic_files/prepare.yml \ No newline at end of file diff --git a/molecule/commands/restore.sh.j2 b/molecule/commands/restore.sh.j2 deleted file mode 120000 index 07356a7..0000000 --- a/molecule/commands/restore.sh.j2 +++ /dev/null @@ -1 +0,0 @@ -../generic_files/restore.sh.j2 \ No newline at end of file diff --git a/molecule/commands/side_effect.yml b/molecule/commands/side_effect.yml deleted file mode 120000 index 9bfbda0..0000000 --- a/molecule/commands/side_effect.yml +++ /dev/null @@ -1 +0,0 @@ -../generic_files/side_effect.yml \ No newline at end of file diff --git a/molecule/commands/tests/test_all.yml b/molecule/commands/tests/test_all.yml deleted file mode 120000 index 50b87ac..0000000 --- a/molecule/commands/tests/test_all.yml +++ /dev/null @@ -1 +0,0 @@ -../../generic_files/tests/test_all.yml \ No newline at end of file diff --git a/molecule/commands/tests/test_client.yml b/molecule/commands/tests/test_client.yml deleted file mode 120000 index 865fba3..0000000 --- a/molecule/commands/tests/test_client.yml +++ /dev/null @@ -1 +0,0 @@ -../../generic_files/tests/test_client.yml \ No newline at end of file diff --git a/molecule/commands/tests/test_client_commands.yml b/molecule/commands/tests/test_client_commands.yml deleted file mode 100644 index 5667f74..0000000 --- a/molecule/commands/tests/test_client_commands.yml +++ /dev/null @@ -1,19 +0,0 @@ -# Molecule managed - ---- -file: - /var/log/post_command: - exists: true - owner: root - group: root - /var/log/pre_command: - exists: true - owner: root - group: root - /usr/local/bin/borg-backup: - exists: true - owner: root - group: root - contains: - - "/var/log/post_command" - - "/var/log/pre_command" diff --git a/molecule/commands/tests/test_client_restore.yml b/molecule/commands/tests/test_client_restore.yml deleted file mode 120000 index 01a0351..0000000 --- a/molecule/commands/tests/test_client_restore.yml +++ /dev/null @@ -1 +0,0 @@ -../../generic_files/tests/test_client_restore.yml \ No newline at end of file diff --git a/molecule/commands/tests/test_server.yml b/molecule/commands/tests/test_server.yml deleted file mode 120000 index 1c4e7c6..0000000 --- a/molecule/commands/tests/test_server.yml +++ /dev/null @@ -1 +0,0 @@ -../../generic_files/tests/test_server.yml \ No newline at end of file diff --git a/molecule/commands/verify.yml b/molecule/commands/verify.yml deleted file mode 100644 index 393cd1c..0000000 --- a/molecule/commands/verify.yml +++ /dev/null @@ -1,151 +0,0 @@ ---- -# This is an example playbook to execute goss tests. -# Tests need distributed to the appropriate ansible host/groups -# prior to execution by `goss validate`. - -- name: Verify all - hosts: all - become: true - vars: - goss_version: v0.3.2 - goss_arch: amd64 - goss_dst: /usr/local/bin/goss - goss_sha256sum: 2f6727375db2ea0f81bee36e2c5be78ab5ab8d5981f632f761b25e4003e190ec - goss_url: "https://github.com/aelsabbahy/goss/releases/download/{{ goss_version }}/goss-linux-{{ goss_arch }}" - goss_test_directory: /tmp - goss_format: documentation - tasks: - - name: Download and install Goss - get_url: - url: "{{ goss_url }}" - dest: "{{ goss_dst }}" - sha256sum: "{{ goss_sha256sum }}" - mode: 0755 - register: download_goss - until: download_goss is succeeded - retries: 3 - - - name: Copy Goss tests to remote - template: - src: "{{ item }}" - dest: "{{ goss_test_directory }}/{{ item | basename }}" - with_fileglob: - - "{{ lookup('env', 'MOLECULE_VERIFIER_TEST_DIRECTORY') }}/test_all.yml" - - - name: Register test files - shell: "ls {{ goss_test_directory }}/test_all.yml" - register: test_files - - - name: Execute Goss tests - command: "{{ goss_dst }} -g {{ item }} validate --format {{ goss_format }}" - register: test_results - with_items: "{{ test_files.stdout_lines }}" - - - name: Display details about the Goss results - debug: - msg: "{{ item.stdout_lines }}" - with_items: "{{ test_results.results }}" - - - name: Fail when tests fail - fail: - msg: "Goss failed to validate" - when: item.rc != 0 - with_items: "{{ test_results.results }}" - -- name: Verify clients - hosts: all:!borgbackup_servers - become: true - vars: - goss_version: v0.3.2 - goss_arch: amd64 - goss_dst: /usr/local/bin/goss - goss_sha256sum: 2f6727375db2ea0f81bee36e2c5be78ab5ab8d5981f632f761b25e4003e190ec - goss_url: "https://github.com/aelsabbahy/goss/releases/download/{{ goss_version }}/goss-linux-{{ goss_arch }}" - goss_test_directory: /tmp - goss_format: documentation - tasks: - - name: Download and install Goss - get_url: - url: "{{ goss_url }}" - dest: "{{ goss_dst }}" - sha256sum: "{{ goss_sha256sum }}" - mode: 0755 - register: download_goss - until: download_goss is succeeded - retries: 3 - - - name: Copy Goss tests to remote - template: - src: "{{ item }}" - dest: "{{ goss_test_directory }}/{{ item | basename }}" - with_fileglob: - - "{{ lookup('env', 'MOLECULE_VERIFIER_TEST_DIRECTORY') }}/test_client*.yml" - - - name: Register test files - shell: "ls {{ goss_test_directory }}/test_client*.yml" - register: test_files - - - name: Execute Goss tests - command: "{{ goss_dst }} -g {{ item }} validate --format {{ goss_format }}" - register: test_results - with_items: "{{ test_files.stdout_lines }}" - - - name: Display details about the Goss results - debug: - msg: "{{ item.stdout_lines }}" - with_items: "{{ test_results.results }}" - - - name: Fail when tests fail - fail: - msg: "Goss failed to validate" - when: item.rc != 0 - with_items: "{{ test_results.results }}" - -- name: Verify backup servers - hosts: borgbackup_servers - become: true - vars: - goss_version: v0.3.2 - goss_arch: amd64 - goss_dst: /usr/local/bin/goss - goss_sha256sum: 2f6727375db2ea0f81bee36e2c5be78ab5ab8d5981f632f761b25e4003e190ec - goss_url: "https://github.com/aelsabbahy/goss/releases/download/{{ goss_version }}/goss-linux-{{ goss_arch }}" - goss_test_directory: /tmp - goss_format: documentation - tasks: - - name: Download and install Goss - get_url: - url: "{{ goss_url }}" - dest: "{{ goss_dst }}" - sha256sum: "{{ goss_sha256sum }}" - mode: 0755 - register: download_goss - until: download_goss is succeeded - retries: 3 - - - name: Copy Goss tests to remote - template: - src: "{{ item }}" - dest: "{{ goss_test_directory }}/{{ item | basename }}" - with_fileglob: - - "{{ lookup('env', 'MOLECULE_VERIFIER_TEST_DIRECTORY') }}/test_server*.yml" - - - name: Register test files - shell: "ls {{ goss_test_directory }}/test_server*.yml" - register: test_files - - - name: Execute Goss tests - command: "{{ goss_dst }} -g {{ item }} validate --format {{ goss_format }}" - register: test_results - with_items: "{{ test_files.stdout_lines }}" - - - name: Display details about the Goss results - debug: - msg: "{{ item.stdout_lines }}" - with_items: "{{ test_results.results }}" - - - name: Fail when tests fail - fail: - msg: "Goss failed to validate" - when: item.rc != 0 - with_items: "{{ test_results.results }}" diff --git a/molecule/folders/molecule.yml b/molecule/folders/molecule.yml index 0f6369c..2ed5726 100644 --- a/molecule/folders/molecule.yml +++ b/molecule/folders/molecule.yml @@ -9,6 +9,8 @@ platforms: image: debian:stretch networks: - name: ${MOLECULE_SCENARIO_NAME}-borg + groups: + - folders - name: ${MOLECULE_SCENARIO_NAME}-sds hostname: ${MOLECULE_SCENARIO_NAME}-sds image: debian:stretch @@ -45,6 +47,6 @@ provisioner: scenario: name: folders verifier: - name: goss + name: testinfra lint: - name: yamllint + name: flake8 diff --git a/molecule/folders/tests b/molecule/folders/tests new file mode 120000 index 0000000..630b75e --- /dev/null +++ b/molecule/folders/tests @@ -0,0 +1 @@ +../generic_files/tests \ No newline at end of file diff --git a/molecule/folders/tests/test_all.yml b/molecule/folders/tests/test_all.yml deleted file mode 120000 index 50b87ac..0000000 --- a/molecule/folders/tests/test_all.yml +++ /dev/null @@ -1 +0,0 @@ -../../generic_files/tests/test_all.yml \ No newline at end of file diff --git a/molecule/folders/tests/test_client.yml b/molecule/folders/tests/test_client.yml deleted file mode 120000 index 865fba3..0000000 --- a/molecule/folders/tests/test_client.yml +++ /dev/null @@ -1 +0,0 @@ -../../generic_files/tests/test_client.yml \ No newline at end of file diff --git a/molecule/folders/tests/test_client_folders.yml b/molecule/folders/tests/test_client_folders.yml deleted file mode 100644 index 4978699..0000000 --- a/molecule/folders/tests/test_client_folders.yml +++ /dev/null @@ -1,11 +0,0 @@ -# Molecule managed - ---- -file: - /usr/local/bin/borg-backup: - exists: true - owner: root - group: root - contains: - - "/var/cache" - - "--exclude '/var/cache/apt'" diff --git a/molecule/folders/tests/test_client_restore.yml b/molecule/folders/tests/test_client_restore.yml deleted file mode 120000 index 01a0351..0000000 --- a/molecule/folders/tests/test_client_restore.yml +++ /dev/null @@ -1 +0,0 @@ -../../generic_files/tests/test_client_restore.yml \ No newline at end of file diff --git a/molecule/folders/tests/test_server.yml b/molecule/folders/tests/test_server.yml deleted file mode 120000 index 1c4e7c6..0000000 --- a/molecule/folders/tests/test_server.yml +++ /dev/null @@ -1 +0,0 @@ -../../generic_files/tests/test_server.yml \ No newline at end of file diff --git a/molecule/folders/verify.yml b/molecule/folders/verify.yml deleted file mode 100644 index 393cd1c..0000000 --- a/molecule/folders/verify.yml +++ /dev/null @@ -1,151 +0,0 @@ ---- -# This is an example playbook to execute goss tests. -# Tests need distributed to the appropriate ansible host/groups -# prior to execution by `goss validate`. - -- name: Verify all - hosts: all - become: true - vars: - goss_version: v0.3.2 - goss_arch: amd64 - goss_dst: /usr/local/bin/goss - goss_sha256sum: 2f6727375db2ea0f81bee36e2c5be78ab5ab8d5981f632f761b25e4003e190ec - goss_url: "https://github.com/aelsabbahy/goss/releases/download/{{ goss_version }}/goss-linux-{{ goss_arch }}" - goss_test_directory: /tmp - goss_format: documentation - tasks: - - name: Download and install Goss - get_url: - url: "{{ goss_url }}" - dest: "{{ goss_dst }}" - sha256sum: "{{ goss_sha256sum }}" - mode: 0755 - register: download_goss - until: download_goss is succeeded - retries: 3 - - - name: Copy Goss tests to remote - template: - src: "{{ item }}" - dest: "{{ goss_test_directory }}/{{ item | basename }}" - with_fileglob: - - "{{ lookup('env', 'MOLECULE_VERIFIER_TEST_DIRECTORY') }}/test_all.yml" - - - name: Register test files - shell: "ls {{ goss_test_directory }}/test_all.yml" - register: test_files - - - name: Execute Goss tests - command: "{{ goss_dst }} -g {{ item }} validate --format {{ goss_format }}" - register: test_results - with_items: "{{ test_files.stdout_lines }}" - - - name: Display details about the Goss results - debug: - msg: "{{ item.stdout_lines }}" - with_items: "{{ test_results.results }}" - - - name: Fail when tests fail - fail: - msg: "Goss failed to validate" - when: item.rc != 0 - with_items: "{{ test_results.results }}" - -- name: Verify clients - hosts: all:!borgbackup_servers - become: true - vars: - goss_version: v0.3.2 - goss_arch: amd64 - goss_dst: /usr/local/bin/goss - goss_sha256sum: 2f6727375db2ea0f81bee36e2c5be78ab5ab8d5981f632f761b25e4003e190ec - goss_url: "https://github.com/aelsabbahy/goss/releases/download/{{ goss_version }}/goss-linux-{{ goss_arch }}" - goss_test_directory: /tmp - goss_format: documentation - tasks: - - name: Download and install Goss - get_url: - url: "{{ goss_url }}" - dest: "{{ goss_dst }}" - sha256sum: "{{ goss_sha256sum }}" - mode: 0755 - register: download_goss - until: download_goss is succeeded - retries: 3 - - - name: Copy Goss tests to remote - template: - src: "{{ item }}" - dest: "{{ goss_test_directory }}/{{ item | basename }}" - with_fileglob: - - "{{ lookup('env', 'MOLECULE_VERIFIER_TEST_DIRECTORY') }}/test_client*.yml" - - - name: Register test files - shell: "ls {{ goss_test_directory }}/test_client*.yml" - register: test_files - - - name: Execute Goss tests - command: "{{ goss_dst }} -g {{ item }} validate --format {{ goss_format }}" - register: test_results - with_items: "{{ test_files.stdout_lines }}" - - - name: Display details about the Goss results - debug: - msg: "{{ item.stdout_lines }}" - with_items: "{{ test_results.results }}" - - - name: Fail when tests fail - fail: - msg: "Goss failed to validate" - when: item.rc != 0 - with_items: "{{ test_results.results }}" - -- name: Verify backup servers - hosts: borgbackup_servers - become: true - vars: - goss_version: v0.3.2 - goss_arch: amd64 - goss_dst: /usr/local/bin/goss - goss_sha256sum: 2f6727375db2ea0f81bee36e2c5be78ab5ab8d5981f632f761b25e4003e190ec - goss_url: "https://github.com/aelsabbahy/goss/releases/download/{{ goss_version }}/goss-linux-{{ goss_arch }}" - goss_test_directory: /tmp - goss_format: documentation - tasks: - - name: Download and install Goss - get_url: - url: "{{ goss_url }}" - dest: "{{ goss_dst }}" - sha256sum: "{{ goss_sha256sum }}" - mode: 0755 - register: download_goss - until: download_goss is succeeded - retries: 3 - - - name: Copy Goss tests to remote - template: - src: "{{ item }}" - dest: "{{ goss_test_directory }}/{{ item | basename }}" - with_fileglob: - - "{{ lookup('env', 'MOLECULE_VERIFIER_TEST_DIRECTORY') }}/test_server*.yml" - - - name: Register test files - shell: "ls {{ goss_test_directory }}/test_server*.yml" - register: test_files - - - name: Execute Goss tests - command: "{{ goss_dst }} -g {{ item }} validate --format {{ goss_format }}" - register: test_results - with_items: "{{ test_files.stdout_lines }}" - - - name: Display details about the Goss results - debug: - msg: "{{ item.stdout_lines }}" - with_items: "{{ test_results.results }}" - - - name: Fail when tests fail - fail: - msg: "Goss failed to validate" - when: item.rc != 0 - with_items: "{{ test_results.results }}" diff --git a/molecule/generic_files/tests/.flake8 b/molecule/generic_files/tests/.flake8 new file mode 100644 index 0000000..e44b810 --- /dev/null +++ b/molecule/generic_files/tests/.flake8 @@ -0,0 +1,2 @@ +[flake8] +ignore = E501 diff --git a/molecule/generic_files/tests/test_all.py b/molecule/generic_files/tests/test_all.py new file mode 100644 index 0000000..a3a2c9b --- /dev/null +++ b/molecule/generic_files/tests/test_all.py @@ -0,0 +1,6 @@ +def test_borg_binary(host): + borg = host.file("/usr/local/bin/borg") + assert borg.exists + assert borg.user == "root" + assert borg.group == "root" + assert borg.mode == 0o755 diff --git a/molecule/generic_files/tests/test_all.yml b/molecule/generic_files/tests/test_all.yml deleted file mode 100644 index 6b73f0c..0000000 --- a/molecule/generic_files/tests/test_all.yml +++ /dev/null @@ -1,9 +0,0 @@ -# Molecule managed - ---- -file: - /usr/local/bin/borg: - exists: true - owner: root - group: root - mode: "0755" diff --git a/molecule/generic_files/tests/test_client.py b/molecule/generic_files/tests/test_client.py new file mode 100644 index 0000000..8835fa6 --- /dev/null +++ b/molecule/generic_files/tests/test_client.py @@ -0,0 +1,45 @@ +import os +import pytest +import re +from testinfra.utils.ansible_runner import AnsibleRunner + +testinfra_hosts = ["ansible://all:!borgbackup_servers"] + + +def test_log(host): + logfile = host.file("/var/log/borg-backup.log") + assert logfile.contains("Backup succeeded") + assert logfile.user == "root" + assert logfile.group == "root" + + +# to do read inventory variable : export BORG_PASSPHRASE="{{ borgbackup_passphrase }}" +def test_passphrase(host): + pfile = host.file("/root/.borg.passphrase") + assert pfile.contains("BORG_PASSPHRASE=") + assert pfile.user == "root" + assert pfile.group == "root" + + +@pytest.mark.parametrize('server', AnsibleRunner(os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('borgbackup_servers')) +def test_sshconfig(host, server): + sshconf = host.file("/root/.ssh/config") + assert sshconf.contains(" ANSIBLE MANAGED BLOCK %s " % server) + assert sshconf.contains("Host %s" % server) + assert sshconf.user == "root" + assert sshconf.group == "root" + + +def test_scriptfile(host): + script = host.file("/usr/local/bin/borg-backup") + assert script.user == "root" + assert script.group == "root" + assert script.mode == 0o744 + + +@pytest.mark.parametrize('server', AnsibleRunner(os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('borgbackup_servers')) +def test_list_backups(host, server): + command = host.run("bash /usr/local/bin/borg-backup list") + assert command.rc == 0 + assert command.stderr == '' + assert re.match("Archives on %s :\n[0-9]{8}-[0-9]{4}.*" % server, command.stdout) is not None diff --git a/molecule/generic_files/tests/test_client.yml b/molecule/generic_files/tests/test_client.yml deleted file mode 100644 index 1d9bf31..0000000 --- a/molecule/generic_files/tests/test_client.yml +++ /dev/null @@ -1,38 +0,0 @@ -# Molecule managed - ---- -file: - /var/log/borg-backup.log: - exists: true - owner: root - group: root - contains: - - "Backup succeeded" - /root/.borg.passphrase: - exists: true - owner: root - group: root - contains: - - 'export BORG_PASSPHRASE="{{ borgbackup_passphrase }}"' - /root/.ssh/config: - exists: true - owner: root - group: root - contains: -{% for item in borgbackup_servers %} - - 'ANSIBLE MANAGED BLOCK {{ item.fqdn }}' -{% endfor %} - /usr/local/bin/borg-backup: - exists: true - owner: root - group: root - mode: "0744" - -command: - bash /usr/local/bin/borg-backup list: - exit-status: 0 - stdout: -{% for item in borgbackup_servers %} - - "Archives on {{ item.fqdn }}" -{% endfor %} - - "/[[:digit:]]{8}-[[:digit:]]{4}.*/" diff --git a/molecule/generic_files/tests/test_client_folders.py b/molecule/generic_files/tests/test_client_folders.py new file mode 100644 index 0000000..c1c692f --- /dev/null +++ b/molecule/generic_files/tests/test_client_folders.py @@ -0,0 +1,9 @@ +testinfra_hosts = ["ansible://folders"] + + +def test_include_exclude(host): + script = host.file("/usr/local/bin/borg-backup") + assert script.contains("/var/cache") + assert script.contains("--exclude '/var/cache/apt'") + assert script.user == "root" + assert script.group == "root" diff --git a/molecule/generic_files/tests/test_client_restore.py b/molecule/generic_files/tests/test_client_restore.py new file mode 100644 index 0000000..6e95090 --- /dev/null +++ b/molecule/generic_files/tests/test_client_restore.py @@ -0,0 +1,24 @@ +import os +import pytest +from testinfra.utils.ansible_runner import AnsibleRunner + +testinfra_hosts = ["ansible://all:!borgbackup_servers"] + + +def test_client_sample_file(host): + sample = host.file("/root/sample.txt") + assert sample.is_file + + +@pytest.mark.parametrize('server', AnsibleRunner(os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('borgbackup_servers')) +def test_client_dir(host, server): + command = host.run("diff -s /root/sample.txt /root/restore/%s/root/sample.txt" % server) + assert command.rc == 0 + assert "Files /root/sample.txt and /root/restore/%s/root/sample.txt are identical" % server in command.stdout + + +@pytest.mark.parametrize('server', AnsibleRunner(os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('borgbackup_servers')) +def test_client_verify(host, server): + vcommand = host.run("/root/restore.sh verify") + assert vcommand.rc == 0 + assert vcommand.stdout.rstrip("verifying on %s" % server) diff --git a/molecule/generic_files/tests/test_client_restore.yml b/molecule/generic_files/tests/test_client_restore.yml deleted file mode 100644 index 746c0b0..0000000 --- a/molecule/generic_files/tests/test_client_restore.yml +++ /dev/null @@ -1,18 +0,0 @@ ---- -file: - /root/sample.txt: - exists: true - -command: -{% for item in borgbackup_servers %} - diff -s /root/sample.txt /root/restore/{{ item.fqdn }}/root/sample.txt: - exit-status: 0 - stdout: - - "Files /root/sample.txt and /root/restore/{{ item.fqdn }}/root/sample.txt are identical" -{% endfor %} - /root/restore.sh verify: - exit-status: 0 - stdout: -{% for item in borgbackup_servers %} - - "verifying on {{ item.fqdn }}" -{% endfor %} diff --git a/molecule/generic_files/tests/test_lamp.py b/molecule/generic_files/tests/test_lamp.py new file mode 100644 index 0000000..20a9423 --- /dev/null +++ b/molecule/generic_files/tests/test_lamp.py @@ -0,0 +1,16 @@ +testinfra_hosts = ["ansible://lamp"] + + +def test_lamp_default(host): + script = host.file("/usr/local/bin/borg-backup") + assert script.contains("/usr/sbin/automysqlbackup") + assert script.contains("/var/lib/automysqlbackup") + assert script.contains("/var/www") + assert script.user == "root" + assert script.group == "root" + + +def test_lamp_automysqlbackup(host): + backup_dir = host.file("/var/lib/automysqlbackup/daily") + assert backup_dir.exists + assert backup_dir.is_directory diff --git a/molecule/generic_files/tests/test_mgt.py b/molecule/generic_files/tests/test_mgt.py new file mode 100644 index 0000000..b9d9189 --- /dev/null +++ b/molecule/generic_files/tests/test_mgt.py @@ -0,0 +1,18 @@ +import os +import pytest +from testinfra.utils.ansible_runner import AnsibleRunner + +testinfra_hosts = ["ansible://borgbackup_management"] + + +# to do read inventory variable : export BORG_PASSPHRASE="{{ borgbackup_passphrase }}" +@pytest.mark.parametrize('client', AnsibleRunner(os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all:!borgbackup_management:!borgbackup_servers')) +def test_prune_script(host, client): + prune = host.file("/root/prune.sh") + assert prune.user == "root" + assert prune.group == "root" + assert prune.mode == 0o700 + assert prune.contains("/usr/local/bin/borg prune") + assert prune.contains("export BORG_PASSPHRASE=") + assert prune.contains("Host: %s" % client) + assert prune.contains(":/var/backup/repos/%s" % client) diff --git a/molecule/generic_files/tests/test_server.py b/molecule/generic_files/tests/test_server.py new file mode 100644 index 0000000..f1e4f9b --- /dev/null +++ b/molecule/generic_files/tests/test_server.py @@ -0,0 +1,23 @@ +import os +import pytest +from testinfra.utils.ansible_runner import AnsibleRunner + +testinfra_hosts = ["ansible://borgbackup_servers"] + + +def test_client_parent_dir(host): + parentdir = host.file("/var/backup/repos") + assert parentdir.is_directory + + +@pytest.mark.parametrize('client', AnsibleRunner(os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all:!borgbackup_servers')) +def test_client_dir(host, client): + clientdir = host.file("/var/backup/repos/%s" % client) + assert clientdir.is_directory + + +@pytest.mark.parametrize('client', AnsibleRunner(os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all:!borgbackup_servers')) +def test_ssh_client_conf(host, client): + sshconf = host.file("/var/backup/.ssh/authorized_keys") + assert sshconf.is_file + assert sshconf.contains("%s;borg serve" % client) diff --git a/molecule/generic_files/tests/test_server.yml b/molecule/generic_files/tests/test_server.yml deleted file mode 100644 index 31856d4..0000000 --- a/molecule/generic_files/tests/test_server.yml +++ /dev/null @@ -1,28 +0,0 @@ -# Molecule managed - ---- -file: -{% for item in borgbackup_servers %} -{% if item.fqdn == inventory_hostname %} - {{ item.home }}: - exists: true - owner: "{{ item.user }}" - group: "{{ item.user }}" -{% for host in groups.all|difference(groups.borgbackup_servers) %} - {{ item.home }}/repos/{{ host }}: - exists: true -{% endfor %} -{% endif %} -{% endfor %} -{% for item in borgbackup_servers %} -{% if item.fqdn == inventory_hostname %} - {{ item.home }}/.ssh/authorized_keys: - exists: true - owner: "{{ item.user }}" - group: "{{ item.user }}" - contains: -{% for host in groups.all|difference(groups.borgbackup_servers) %} - - "{{ host }};borg serve" -{% endfor %} -{% endif %} -{% endfor %} diff --git a/molecule/lamp/molecule.yml b/molecule/lamp/molecule.yml index 534ebc0..c854dee 100644 --- a/molecule/lamp/molecule.yml +++ b/molecule/lamp/molecule.yml @@ -39,6 +39,6 @@ provisioner: scenario: name: lamp verifier: - name: goss + name: testinfra lint: - name: yamllint + name: flake8 diff --git a/molecule/lamp/tests b/molecule/lamp/tests new file mode 120000 index 0000000..630b75e --- /dev/null +++ b/molecule/lamp/tests @@ -0,0 +1 @@ +../generic_files/tests \ No newline at end of file diff --git a/molecule/lamp/tests/test_all.yml b/molecule/lamp/tests/test_all.yml deleted file mode 120000 index 50b87ac..0000000 --- a/molecule/lamp/tests/test_all.yml +++ /dev/null @@ -1 +0,0 @@ -../../generic_files/tests/test_all.yml \ No newline at end of file diff --git a/molecule/lamp/tests/test_client.yml b/molecule/lamp/tests/test_client.yml deleted file mode 120000 index 865fba3..0000000 --- a/molecule/lamp/tests/test_client.yml +++ /dev/null @@ -1 +0,0 @@ -../../generic_files/tests/test_client.yml \ No newline at end of file diff --git a/molecule/lamp/tests/test_client_restore.yml b/molecule/lamp/tests/test_client_restore.yml deleted file mode 120000 index 01a0351..0000000 --- a/molecule/lamp/tests/test_client_restore.yml +++ /dev/null @@ -1 +0,0 @@ -../../generic_files/tests/test_client_restore.yml \ No newline at end of file diff --git a/molecule/lamp/tests/test_lamp.yml b/molecule/lamp/tests/test_lamp.yml deleted file mode 100644 index 01fbf62..0000000 --- a/molecule/lamp/tests/test_lamp.yml +++ /dev/null @@ -1,17 +0,0 @@ -# Molecule managed - ---- -file: - /etc/hosts: - exists: true - owner: root - group: root - /usr/local/bin/borg-backup: - exists: true - owner: root - group: root - contains: - - "automysqlbackup" - - "/var/www" - /var/lib/automysqlbackup/daily: - exists: true diff --git a/molecule/lamp/tests/test_server.yml b/molecule/lamp/tests/test_server.yml deleted file mode 120000 index 1c4e7c6..0000000 --- a/molecule/lamp/tests/test_server.yml +++ /dev/null @@ -1 +0,0 @@ -../../generic_files/tests/test_server.yml \ No newline at end of file diff --git a/molecule/lamp/verify.yml b/molecule/lamp/verify.yml deleted file mode 100644 index 5342bc0..0000000 --- a/molecule/lamp/verify.yml +++ /dev/null @@ -1,200 +0,0 @@ ---- -# This is an example playbook to execute goss tests. -# Tests need distributed to the appropriate ansible host/groups -# prior to execution by `goss validate`. - -- name: Verify all - hosts: all - become: true - vars: - goss_version: v0.3.2 - goss_arch: amd64 - goss_dst: /usr/local/bin/goss - goss_sha256sum: 2f6727375db2ea0f81bee36e2c5be78ab5ab8d5981f632f761b25e4003e190ec - goss_url: "https://github.com/aelsabbahy/goss/releases/download/{{ goss_version }}/goss-linux-{{ goss_arch }}" - goss_test_directory: /tmp - goss_format: documentation - tasks: - - name: Download and install Goss - get_url: - url: "{{ goss_url }}" - dest: "{{ goss_dst }}" - sha256sum: "{{ goss_sha256sum }}" - mode: 0755 - register: download_goss - until: download_goss is succeeded - retries: 3 - - - name: Copy Goss tests to remote - template: - src: "{{ item }}" - dest: "{{ goss_test_directory }}/{{ item | basename }}" - with_fileglob: - - "{{ lookup('env', 'MOLECULE_VERIFIER_TEST_DIRECTORY') }}/test_all.yml" - - - name: Register test files - shell: "ls {{ goss_test_directory }}/test_all.yml" - register: test_files - - - name: Execute Goss tests - command: "{{ goss_dst }} -g {{ item }} validate --format {{ goss_format }}" - register: test_results - with_items: "{{ test_files.stdout_lines }}" - - - name: Display details about the Goss results - debug: - msg: "{{ item.stdout_lines }}" - with_items: "{{ test_results.results }}" - - - name: Fail when tests fail - fail: - msg: "Goss failed to validate" - when: item.rc != 0 - with_items: "{{ test_results.results }}" - -- name: Verify clients - hosts: all:!borgbackup_servers - become: true - vars: - goss_version: v0.3.2 - goss_arch: amd64 - goss_dst: /usr/local/bin/goss - goss_sha256sum: 2f6727375db2ea0f81bee36e2c5be78ab5ab8d5981f632f761b25e4003e190ec - goss_url: "https://github.com/aelsabbahy/goss/releases/download/{{ goss_version }}/goss-linux-{{ goss_arch }}" - goss_test_directory: /tmp - goss_format: documentation - tasks: - - name: Download and install Goss - get_url: - url: "{{ goss_url }}" - dest: "{{ goss_dst }}" - sha256sum: "{{ goss_sha256sum }}" - mode: 0755 - register: download_goss - until: download_goss is succeeded - retries: 3 - - - name: Copy Goss tests to remote - template: - src: "{{ item }}" - dest: "{{ goss_test_directory }}/{{ item | basename }}" - with_fileglob: - - "{{ lookup('env', 'MOLECULE_VERIFIER_TEST_DIRECTORY') }}/test_client*.yml" - - - name: Register test files - shell: "ls {{ goss_test_directory }}/test_client*.yml" - register: test_files - - - name: Execute Goss tests - command: "{{ goss_dst }} -g {{ item }} validate --format {{ goss_format }}" - register: test_results - with_items: "{{ test_files.stdout_lines }}" - - - name: Display details about the Goss results - debug: - msg: "{{ item.stdout_lines }}" - with_items: "{{ test_results.results }}" - - - name: Fail when tests fail - fail: - msg: "Goss failed to validate" - when: item.rc != 0 - with_items: "{{ test_results.results }}" - -- name: Verify lamp clients - hosts: lamp - become: true - vars: - goss_version: v0.3.2 - goss_arch: amd64 - goss_dst: /usr/local/bin/goss - goss_sha256sum: 2f6727375db2ea0f81bee36e2c5be78ab5ab8d5981f632f761b25e4003e190ec - goss_url: "https://github.com/aelsabbahy/goss/releases/download/{{ goss_version }}/goss-linux-{{ goss_arch }}" - goss_test_directory: /tmp - goss_format: documentation - tasks: - - name: Download and install Goss - get_url: - url: "{{ goss_url }}" - dest: "{{ goss_dst }}" - sha256sum: "{{ goss_sha256sum }}" - mode: 0755 - register: download_goss - until: download_goss is succeeded - retries: 3 - - - name: Copy Goss tests to remote - template: - src: "{{ item }}" - dest: "{{ goss_test_directory }}/{{ item | basename }}" - with_fileglob: - - "{{ lookup('env', 'MOLECULE_VERIFIER_TEST_DIRECTORY') }}/test_lamp*.yml" - - - name: Register test files - shell: "ls {{ goss_test_directory }}/test_lamp*.yml" - register: test_files - - - name: Execute Goss tests - command: "{{ goss_dst }} -g {{ item }} validate --format {{ goss_format }}" - register: test_results - with_items: "{{ test_files.stdout_lines }}" - - - name: Display details about the Goss results - debug: - msg: "{{ item.stdout_lines }}" - with_items: "{{ test_results.results }}" - - - name: Fail when tests fail - fail: - msg: "Goss failed to validate" - when: item.rc != 0 - with_items: "{{ test_results.results }}" - -- name: Verify backup servers - hosts: borgbackup_servers - become: true - vars: - goss_version: v0.3.2 - goss_arch: amd64 - goss_dst: /usr/local/bin/goss - goss_sha256sum: 2f6727375db2ea0f81bee36e2c5be78ab5ab8d5981f632f761b25e4003e190ec - goss_url: "https://github.com/aelsabbahy/goss/releases/download/{{ goss_version }}/goss-linux-{{ goss_arch }}" - goss_test_directory: /tmp - goss_format: documentation - tasks: - - name: Download and install Goss - get_url: - url: "{{ goss_url }}" - dest: "{{ goss_dst }}" - sha256sum: "{{ goss_sha256sum }}" - mode: 0755 - register: download_goss - until: download_goss is succeeded - retries: 3 - - - name: Copy Goss tests to remote - template: - src: "{{ item }}" - dest: "{{ goss_test_directory }}/{{ item | basename }}" - with_fileglob: - - "{{ lookup('env', 'MOLECULE_VERIFIER_TEST_DIRECTORY') }}/test_server*.yml" - - - name: Register test files - shell: "ls {{ goss_test_directory }}/test_server*.yml" - register: test_files - - - name: Execute Goss tests - command: "{{ goss_dst }} -g {{ item }} validate --format {{ goss_format }}" - register: test_results - with_items: "{{ test_files.stdout_lines }}" - - - name: Display details about the Goss results - debug: - msg: "{{ item.stdout_lines }}" - with_items: "{{ test_results.results }}" - - - name: Fail when tests fail - fail: - msg: "Goss failed to validate" - when: item.rc != 0 - with_items: "{{ test_results.results }}" diff --git a/molecule/mgt/molecule.yml b/molecule/mgt/molecule.yml index bad6774..d0d656e 100644 --- a/molecule/mgt/molecule.yml +++ b/molecule/mgt/molecule.yml @@ -71,6 +71,6 @@ provisioner: scenario: name: mgt verifier: - name: goss + name: testinfra lint: - name: yamllint + name: flake8 diff --git a/molecule/mgt/tests b/molecule/mgt/tests new file mode 120000 index 0000000..630b75e --- /dev/null +++ b/molecule/mgt/tests @@ -0,0 +1 @@ +../generic_files/tests \ No newline at end of file diff --git a/molecule/mgt/tests/test_all.yml b/molecule/mgt/tests/test_all.yml deleted file mode 120000 index 50b87ac..0000000 --- a/molecule/mgt/tests/test_all.yml +++ /dev/null @@ -1 +0,0 @@ -../../generic_files/tests/test_all.yml \ No newline at end of file diff --git a/molecule/mgt/tests/test_client.yml b/molecule/mgt/tests/test_client.yml deleted file mode 120000 index 865fba3..0000000 --- a/molecule/mgt/tests/test_client.yml +++ /dev/null @@ -1 +0,0 @@ -../../generic_files/tests/test_client.yml \ No newline at end of file diff --git a/molecule/mgt/tests/test_client_restore.yml b/molecule/mgt/tests/test_client_restore.yml deleted file mode 120000 index 01a0351..0000000 --- a/molecule/mgt/tests/test_client_restore.yml +++ /dev/null @@ -1 +0,0 @@ -../../generic_files/tests/test_client_restore.yml \ No newline at end of file diff --git a/molecule/mgt/tests/test_mgt.yml b/molecule/mgt/tests/test_mgt.yml deleted file mode 100644 index ce09c27..0000000 --- a/molecule/mgt/tests/test_mgt.yml +++ /dev/null @@ -1,16 +0,0 @@ -# Molecule managed - ---- -file: - /root/prune.sh: - exists: true - owner: root - group: root - mode: "0700" - contains: -{% for host in groups.all|difference(groups.borgbackup_servers) %} - - "Host: {{ host }}" - - "export BORG_PASSPHRASE={{ borgbackup_passphrase }}" - - ":/var/backup/repos/{{ host }}" -{% endfor %} - - "/usr/local/bin/borg prune" diff --git a/molecule/mgt/tests/test_server.yml b/molecule/mgt/tests/test_server.yml deleted file mode 120000 index 1c4e7c6..0000000 --- a/molecule/mgt/tests/test_server.yml +++ /dev/null @@ -1 +0,0 @@ -../../generic_files/tests/test_server.yml \ No newline at end of file diff --git a/molecule/mgt/verify.yml b/molecule/mgt/verify.yml deleted file mode 100644 index 7ebf8a2..0000000 --- a/molecule/mgt/verify.yml +++ /dev/null @@ -1,200 +0,0 @@ ---- -# This is an example playbook to execute goss tests. -# Tests need distributed to the appropriate ansible host/groups -# prior to execution by `goss validate`. - -- name: Verify all - hosts: all - become: true - vars: - goss_version: v0.3.2 - goss_arch: amd64 - goss_dst: /usr/local/bin/goss - goss_sha256sum: 2f6727375db2ea0f81bee36e2c5be78ab5ab8d5981f632f761b25e4003e190ec - goss_url: "https://github.com/aelsabbahy/goss/releases/download/{{ goss_version }}/goss-linux-{{ goss_arch }}" - goss_test_directory: /tmp - goss_format: documentation - tasks: - - name: Download and install Goss - get_url: - url: "{{ goss_url }}" - dest: "{{ goss_dst }}" - sha256sum: "{{ goss_sha256sum }}" - mode: 0755 - register: download_goss - until: download_goss is succeeded - retries: 3 - - - name: Copy Goss tests to remote - template: - src: "{{ item }}" - dest: "{{ goss_test_directory }}/{{ item | basename }}" - with_fileglob: - - "{{ lookup('env', 'MOLECULE_VERIFIER_TEST_DIRECTORY') }}/test_all.yml" - - - name: Register test files - shell: "ls {{ goss_test_directory }}/test_all.yml" - register: test_files - - - name: Execute Goss tests - command: "{{ goss_dst }} -g {{ item }} validate --format {{ goss_format }}" - register: test_results - with_items: "{{ test_files.stdout_lines }}" - - - name: Display details about the Goss results - debug: - msg: "{{ item.stdout_lines }}" - with_items: "{{ test_results.results }}" - - - name: Fail when tests fail - fail: - msg: "Goss failed to validate" - when: item.rc != 0 - with_items: "{{ test_results.results }}" - -- name: Verify mgt - hosts: borgbackup_management - become: true - vars: - goss_version: v0.3.2 - goss_arch: amd64 - goss_dst: /usr/local/bin/goss - goss_sha256sum: 2f6727375db2ea0f81bee36e2c5be78ab5ab8d5981f632f761b25e4003e190ec - goss_url: "https://github.com/aelsabbahy/goss/releases/download/{{ goss_version }}/goss-linux-{{ goss_arch }}" - goss_test_directory: /tmp - goss_format: documentation - tasks: - - name: Download and install Goss - get_url: - url: "{{ goss_url }}" - dest: "{{ goss_dst }}" - sha256sum: "{{ goss_sha256sum }}" - mode: 0755 - register: download_goss - until: download_goss is succeeded - retries: 3 - - - name: Copy Goss tests to remote - template: - src: "{{ item }}" - dest: "{{ goss_test_directory }}/{{ item | basename }}" - with_fileglob: - - "{{ lookup('env', 'MOLECULE_VERIFIER_TEST_DIRECTORY') }}/test_mgt.yml" - - - name: Register test files - shell: "ls {{ goss_test_directory }}/test_mgt.yml" - register: test_files - - - name: Execute Goss tests - command: "{{ goss_dst }} -g {{ item }} validate --format {{ goss_format }}" - register: test_results - with_items: "{{ test_files.stdout_lines }}" - - - name: Display details about the Goss results - debug: - msg: "{{ item.stdout_lines }}" - with_items: "{{ test_results.results }}" - - - name: Fail when tests fail - fail: - msg: "Goss failed to validate" - when: item.rc != 0 - with_items: "{{ test_results.results }}" - -- name: Verify clients - hosts: all:!borgbackup_servers - become: true - vars: - goss_version: v0.3.2 - goss_arch: amd64 - goss_dst: /usr/local/bin/goss - goss_sha256sum: 2f6727375db2ea0f81bee36e2c5be78ab5ab8d5981f632f761b25e4003e190ec - goss_url: "https://github.com/aelsabbahy/goss/releases/download/{{ goss_version }}/goss-linux-{{ goss_arch }}" - goss_test_directory: /tmp - goss_format: documentation - tasks: - - name: Download and install Goss - get_url: - url: "{{ goss_url }}" - dest: "{{ goss_dst }}" - sha256sum: "{{ goss_sha256sum }}" - mode: 0755 - register: download_goss - until: download_goss is succeeded - retries: 3 - - - name: Copy Goss tests to remote - template: - src: "{{ item }}" - dest: "{{ goss_test_directory }}/{{ item | basename }}" - with_fileglob: - - "{{ lookup('env', 'MOLECULE_VERIFIER_TEST_DIRECTORY') }}/test_client*.yml" - - - name: Register test files - shell: "ls {{ goss_test_directory }}/test_client*.yml" - register: test_files - - - name: Execute Goss tests - command: "{{ goss_dst }} -g {{ item }} validate --format {{ goss_format }}" - register: test_results - with_items: "{{ test_files.stdout_lines }}" - - - name: Display details about the Goss results - debug: - msg: "{{ item.stdout_lines }}" - with_items: "{{ test_results.results }}" - - - name: Fail when tests fail - fail: - msg: "Goss failed to validate" - when: item.rc != 0 - with_items: "{{ test_results.results }}" - -- name: Verify backup servers - hosts: borgbackup_servers - become: true - vars: - goss_version: v0.3.2 - goss_arch: amd64 - goss_dst: /usr/local/bin/goss - goss_sha256sum: 2f6727375db2ea0f81bee36e2c5be78ab5ab8d5981f632f761b25e4003e190ec - goss_url: "https://github.com/aelsabbahy/goss/releases/download/{{ goss_version }}/goss-linux-{{ goss_arch }}" - goss_test_directory: /tmp - goss_format: documentation - tasks: - - name: Download and install Goss - get_url: - url: "{{ goss_url }}" - dest: "{{ goss_dst }}" - sha256sum: "{{ goss_sha256sum }}" - mode: 0755 - register: download_goss - until: download_goss is succeeded - retries: 3 - - - name: Copy Goss tests to remote - template: - src: "{{ item }}" - dest: "{{ goss_test_directory }}/{{ item | basename }}" - with_fileglob: - - "{{ lookup('env', 'MOLECULE_VERIFIER_TEST_DIRECTORY') }}/test_server*.yml" - - - name: Register test files - shell: "ls {{ goss_test_directory }}/test_server*.yml" - register: test_files - - - name: Execute Goss tests - command: "{{ goss_dst }} -g {{ item }} validate --format {{ goss_format }}" - register: test_results - with_items: "{{ test_files.stdout_lines }}" - - - name: Display details about the Goss results - debug: - msg: "{{ item.stdout_lines }}" - with_items: "{{ test_results.results }}" - - - name: Fail when tests fail - fail: - msg: "Goss failed to validate" - when: item.rc != 0 - with_items: "{{ test_results.results }}" diff --git a/molecule/multiple/molecule.yml b/molecule/multiple/molecule.yml index a160855..b3d1b3c 100644 --- a/molecule/multiple/molecule.yml +++ b/molecule/multiple/molecule.yml @@ -66,6 +66,6 @@ provisioner: scenario: name: multiple verifier: - name: goss + name: testinfra lint: - name: yamllint + name: flake8 diff --git a/molecule/multiple/tests b/molecule/multiple/tests new file mode 120000 index 0000000..630b75e --- /dev/null +++ b/molecule/multiple/tests @@ -0,0 +1 @@ +../generic_files/tests \ No newline at end of file diff --git a/molecule/multiple/tests/test_all.yml b/molecule/multiple/tests/test_all.yml deleted file mode 120000 index 50b87ac..0000000 --- a/molecule/multiple/tests/test_all.yml +++ /dev/null @@ -1 +0,0 @@ -../../generic_files/tests/test_all.yml \ No newline at end of file diff --git a/molecule/multiple/tests/test_client.yml b/molecule/multiple/tests/test_client.yml deleted file mode 120000 index 865fba3..0000000 --- a/molecule/multiple/tests/test_client.yml +++ /dev/null @@ -1 +0,0 @@ -../../generic_files/tests/test_client.yml \ No newline at end of file diff --git a/molecule/multiple/tests/test_client_restore.yml b/molecule/multiple/tests/test_client_restore.yml deleted file mode 120000 index 01a0351..0000000 --- a/molecule/multiple/tests/test_client_restore.yml +++ /dev/null @@ -1 +0,0 @@ -../../generic_files/tests/test_client_restore.yml \ No newline at end of file diff --git a/molecule/multiple/tests/test_server.yml b/molecule/multiple/tests/test_server.yml deleted file mode 120000 index 1c4e7c6..0000000 --- a/molecule/multiple/tests/test_server.yml +++ /dev/null @@ -1 +0,0 @@ -../../generic_files/tests/test_server.yml \ No newline at end of file diff --git a/molecule/multiple/verify.yml b/molecule/multiple/verify.yml deleted file mode 100644 index 393cd1c..0000000 --- a/molecule/multiple/verify.yml +++ /dev/null @@ -1,151 +0,0 @@ ---- -# This is an example playbook to execute goss tests. -# Tests need distributed to the appropriate ansible host/groups -# prior to execution by `goss validate`. - -- name: Verify all - hosts: all - become: true - vars: - goss_version: v0.3.2 - goss_arch: amd64 - goss_dst: /usr/local/bin/goss - goss_sha256sum: 2f6727375db2ea0f81bee36e2c5be78ab5ab8d5981f632f761b25e4003e190ec - goss_url: "https://github.com/aelsabbahy/goss/releases/download/{{ goss_version }}/goss-linux-{{ goss_arch }}" - goss_test_directory: /tmp - goss_format: documentation - tasks: - - name: Download and install Goss - get_url: - url: "{{ goss_url }}" - dest: "{{ goss_dst }}" - sha256sum: "{{ goss_sha256sum }}" - mode: 0755 - register: download_goss - until: download_goss is succeeded - retries: 3 - - - name: Copy Goss tests to remote - template: - src: "{{ item }}" - dest: "{{ goss_test_directory }}/{{ item | basename }}" - with_fileglob: - - "{{ lookup('env', 'MOLECULE_VERIFIER_TEST_DIRECTORY') }}/test_all.yml" - - - name: Register test files - shell: "ls {{ goss_test_directory }}/test_all.yml" - register: test_files - - - name: Execute Goss tests - command: "{{ goss_dst }} -g {{ item }} validate --format {{ goss_format }}" - register: test_results - with_items: "{{ test_files.stdout_lines }}" - - - name: Display details about the Goss results - debug: - msg: "{{ item.stdout_lines }}" - with_items: "{{ test_results.results }}" - - - name: Fail when tests fail - fail: - msg: "Goss failed to validate" - when: item.rc != 0 - with_items: "{{ test_results.results }}" - -- name: Verify clients - hosts: all:!borgbackup_servers - become: true - vars: - goss_version: v0.3.2 - goss_arch: amd64 - goss_dst: /usr/local/bin/goss - goss_sha256sum: 2f6727375db2ea0f81bee36e2c5be78ab5ab8d5981f632f761b25e4003e190ec - goss_url: "https://github.com/aelsabbahy/goss/releases/download/{{ goss_version }}/goss-linux-{{ goss_arch }}" - goss_test_directory: /tmp - goss_format: documentation - tasks: - - name: Download and install Goss - get_url: - url: "{{ goss_url }}" - dest: "{{ goss_dst }}" - sha256sum: "{{ goss_sha256sum }}" - mode: 0755 - register: download_goss - until: download_goss is succeeded - retries: 3 - - - name: Copy Goss tests to remote - template: - src: "{{ item }}" - dest: "{{ goss_test_directory }}/{{ item | basename }}" - with_fileglob: - - "{{ lookup('env', 'MOLECULE_VERIFIER_TEST_DIRECTORY') }}/test_client*.yml" - - - name: Register test files - shell: "ls {{ goss_test_directory }}/test_client*.yml" - register: test_files - - - name: Execute Goss tests - command: "{{ goss_dst }} -g {{ item }} validate --format {{ goss_format }}" - register: test_results - with_items: "{{ test_files.stdout_lines }}" - - - name: Display details about the Goss results - debug: - msg: "{{ item.stdout_lines }}" - with_items: "{{ test_results.results }}" - - - name: Fail when tests fail - fail: - msg: "Goss failed to validate" - when: item.rc != 0 - with_items: "{{ test_results.results }}" - -- name: Verify backup servers - hosts: borgbackup_servers - become: true - vars: - goss_version: v0.3.2 - goss_arch: amd64 - goss_dst: /usr/local/bin/goss - goss_sha256sum: 2f6727375db2ea0f81bee36e2c5be78ab5ab8d5981f632f761b25e4003e190ec - goss_url: "https://github.com/aelsabbahy/goss/releases/download/{{ goss_version }}/goss-linux-{{ goss_arch }}" - goss_test_directory: /tmp - goss_format: documentation - tasks: - - name: Download and install Goss - get_url: - url: "{{ goss_url }}" - dest: "{{ goss_dst }}" - sha256sum: "{{ goss_sha256sum }}" - mode: 0755 - register: download_goss - until: download_goss is succeeded - retries: 3 - - - name: Copy Goss tests to remote - template: - src: "{{ item }}" - dest: "{{ goss_test_directory }}/{{ item | basename }}" - with_fileglob: - - "{{ lookup('env', 'MOLECULE_VERIFIER_TEST_DIRECTORY') }}/test_server*.yml" - - - name: Register test files - shell: "ls {{ goss_test_directory }}/test_server*.yml" - register: test_files - - - name: Execute Goss tests - command: "{{ goss_dst }} -g {{ item }} validate --format {{ goss_format }}" - register: test_results - with_items: "{{ test_files.stdout_lines }}" - - - name: Display details about the Goss results - debug: - msg: "{{ item.stdout_lines }}" - with_items: "{{ test_results.results }}" - - - name: Fail when tests fail - fail: - msg: "Goss failed to validate" - when: item.rc != 0 - with_items: "{{ test_results.results }}"