diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e8deda5a6..015eec681 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -35,14 +35,13 @@ variables: RECOVER_CONTROL_PLANE_TEST: "false" RECOVER_CONTROL_PLANE_TEST_GROUPS: "etcd[2:],kube_control_plane[1:]" TERRAFORM_VERSION: 1.3.7 - ANSIBLE_MAJOR_VERSION: "2.11" PIPELINE_IMAGE: "$CI_REGISTRY_IMAGE/pipeline:${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}" before_script: - ./tests/scripts/rebase.sh - update-alternatives --install /usr/bin/python python /usr/bin/python3 1 - python -m pip uninstall -y ansible ansible-base ansible-core - - python -m pip install -r tests/requirements-${ANSIBLE_MAJOR_VERSION}.txt + - python -m pip install -r tests/requirements.txt - mkdir -p /.ssh .job: &job diff --git a/.gitlab-ci/packet.yml b/.gitlab-ci/packet.yml index a25fbd2e8..02bf4f1b7 100644 --- a/.gitlab-ci/packet.yml +++ b/.gitlab-ci/packet.yml @@ -31,14 +31,6 @@ packet_ubuntu20-calico-aio: variables: RESET_CHECK: "true" -packet_ubuntu20-calico-aio-ansible-2_11: - stage: deploy-part1 - extends: .packet_periodic - when: on_success - variables: - ANSIBLE_MAJOR_VERSION: "2.11" - RESET_CHECK: "true" - # ### PR JOBS PART2 packet_ubuntu20-aio-docker: diff --git a/Dockerfile b/Dockerfile index 6d3b0af85..840d473d0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ FROM ubuntu:jammy-20230308 # Some tools like yamllint need this # Pip needs this as well at the moment to install ansible -# (and potentially other packages) +# (and potentially other packages) # See: https://github.com/pypa/pip/issues/10219 ENV LANG=C.UTF-8 \ DEBIAN_FRONTEND=noninteractive \ @@ -29,7 +29,7 @@ RUN apt update -q \ openssh-client \ && pip install --no-compile --no-cache-dir \ ansible==5.7.1 \ - ansible-core==2.12.5 \ + ansible-core==2.12.10 \ cryptography==3.4.8 \ jinja2==3.1.2 \ netaddr==0.8.0 \ diff --git a/contrib/inventory_builder/tox.ini b/contrib/inventory_builder/tox.ini index 889fe7853..c9c70428c 100644 --- a/contrib/inventory_builder/tox.ini +++ b/contrib/inventory_builder/tox.ini @@ -1,21 +1,27 @@ [tox] minversion = 1.6 skipsdist = True -envlist = pep8, py33 +envlist = pep8 [testenv] -whitelist_externals = py.test +allowlist_externals = py.test usedevelop = True deps = -r{toxinidir}/requirements.txt -r{toxinidir}/test-requirements.txt setenv = VIRTUAL_ENV={envdir} -passenv = http_proxy HTTP_PROXY https_proxy HTTPS_PROXY no_proxy NO_PROXY +passenv = + http_proxy + HTTP_PROXY + https_proxy + HTTPS_PROXY + no_proxy + NO_PROXY commands = pytest -vv #{posargs:./tests} [testenv:pep8] usedevelop = False -whitelist_externals = bash +allowlist_externals = bash commands = bash -c "find {toxinidir}/* -type f -name '*.py' -print0 | xargs -0 flake8" diff --git a/pipeline.Dockerfile b/pipeline.Dockerfile index 91bda14de..8351cd875 100644 --- a/pipeline.Dockerfile +++ b/pipeline.Dockerfile @@ -37,12 +37,12 @@ RUN apt update -q \ WORKDIR /kubespray -RUN --mount=type=bind,target=./requirements-2.12.txt,src=./requirements-2.12.txt \ - --mount=type=bind,target=./tests/requirements-2.12.txt,src=./tests/requirements-2.12.txt \ +RUN --mount=type=bind,target=./requirements.txt,src=./requirements.txt \ + --mount=type=bind,target=./tests/requirements.txt,src=./tests/requirements.txt \ --mount=type=bind,target=./roles/kubespray-defaults/defaults/main.yaml,src=./roles/kubespray-defaults/defaults/main.yaml \ update-alternatives --install /usr/bin/python python /usr/bin/python3 1 \ && pip install --no-compile --no-cache-dir pip -U \ - && pip install --no-compile --no-cache-dir -r tests/requirements-2.12.txt \ + && pip install --no-compile --no-cache-dir -r tests/requirements.txt \ && KUBE_VERSION=$(sed -n 's/^kube_version: //p' roles/kubespray-defaults/defaults/main.yaml) \ && curl -L https://dl.k8s.io/release/$KUBE_VERSION/bin/linux/$(dpkg --print-architecture)/kubectl -o /usr/local/bin/kubectl \ && echo $(curl -L https://dl.k8s.io/release/$KUBE_VERSION/bin/linux/$(dpkg --print-architecture)/kubectl.sha256) /usr/local/bin/kubectl | sha256sum --check \ diff --git a/playbooks/ansible_version.yml b/playbooks/ansible_version.yml index 321ce228d..84aad69c8 100644 --- a/playbooks/ansible_version.yml +++ b/playbooks/ansible_version.yml @@ -3,7 +3,7 @@ gather_facts: false become: no vars: - minimal_ansible_version: 2.11.0 + minimal_ansible_version: 2.12.0 maximal_ansible_version: 2.13.0 ansible_connection: local tags: always diff --git a/requirements-2.11.txt b/requirements-2.11.txt deleted file mode 100644 index 56518e327..000000000 --- a/requirements-2.11.txt +++ /dev/null @@ -1,10 +0,0 @@ -ansible==4.10.0 -ansible-core==2.11.11 -cryptography==3.4.8 -jinja2==3.1.2 -jmespath==1.0.1 -MarkupSafe==2.1.2 -netaddr==0.8.0 -pbr==5.11.1 -ruamel.yaml==0.17.21 -ruamel.yaml.clib==0.2.7 diff --git a/requirements-2.12.txt b/requirements-2.12.txt deleted file mode 100644 index ab90e9480..000000000 --- a/requirements-2.12.txt +++ /dev/null @@ -1,10 +0,0 @@ -ansible==5.7.1 -ansible-core==2.12.5 -cryptography==3.4.8 -jinja2==3.1.2 -jmespath==1.0.1 -MarkupSafe==2.1.2 -netaddr==0.8.0 -pbr==5.11.1 -ruamel.yaml==0.17.21 -ruamel.yaml.clib==0.2.7 diff --git a/requirements.txt b/requirements.txt deleted file mode 120000 index ac782c9e7..000000000 --- a/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -requirements-2.12.txt \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..3b97a13a5 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,10 @@ +ansible==5.7.1 +ansible-core==2.12.10 +cryptography==3.4.8 +jinja2==3.1.2 +jmespath==1.0.1 +MarkupSafe==2.1.2 +netaddr==0.8.0 +pbr==5.11.1 +ruamel.yaml==0.17.21 +ruamel.yaml.clib==0.2.7 diff --git a/roles/adduser/molecule/default/molecule.yml b/roles/adduser/molecule/default/molecule.yml index 617677eec..0fb4997df 100644 --- a/roles/adduser/molecule/default/molecule.yml +++ b/roles/adduser/molecule/default/molecule.yml @@ -1,9 +1,7 @@ --- +role_name_check: 1 dependency: name: galaxy -lint: | - set -e - yamllint -c ../../.yamllint . driver: name: vagrant provider: @@ -13,15 +11,13 @@ platforms: box: generic/ubuntu2004 cpus: 1 memory: 512 + provider_options: + driver: kvm provisioner: name: ansible config_options: defaults: callbacks_enabled: profile_tasks timeout: 120 - lint: - name: ansible-lint verifier: name: testinfra - lint: - name: flake8 diff --git a/roles/adduser/molecule/default/tests/test_default.py b/roles/adduser/molecule/default/tests/test_default.py index 4c81047e2..7e8649d14 100644 --- a/roles/adduser/molecule/default/tests/test_default.py +++ b/roles/adduser/molecule/default/tests/test_default.py @@ -1,12 +1,15 @@ import os -import yaml -import glob +from pathlib import Path + import testinfra.utils.ansible_runner -from ansible.playbook import Playbook +import yaml from ansible.cli.playbook import PlaybookCLI +from ansible.playbook import Playbook testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner( - os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all') + os.environ["MOLECULE_INVENTORY_FILE"] +).get_hosts("all") + def read_playbook(playbook): cli_args = [os.path.realpath(playbook), testinfra_hosts] @@ -19,19 +22,22 @@ def read_playbook(playbook): for play in pb.get_plays(): yield variable_manager.get_vars(play) + def get_playbook(): - with open(os.path.realpath(' '.join(map(str,glob.glob('molecule.*')))), 'r') as yamlfile: + playbooks_path = Path(__file__).parent.parent + with open(os.path.join(playbooks_path, "molecule.yml"), "r") as yamlfile: data = yaml.load(yamlfile, Loader=yaml.FullLoader) - if 'playbooks' in data['provisioner'].keys(): - if 'converge' in data['provisioner']['playbooks'].keys(): - return data['provisioner']['playbooks']['converge'] + if "playbooks" in data["provisioner"].keys(): + if "converge" in data["provisioner"]["playbooks"].keys(): + return data["provisioner"]["playbooks"]["converge"] else: - return ' '.join(map(str,glob.glob('converge.*'))) + return os.path.join(playbooks_path, "converge.yml") + def test_user(host): for vars in read_playbook(get_playbook()): - assert host.user(vars['user']['name']).exists - if 'group' in vars['user'].keys(): - assert host.group(vars['user']['group']).exists + assert host.user(vars["user"]["name"]).exists + if "group" in vars["user"].keys(): + assert host.group(vars["user"]["group"]).exists else: - assert host.group(vars['user']['name']).exists + assert host.group(vars["user"]["name"]).exists diff --git a/roles/bastion-ssh-config/molecule/default/molecule.yml b/roles/bastion-ssh-config/molecule/default/molecule.yml index 5cadd6e64..11cf91ce5 100644 --- a/roles/bastion-ssh-config/molecule/default/molecule.yml +++ b/roles/bastion-ssh-config/molecule/default/molecule.yml @@ -1,9 +1,7 @@ --- +role_name_check: 1 dependency: name: galaxy -lint: | - set -e - yamllint -c ../../.yamllint . driver: name: vagrant provider: @@ -13,14 +11,14 @@ platforms: box: generic/ubuntu2004 cpus: 1 memory: 512 + provider_options: + driver: kvm provisioner: name: ansible config_options: defaults: callbacks_enabled: profile_tasks timeout: 120 - lint: - name: ansible-lint inventory: hosts: all: @@ -31,5 +29,3 @@ provisioner: bastion-01: verifier: name: testinfra - lint: - name: flake8 diff --git a/roles/bastion-ssh-config/molecule/default/tests/test_default.py b/roles/bastion-ssh-config/molecule/default/tests/test_default.py index f98faa409..cce719de1 100644 --- a/roles/bastion-ssh-config/molecule/default/tests/test_default.py +++ b/roles/bastion-ssh-config/molecule/default/tests/test_default.py @@ -1,12 +1,15 @@ import os -import yaml -import glob +from pathlib import Path + import testinfra.utils.ansible_runner -from ansible.playbook import Playbook +import yaml from ansible.cli.playbook import PlaybookCLI +from ansible.playbook import Playbook testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner( - os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all') + os.environ["MOLECULE_INVENTORY_FILE"] +).get_hosts("all") + def read_playbook(playbook): cli_args = [os.path.realpath(playbook), testinfra_hosts] @@ -19,16 +22,19 @@ def read_playbook(playbook): for play in pb.get_plays(): yield variable_manager.get_vars(play) + def get_playbook(): - with open(os.path.realpath(' '.join(map(str,glob.glob('molecule.*')))), 'r') as yamlfile: + playbooks_path = Path(__file__).parent.parent + with open(os.path.join(playbooks_path, "molecule.yml"), "r") as yamlfile: data = yaml.load(yamlfile, Loader=yaml.FullLoader) - if 'playbooks' in data['provisioner'].keys(): - if 'converge' in data['provisioner']['playbooks'].keys(): - return data['provisioner']['playbooks']['converge'] + if "playbooks" in data["provisioner"].keys(): + if "converge" in data["provisioner"]["playbooks"].keys(): + return data["provisioner"]["playbooks"]["converge"] else: - return ' '.join(map(str,glob.glob('converge.*'))) + return os.path.join(playbooks_path, "converge.yml") + def test_ssh_config(host): for vars in read_playbook(get_playbook()): - assert host.file(vars['ssh_bastion_confing__name']).exists - assert host.file(vars['ssh_bastion_confing__name']).is_file + assert host.file(vars["ssh_bastion_confing__name"]).exists + assert host.file(vars["ssh_bastion_confing__name"]).is_file diff --git a/roles/bootstrap-os/molecule/default/molecule.yml b/roles/bootstrap-os/molecule/default/molecule.yml index 3e89ec26d..76e5b7a94 100644 --- a/roles/bootstrap-os/molecule/default/molecule.yml +++ b/roles/bootstrap-os/molecule/default/molecule.yml @@ -1,9 +1,7 @@ --- +role_name_check: 1 dependency: name: galaxy -lint: | - set -e - yamllint -c ../../.yamllint . driver: name: vagrant provider: @@ -13,30 +11,38 @@ platforms: box: generic/ubuntu2004 cpus: 1 memory: 512 + provider_options: + driver: kvm - name: ubuntu22 box: generic/ubuntu2204 cpus: 1 memory: 1024 + provider_options: + driver: kvm - name: centos7 box: centos/7 cpus: 1 memory: 512 + provider_options: + driver: kvm - name: almalinux8 box: almalinux/8 cpus: 1 memory: 512 + provider_options: + driver: kvm - name: debian10 box: generic/debian10 cpus: 1 memory: 512 + provider_options: + driver: kvm provisioner: name: ansible config_options: defaults: callbacks_enabled: profile_tasks timeout: 120 - lint: - name: ansible-lint inventory: group_vars: all: @@ -45,5 +51,3 @@ provisioner: comment: My test comment verifier: name: testinfra - lint: - name: flake8 diff --git a/roles/container-engine/containerd/molecule/default/molecule.yml b/roles/container-engine/containerd/molecule/default/molecule.yml index 009b5aabb..4c5c48f0f 100644 --- a/roles/container-engine/containerd/molecule/default/molecule.yml +++ b/roles/container-engine/containerd/molecule/default/molecule.yml @@ -1,11 +1,9 @@ --- +role_name_check: 1 driver: name: vagrant provider: name: libvirt -lint: | - set -e - yamllint -c ../../../.yamllint . platforms: - name: ubuntu20 box: generic/ubuntu2004 @@ -15,6 +13,8 @@ platforms: - kube_control_plane - kube_node - k8s_cluster + provider_options: + driver: kvm - name: debian11 box: generic/debian11 cpus: 1 @@ -23,6 +23,8 @@ platforms: - kube_control_plane - kube_node - k8s_cluster + provider_options: + driver: kvm - name: almalinux8 box: almalinux/8 cpus: 1 @@ -31,6 +33,8 @@ platforms: - kube_control_plane - kube_node - k8s_cluster + provider_options: + driver: kvm provisioner: name: ansible env: @@ -39,11 +43,5 @@ provisioner: defaults: callbacks_enabled: profile_tasks timeout: 120 - lint: - name: ansible-lint - options: - c: ../../../.ansible-lint verifier: name: testinfra - lint: - name: flake8 diff --git a/roles/container-engine/cri-dockerd/molecule/default/molecule.yml b/roles/container-engine/cri-dockerd/molecule/default/molecule.yml index c82ddba9d..82cb778ec 100644 --- a/roles/container-engine/cri-dockerd/molecule/default/molecule.yml +++ b/roles/container-engine/cri-dockerd/molecule/default/molecule.yml @@ -1,13 +1,9 @@ --- +role_name_check: 1 driver: name: vagrant provider: name: libvirt - options: - driver: kvm -lint: | - set -e - yamllint -c ../../../.yamllint . platforms: - name: almalinux8 box: almalinux/8 @@ -16,6 +12,8 @@ platforms: nested: true groups: - kube_control_plane + provider_options: + driver: kvm - name: ubuntu20 box: generic/ubuntu2004 cpus: 1 @@ -23,6 +21,8 @@ platforms: nested: true groups: - kube_control_plane + provider_options: + driver: kvm provisioner: name: ansible env: @@ -31,15 +31,9 @@ provisioner: defaults: callbacks_enabled: profile_tasks timeout: 120 - lint: - name: ansible-lint - options: - c: ../../../.ansible-lint inventory: group_vars: all: become: true verifier: name: testinfra - lint: - name: flake8 diff --git a/roles/container-engine/cri-o/molecule/default/molecule.yml b/roles/container-engine/cri-o/molecule/default/molecule.yml index e35014954..d8742e17f 100644 --- a/roles/container-engine/cri-o/molecule/default/molecule.yml +++ b/roles/container-engine/cri-o/molecule/default/molecule.yml @@ -1,11 +1,9 @@ --- +role_name_check: 1 driver: name: vagrant provider: name: libvirt -lint: | - set -e - yamllint -c ../../../.yamllint . platforms: - name: ubuntu20 box: generic/ubuntu2004 @@ -15,6 +13,8 @@ platforms: - kube_control_plane - kube_node - k8s_cluster + provider_options: + driver: kvm - name: almalinux8 box: almalinux/8 cpus: 2 @@ -23,6 +23,8 @@ platforms: - kube_control_plane - kube_node - k8s_cluster + provider_options: + driver: kvm - name: fedora box: fedora/36-cloud-base cpus: 2 @@ -31,6 +33,8 @@ platforms: - kube_control_plane - kube_node - k8s_cluster + provider_options: + driver: kvm - name: debian10 box: generic/debian10 cpus: 2 @@ -39,6 +43,8 @@ platforms: - kube_control_plane - kube_node - k8s_cluster + provider_options: + driver: kvm provisioner: name: ansible env: @@ -47,11 +53,5 @@ provisioner: defaults: callbacks_enabled: profile_tasks timeout: 120 - lint: - name: ansible-lint - options: - c: ../../../.ansible-lint verifier: name: testinfra - lint: - name: flake8 diff --git a/roles/container-engine/gvisor/molecule/default/molecule.yml b/roles/container-engine/gvisor/molecule/default/molecule.yml index 5c3a7e175..9ba192719 100644 --- a/roles/container-engine/gvisor/molecule/default/molecule.yml +++ b/roles/container-engine/gvisor/molecule/default/molecule.yml @@ -1,13 +1,9 @@ --- +role_name_check: 1 driver: name: vagrant provider: name: libvirt - options: - driver: kvm -lint: | - set -e - yamllint -c ../../../.yamllint . platforms: - name: ubuntu20 box: generic/ubuntu2004 @@ -16,6 +12,8 @@ platforms: nested: true groups: - kube_control_plane + provider_options: + driver: kvm - name: almalinux8 box: almalinux/8 cpus: 1 @@ -23,6 +21,8 @@ platforms: nested: true groups: - kube_control_plane + provider_options: + driver: kvm provisioner: name: ansible env: @@ -31,15 +31,9 @@ provisioner: defaults: callbacks_enabled: profile_tasks timeout: 120 - lint: - name: ansible-lint - options: - c: ../../../.ansible-lint inventory: group_vars: all: become: true verifier: name: testinfra - lint: - name: flake8 diff --git a/roles/container-engine/kata-containers/molecule/default/molecule.yml b/roles/container-engine/kata-containers/molecule/default/molecule.yml index dd2b24751..8eaa5d7b8 100644 --- a/roles/container-engine/kata-containers/molecule/default/molecule.yml +++ b/roles/container-engine/kata-containers/molecule/default/molecule.yml @@ -1,13 +1,9 @@ --- +role_name_check: 1 driver: name: vagrant provider: name: libvirt - options: - driver: kvm -lint: | - set -e - yamllint -c ../../../.yamllint . platforms: - name: ubuntu20 box: generic/ubuntu2004 @@ -16,6 +12,8 @@ platforms: nested: true groups: - kube_control_plane + provider_options: + driver: kvm - name: ubuntu22 box: generic/ubuntu2204 cpus: 1 @@ -23,6 +21,8 @@ platforms: nested: true groups: - kube_control_plane + provider_options: + driver: kvm provisioner: name: ansible env: @@ -31,15 +31,9 @@ provisioner: defaults: callbacks_enabled: profile_tasks timeout: 120 - lint: - name: ansible-lint - options: - c: ../../../.ansible-lint inventory: group_vars: all: become: true verifier: name: testinfra - lint: - name: flake8 diff --git a/roles/container-engine/youki/molecule/default/molecule.yml b/roles/container-engine/youki/molecule/default/molecule.yml index 5c3a7e175..9ba192719 100644 --- a/roles/container-engine/youki/molecule/default/molecule.yml +++ b/roles/container-engine/youki/molecule/default/molecule.yml @@ -1,13 +1,9 @@ --- +role_name_check: 1 driver: name: vagrant provider: name: libvirt - options: - driver: kvm -lint: | - set -e - yamllint -c ../../../.yamllint . platforms: - name: ubuntu20 box: generic/ubuntu2004 @@ -16,6 +12,8 @@ platforms: nested: true groups: - kube_control_plane + provider_options: + driver: kvm - name: almalinux8 box: almalinux/8 cpus: 1 @@ -23,6 +21,8 @@ platforms: nested: true groups: - kube_control_plane + provider_options: + driver: kvm provisioner: name: ansible env: @@ -31,15 +31,9 @@ provisioner: defaults: callbacks_enabled: profile_tasks timeout: 120 - lint: - name: ansible-lint - options: - c: ../../../.ansible-lint inventory: group_vars: all: become: true verifier: name: testinfra - lint: - name: flake8 diff --git a/tests/requirements-2.11.txt b/tests/requirements-2.11.txt deleted file mode 100644 index 4b2c06004..000000000 --- a/tests/requirements-2.11.txt +++ /dev/null @@ -1,11 +0,0 @@ --r ../requirements-2.11.txt -ansible-lint==5.4.0 -apache-libcloud==2.2.1 -ara[server]==1.6.1 -dopy==0.3.7 -molecule==3.0.6 -molecule-vagrant==0.3 -python-vagrant==0.5.15 -testinfra==5.2.2 -tox==3.11.1 -yamllint==1.19.0 diff --git a/tests/requirements-2.12.txt b/tests/requirements-2.12.txt deleted file mode 100644 index 6b0d6220b..000000000 --- a/tests/requirements-2.12.txt +++ /dev/null @@ -1,11 +0,0 @@ --r ../requirements-2.12.txt -ansible-lint==5.4.0 -apache-libcloud==2.2.1 -ara[server]==1.6.1 -dopy==0.3.7 -molecule==3.0.6 -molecule-vagrant==0.3 -python-vagrant==0.5.15 -testinfra==5.2.2 -tox==3.11.1 -yamllint==1.19.0 diff --git a/tests/requirements.txt b/tests/requirements.txt deleted file mode 120000 index ac782c9e7..000000000 --- a/tests/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -requirements-2.12.txt \ No newline at end of file diff --git a/tests/requirements.txt b/tests/requirements.txt new file mode 100644 index 000000000..e3c4482d7 --- /dev/null +++ b/tests/requirements.txt @@ -0,0 +1,11 @@ +-r ../requirements.txt +ansible-lint==5.4.0 +apache-libcloud==3.7.0 +ara[server]==1.6.1 +dopy==0.3.7 +molecule==5.0.1 +molecule-plugins[vagrant]==23.4.1 +python-vagrant==1.0.0 +pytest-testinfra==7.0.0 +tox==4.5.1 +yamllint==1.31.0 diff --git a/tests/scripts/testcases_prepare.sh b/tests/scripts/testcases_prepare.sh index ff27561a4..38191cebd 100755 --- a/tests/scripts/testcases_prepare.sh +++ b/tests/scripts/testcases_prepare.sh @@ -1,10 +1,8 @@ #!/bin/bash set -euxo pipefail -: ${ANSIBLE_MAJOR_VERSION:=2.12} - /usr/bin/python -m pip uninstall -y ansible ansible-base ansible-core -/usr/bin/python -m pip install -r tests/requirements-${ANSIBLE_MAJOR_VERSION}.txt +/usr/bin/python -m pip install -r tests/requirements.txt mkdir -p /.ssh mkdir -p cluster-dump mkdir -p $HOME/.ssh