diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8250733e4..a9d6ee29e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -42,152 +42,11 @@ before_script: services: - docker:dind before_script: - - /usr/bin/python -m pip install -r tests/requirements.txt - - mkdir -p /.ssh - - mkdir -p $HOME/.ssh - - ansible-playbook --version - - export PYPATH=$([[ ! "$CI_JOB_NAME" =~ "coreos" ]] && echo /usr/bin/python || echo /opt/bin/python) - - echo "CI_JOB_NAME is $CI_JOB_NAME" - - echo "PYPATH is $PYPATH" + - ./tests/scripts/testcases_prepare.sh script: - - pwd - - ls - - echo ${PWD} - - echo "${STARTUP_SCRIPT}" - # Docker is required on the ansible host for download_run_once and download_localhost - - docker info - - cd tests && make create-${CI_PLATFORM} -s ; cd - - - # Check out latest tag if testing upgrade - - test "${UPGRADE_TEST}" != "false" && git fetch --all && git checkout $(git describe --tags $(git rev-list --tags --max-count=1)) - # Checkout the CI vars file so it is available - - test "${UPGRADE_TEST}" != "false" && git checkout "${CI_BUILD_REF}" tests/files/${CI_JOB_NAME}.yml - - # Create cluster - - > - ansible-playbook - -i ${ANSIBLE_INVENTORY} - -b --become-user=root - --private-key=${HOME}/.ssh/id_rsa - -u $SSH_USER - ${SSH_ARGS} - ${LOG_LEVEL} - -e @${CI_TEST_VARS} - -e ansible_ssh_user=${SSH_USER} - -e local_release_dir=${PWD}/downloads - --limit "all:!fake_hosts" - cluster.yml - - # Repeat deployment if testing upgrade - - > - if [ "${UPGRADE_TEST}" != "false" ]; then - test "${UPGRADE_TEST}" == "basic" && PLAYBOOK="cluster.yml"; - test "${UPGRADE_TEST}" == "graceful" && PLAYBOOK="upgrade-cluster.yml"; - git checkout "${CI_BUILD_REF}"; - ansible-playbook - -i ${ANSIBLE_INVENTORY} - -b --become-user=root - --private-key=${HOME}/.ssh/id_rsa - -u $SSH_USER - ${SSH_ARGS} - ${LOG_LEVEL} - -e @${CI_TEST_VARS} - -e ansible_ssh_user=${SSH_USER} - -e local_release_dir=${PWD}/downloads - --limit "all:!fake_hosts" - $PLAYBOOK; - fi - - # Tests Cases - ## Test Master API - - ansible-playbook -i ${ANSIBLE_INVENTORY} -e ansible_python_interpreter=${PYPATH} -u $SSH_USER -e ansible_ssh_user=$SSH_USER $SSH_ARGS -b --become-user=root --limit "all:!fake_hosts" tests/testcases/010_check-apiserver.yml $LOG_LEVEL - - ## Test that all pods are Running - - ansible-playbook -i ${ANSIBLE_INVENTORY} -e ansible_python_interpreter=${PYPATH} -u $SSH_USER -e ansible_ssh_user=$SSH_USER $SSH_ARGS -b --become-user=root --limit "all:!fake_hosts" tests/testcases/015_check-pods-running.yml $LOG_LEVEL - - ## Ping the between 2 pod - - ansible-playbook -i ${ANSIBLE_INVENTORY} -e ansible_python_interpreter=${PYPATH} -u $SSH_USER -e ansible_ssh_user=$SSH_USER $SSH_ARGS -b --become-user=root --limit "all:!fake_hosts" tests/testcases/030_check-network.yml $LOG_LEVEL - - ## Advanced DNS checks - - ansible-playbook -i ${ANSIBLE_INVENTORY} -e ansible_python_interpreter=${PYPATH} -u $SSH_USER -e ansible_ssh_user=$SSH_USER $SSH_ARGS -b --become-user=root --limit "all:!fake_hosts" tests/testcases/040_check-network-adv.yml $LOG_LEVEL - - ## Idempotency checks 1/5 (repeat deployment) - - > - if [ "${IDEMPOT_CHECK}" = "true" ]; then - ansible-playbook - -i ${ANSIBLE_INVENTORY} - -b --become-user=root - --private-key=${HOME}/.ssh/id_rsa - -u $SSH_USER - ${SSH_ARGS} - ${LOG_LEVEL} - -e @${CI_TEST_VARS} - -e ansible_python_interpreter=${PYPATH} - -e local_release_dir=${PWD}/downloads - --limit "all:!fake_hosts" - cluster.yml; - fi - - ## Idempotency checks 2/5 (Advanced DNS checks) - - > - if [ "${IDEMPOT_CHECK}" = "true" ]; then - ansible-playbook - -i ${ANSIBLE_INVENTORY} - -b --become-user=root - --private-key=${HOME}/.ssh/id_rsa - -u $SSH_USER - ${SSH_ARGS} - ${LOG_LEVEL} - -e @${CI_TEST_VARS} - --limit "all:!fake_hosts" - tests/testcases/040_check-network-adv.yml; - fi - - ## Idempotency checks 3/5 (reset deployment) - - > - if [ "${IDEMPOT_CHECK}" = "true" -a "${RESET_CHECK}" = "true" ]; then - ansible-playbook - -i ${ANSIBLE_INVENTORY} - -b --become-user=root - --private-key=${HOME}/.ssh/id_rsa - -u $SSH_USER - ${SSH_ARGS} - ${LOG_LEVEL} - -e @${CI_TEST_VARS} - -e ansible_python_interpreter=${PYPATH} - -e reset_confirmation=yes - --limit "all:!fake_hosts" - reset.yml; - fi - - ## Idempotency checks 4/5 (redeploy after reset) - - > - if [ "${IDEMPOT_CHECK}" = "true" -a "${RESET_CHECK}" = "true" ]; then - ansible-playbook - -i ${ANSIBLE_INVENTORY} - -b --become-user=root - --private-key=${HOME}/.ssh/id_rsa - -u $SSH_USER - ${SSH_ARGS} - ${LOG_LEVEL} - -e @${CI_TEST_VARS} - -e ansible_python_interpreter=${PYPATH} - -e local_release_dir=${PWD}/downloads - --limit "all:!fake_hosts" - cluster.yml; - fi - - ## Idempotency checks 5/5 (Advanced DNS checks) - - > - if [ "${IDEMPOT_CHECK}" = "true" -a "${RESET_CHECK}" = "true" ]; then - ansible-playbook -i ${ANSIBLE_INVENTORY} -e ansible_python_interpreter=${PYPATH} - -u $SSH_USER -e ansible_ssh_user=$SSH_USER $SSH_ARGS -b --become-user=root - --limit "all:!fake_hosts" - tests/testcases/040_check-network-adv.yml $LOG_LEVEL; - fi - + - ./tests/scripts/testcases_run.sh after_script: - - cd tests && make delete-${CI_PLATFORM} -s ; cd - + - ./tests/scripts/testcases_cleanup.sh # For failfast, at least 1 job must be defined in .gitlab-ci.yml # Premoderated with manual actions diff --git a/tests/scripts/testcases_cleanup.sh b/tests/scripts/testcases_cleanup.sh new file mode 100755 index 000000000..0e1d0f27f --- /dev/null +++ b/tests/scripts/testcases_cleanup.sh @@ -0,0 +1,4 @@ +#!/bin/bash +set -euxo pipefail + +cd tests && make delete-${CI_PLATFORM} -s ; cd - diff --git a/tests/scripts/testcases_prepare.sh b/tests/scripts/testcases_prepare.sh new file mode 100755 index 000000000..4f5610097 --- /dev/null +++ b/tests/scripts/testcases_prepare.sh @@ -0,0 +1,7 @@ +#!/bin/bash +set -euxo pipefail + +/usr/bin/python -m pip install -r tests/requirements.txt +mkdir -p /.ssh +mkdir -p $HOME/.ssh +ansible-playbook --version diff --git a/tests/scripts/testcases_run.sh b/tests/scripts/testcases_run.sh new file mode 100755 index 000000000..de5b95745 --- /dev/null +++ b/tests/scripts/testcases_run.sh @@ -0,0 +1,67 @@ +#!/bin/bash +set -euxo pipefail + +export PYPATH=$([[ ! "$CI_JOB_NAME" =~ "coreos" ]] && echo /usr/bin/python || echo /opt/bin/python) +echo "CI_JOB_NAME is $CI_JOB_NAME" +echo "PYPATH is $PYPATH" +pwd +ls +echo ${PWD} +cd tests && make create-${CI_PLATFORM} -s ; cd - + +# Check out latest tag if testing upgrade +test "${UPGRADE_TEST}" != "false" && git fetch --all && git checkout $(git describe --tags $(git rev-list --tags --max-count=1)) +# Checkout the CI vars file so it is available +test "${UPGRADE_TEST}" != "false" && git checkout "${CI_BUILD_REF}" tests/files/${CI_JOB_NAME}.yml + +# Create cluster +ansible-playbook -i ${ANSIBLE_INVENTORY} -b --become-user=root --private-key=${HOME}/.ssh/id_rsa -u $SSH_USER ${LOG_LEVEL} -e @${CI_TEST_VARS} -e ansible_ssh_user=${SSH_USER} -e local_release_dir=${PWD}/downloads --limit "all:!fake_hosts" cluster.yml + +# Repeat deployment if testing upgrade +if [ "${UPGRADE_TEST}" != "false" ]; then + test "${UPGRADE_TEST}" == "basic" && PLAYBOOK="cluster.yml" + test "${UPGRADE_TEST}" == "graceful" && PLAYBOOK="upgrade-cluster.yml" + git checkout "${CI_BUILD_REF}" + ansible-playbook -i ${ANSIBLE_INVENTORY} -b --become-user=root --private-key=${HOME}/.ssh/id_rsa -u $SSH_USER ${LOG_LEVEL} -e @${CI_TEST_VARS} -e ansible_ssh_user=${SSH_USER} -e local_release_dir=${PWD}/downloads --limit "all:!fake_hosts" $PLAYBOOK +fi + +# Tests Cases +## Test Master API +ansible-playbook -i ${ANSIBLE_INVENTORY} -e ansible_python_interpreter=${PYPATH} -u $SSH_USER -e ansible_ssh_user=$SSH_USER -b --become-user=root --limit "all:!fake_hosts" tests/testcases/010_check-apiserver.yml $LOG_LEVEL + +## Test that all pods are Running +ansible-playbook -i ${ANSIBLE_INVENTORY} -e ansible_python_interpreter=${PYPATH} -u $SSH_USER -e ansible_ssh_user=$SSH_USER -b --become-user=root --limit "all:!fake_hosts" tests/testcases/015_check-pods-running.yml $LOG_LEVEL + +## Test pod creation +ansible-playbook -i ${ANSIBLE_INVENTORY} -e ansible_python_interpreter=${PYPATH} -u $SSH_USER -e ansible_ssh_user=$SSH_USER -b --become-user=root --limit "all:!fake_hosts" tests/testcases/020_check-create-pod.yml $LOG_LEVEL + +## Ping the between 2 pod +ansible-playbook -i ${ANSIBLE_INVENTORY} -e ansible_python_interpreter=${PYPATH} -u $SSH_USER -e ansible_ssh_user=$SSH_USER -b --become-user=root --limit "all:!fake_hosts" tests/testcases/030_check-network.yml $LOG_LEVEL + +## Advanced DNS checks +ansible-playbook -i ${ANSIBLE_INVENTORY} -e ansible_python_interpreter=${PYPATH} -u $SSH_USER -e ansible_ssh_user=$SSH_USER -b --become-user=root --limit "all:!fake_hosts" tests/testcases/040_check-network-adv.yml $LOG_LEVEL + +## Idempotency checks 1/5 (repeat deployment) +if [ "${IDEMPOT_CHECK}" = "true" ]; then + ansible-playbook -i ${ANSIBLE_INVENTORY} -b --become-user=root --private-key=${HOME}/.ssh/id_rsa -u $SSH_USER ${LOG_LEVEL} -e @${CI_TEST_VARS} -e ansible_python_interpreter=${PYPATH} -e local_release_dir=${PWD}/downloads --limit "all:!fake_hosts" cluster.yml +fi + +## Idempotency checks 2/5 (Advanced DNS checks) +if [ "${IDEMPOT_CHECK}" = "true" ]; then + ansible-playbook -i ${ANSIBLE_INVENTORY} -b --become-user=root --private-key=${HOME}/.ssh/id_rsa -u $SSH_USER ${LOG_LEVEL} -e @${CI_TEST_VARS} --limit "all:!fake_hosts" tests/testcases/040_check-network-adv.yml +fi + +## Idempotency checks 3/5 (reset deployment) +if [ "${IDEMPOT_CHECK}" = "true" -a "${RESET_CHECK}" = "true" ]; then + ansible-playbook -i ${ANSIBLE_INVENTORY} -b --become-user=root --private-key=${HOME}/.ssh/id_rsa -u $SSH_USER ${LOG_LEVEL} -e @${CI_TEST_VARS} -e ansible_python_interpreter=${PYPATH} -e reset_confirmation=yes --limit "all:!fake_hosts" reset.yml +fi + +## Idempotency checks 4/5 (redeploy after reset) +if [ "${IDEMPOT_CHECK}" = "true" -a "${RESET_CHECK}" = "true" ]; then + ansible-playbook -i ${ANSIBLE_INVENTORY} -b --become-user=root --private-key=${HOME}/.ssh/id_rsa -u $SSH_USER ${LOG_LEVEL} -e @${CI_TEST_VARS} -e ansible_python_interpreter=${PYPATH} -e local_release_dir=${PWD}/downloads --limit "all:!fake_hosts" cluster.yml +fi + +## Idempotency checks 5/5 (Advanced DNS checks) +if [ "${IDEMPOT_CHECK}" = "true" -a "${RESET_CHECK}" = "true" ]; then + ansible-playbook -i ${ANSIBLE_INVENTORY} -e ansible_python_interpreter=${PYPATH} -u $SSH_USER -e ansible_ssh_user=$SSH_USER -b --become-user=root --limit "all:!fake_hosts" tests/testcases/040_check-network-adv.yml $LOG_LEVEL +fi diff --git a/tests/testcases/030_check-network.yml b/tests/testcases/030_check-network.yml index 14b4a5564..fc4eddd02 100644 --- a/tests/testcases/030_check-network.yml +++ b/tests/testcases/030_check-network.yml @@ -67,14 +67,14 @@ with_items: "{{pod_ips}}" - name: Ping between pods is working - shell: "{{bin_dir}}/kubectl exec {{item[0]}} -- ping -c 4 {{ item[1] }}" + shell: "{{bin_dir}}/kubectl -n test exec {{item[0]}} -- ping -c 4 {{ item[1] }}" when: not item[0] in pods_hostnet and not item[1] in pods_hostnet with_nested: - "{{pod_names}}" - "{{pod_ips}}" - name: Ping between hostnet pods is working - shell: "{{bin_dir}}/kubectl exec {{item[0]}} -- ping -c 4 {{ item[1] }}" + shell: "{{bin_dir}}/kubectl -n test exec {{item[0]}} -- ping -c 4 {{ item[1] }}" when: item[0] in pods_hostnet and item[1] in pods_hostnet with_nested: - "{{pod_names}}"