From 9a43b8d1c9b610489c874b4917d278028ef65d63 Mon Sep 17 00:00:00 2001 From: Varac <varac@varac.net> Date: Fri, 6 Dec 2019 09:30:24 +0100 Subject: [PATCH] Add pytest for deployed helmreleases --- .gitlab-ci.yml | 17 ++++++++++- requirements.txt | 1 + test/pytest.ini | 5 +++ test/pytest/test_helmreleases.py | 52 ++++++++++++++++++++++++++++++++ 4 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 test/pytest/test_helmreleases.py diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 081150576..4e69161fa 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -6,6 +6,7 @@ stages: - create-vps - setup-cluster - install-apps + - wait-for-deployments - health-test - integration-test - cleanup @@ -114,6 +115,21 @@ install: - clusters/$HOSTNAME/** key: ${CI_COMMIT_REF_SLUG} +helmreleases: + stage: wait-for-deployments + script: + - cd ansible/ + - export KUBECONFIG="${PWD}/../clusters/${HOSTNAME}/secrets/kube_config_cluster.yml" + - pytest -v -s -m 'helmreleases' --connection=ansible --ansible-inventory=../clusters/${HOSTNAME}/inventory.yml --hosts='ansible://*' --reruns 120 --reruns-delay 10 + only: + changes: + - .gitlab-ci.yml + - ansible/**/* + - helmfiles/**/* + - test/**/* + - openappstack/**/* + extends: .ssh_setup + testinfra: stage: health-test script: @@ -242,4 +258,3 @@ gitlab-merge-workaround: stage: cleanup script: - echo "That went well" - diff --git a/requirements.txt b/requirements.txt index 90e189fe7..0f687aee2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,6 +9,7 @@ paramiko psutil>=5.5.0 pyopenssl>=19.0.0 pytest>=4.3.0 +pytest-rerunfailures requests>=2.19.1 tabulate>=0.8.3 testinfra>=3.0.0 diff --git a/test/pytest.ini b/test/pytest.ini index 281b543c4..d3dc444a3 100644 --- a/test/pytest.ini +++ b/test/pytest.ini @@ -4,3 +4,8 @@ markers = certs: Run tests related to TLS certificates testinfra: Run testinfra tests (test OS/package versions etc) prometheus: Test prometheus + helmreleases: Test delpoyed helmreleases installed by weave flux + +# https://docs.pytest.org/en/latest/warnings.html +filterwarnings = + ignore::DeprecationWarning diff --git a/test/pytest/test_helmreleases.py b/test/pytest/test_helmreleases.py new file mode 100644 index 000000000..058e6cab7 --- /dev/null +++ b/test/pytest/test_helmreleases.py @@ -0,0 +1,52 @@ +import pytest +from kubernetes import client, config + + +def get_release(name, namespace, api): + print('Testing %s in namespace %s ...' % (name, namespace), end='') + try: + release = api.get_namespaced_custom_object( + group="helm.fluxcd.io", + version="v1", + plural="helmreleases", + name=name, + namespace=namespace + ) + release_name = release['status']['releaseName'] + release_status = release['status']['releaseStatus'] + print(release_status) + except Exception as e: + release_name = 'n/a' + release_status = 'n/a' + print("**** NOT DEPLOYED, status: %s *****" % release_status) + print("Exception: %s" % e) + + return(release_name, release_status) + + +@pytest.mark.helmreleases +def test_helmreleases(): + """Checks if all desired HelmReleases installed by weave flux are in + DEPLOYED state. + """ + expected_releases = { + 'oas': ['cert-manager', 'ingress', 'local-storage', 'monitoring'], + 'oas-apps': ['nextcloud'] + } + + config.load_kube_config() + customObjects = client.CustomObjectsApi() + + failed = 0 + # test_release('nextcloud', 'oas-apps') + print('\n') + for namespace in expected_releases: + for app in expected_releases[namespace]: + app_status = get_release(app, namespace, customObjects) + if app_status[1] != 'DEPLOYED': + failed += 1 + assert failed == 0, "Error: %s apps NOT DEPLOYED !" % failed + + +if __name__ == "__main__": + test_helmreleases() -- GitLab