From: Andrew Schoen Date: Wed, 22 Aug 2018 18:40:41 +0000 (-0400) Subject: ceph-volume: run tests without waiting on ceph repos X-Git-Tag: v12.2.8~4^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2dfde1a7d1ceee65bcb18fad399e53450475dbd5;p=ceph.git ceph-volume: run tests without waiting on ceph repos This provides a new playbook that installs ceph on all nodes and generates the ceph config. Then it will rsync ceph-volume from the control node, or jenkins slave, to all testing vms before completing the deployment. This means we can run tests on PRs without waiting for repos to be built for the branch in the PR. Signed-off-by: Andrew Schoen (cherry picked from commit 6d712ef959f7ea5385bc6bf9b9ade60662940369) --- diff --git a/src/ceph-volume/ceph_volume/tests/functional/batch/tox.ini b/src/ceph-volume/ceph_volume/tests/functional/batch/tox.ini index c36a70d0c938..37a9c1819ab3 100644 --- a/src/ceph-volume/ceph_volume/tests/functional/batch/tox.ini +++ b/src/ceph-volume/ceph_volume/tests/functional/batch/tox.ini @@ -7,6 +7,7 @@ whitelist_externals = vagrant bash git + cp passenv=* setenv= ANSIBLE_SSH_ARGS = -F {changedir}/vagrant_ssh_config @@ -36,8 +37,10 @@ commands= vagrant up {env:VAGRANT_UP_FLAGS:"--no-provision"} {posargs:--provider=virtualbox} bash {toxinidir}/../scripts/generate_ssh_config.sh {changedir} + cp {toxinidir}/../playbooks/deploy.yml {envdir}/tmp/ceph-ansible + # use ceph-ansible to deploy a ceph cluster on the vms - ansible-playbook -vv -i {changedir}/hosts {envdir}/tmp/ceph-ansible/site.yml.sample --extra-vars "fetch_directory={changedir}/fetch ceph_dev_branch={env:CEPH_DEV_BRANCH:master} ceph_dev_sha1={env:CEPH_DEV_SHA1:latest}" + ansible-playbook -vv -i {changedir}/hosts {envdir}/tmp/ceph-ansible/deploy.yml --extra-vars "fetch_directory={changedir}/fetch ceph_dev_branch={env:CEPH_DEV_BRANCH:master} ceph_dev_sha1={env:CEPH_DEV_SHA1:latest} toxinidir={toxinidir}" # prepare nodes for testing with testinfra ansible-playbook -vv -i {changedir}/hosts {envdir}/tmp/ceph-ansible/tests/functional/setup.yml diff --git a/src/ceph-volume/ceph_volume/tests/functional/lvm/tox.ini b/src/ceph-volume/ceph_volume/tests/functional/lvm/tox.ini index a12bcee316af..9d0f75db0eac 100644 --- a/src/ceph-volume/ceph_volume/tests/functional/lvm/tox.ini +++ b/src/ceph-volume/ceph_volume/tests/functional/lvm/tox.ini @@ -7,6 +7,7 @@ whitelist_externals = vagrant bash git + cp passenv=* setenv= ANSIBLE_SSH_ARGS = -F {changedir}/vagrant_ssh_config @@ -53,8 +54,10 @@ commands= # ad-hoc/local test setup for lvm ansible-playbook -vv -i {changedir}/hosts {changedir}/setup.yml + cp {toxinidir}/../playbooks/deploy.yml {envdir}/tmp/ceph-ansible + # use ceph-ansible to deploy a ceph cluster on the vms - ansible-playbook -vv -i {changedir}/hosts {envdir}/tmp/ceph-ansible/site.yml.sample --extra-vars "fetch_directory={changedir}/fetch ceph_dev_branch={env:CEPH_DEV_BRANCH:master} ceph_dev_sha1={env:CEPH_DEV_SHA1:latest}" + ansible-playbook -vv -i {changedir}/hosts {envdir}/tmp/ceph-ansible/deploy.yml --extra-vars "fetch_directory={changedir}/fetch ceph_dev_branch={env:CEPH_DEV_BRANCH:master} ceph_dev_sha1={env:CEPH_DEV_SHA1:latest} toxinidir={toxinidir}" # prepare nodes for testing with testinfra ansible-playbook -vv -i {changedir}/hosts {envdir}/tmp/ceph-ansible/tests/functional/setup.yml diff --git a/src/ceph-volume/ceph_volume/tests/functional/playbooks/deploy.yml b/src/ceph-volume/ceph_volume/tests/functional/playbooks/deploy.yml new file mode 100644 index 000000000000..6561e6e51d42 --- /dev/null +++ b/src/ceph-volume/ceph_volume/tests/functional/playbooks/deploy.yml @@ -0,0 +1,121 @@ +--- +# Defines deployment design and assigns role to server groups + +- hosts: + - mons + - osds + - mgrs + + gather_facts: false + any_errors_fatal: true + become: true + + tags: + - always + + vars: + delegate_facts_host: True + + pre_tasks: + # If we can't get python2 installed before any module is used we will fail + # so just try what we can to get it installed + - name: check for python2 + stat: + path: /usr/bin/python + ignore_errors: yes + register: systempython2 + + - name: install python2 for debian based systems + raw: sudo apt-get -y install python-simplejson + ignore_errors: yes + when: + - systempython2.stat is undefined or systempython2.stat.exists == false + + - name: install python2 for fedora + raw: sudo dnf -y install python creates=/usr/bin/python + ignore_errors: yes + when: + - systempython2.stat is undefined or systempython2.stat.exists == false + + - name: install python2 for opensuse + raw: sudo zypper -n install python-base creates=/usr/bin/python2.7 + ignore_errors: yes + when: + - systempython2.stat is undefined or systempython2.stat.exists == false + + - name: gather facts + setup: + when: + - not delegate_facts_host | bool + + - name: gather and delegate facts + setup: + delegate_to: "{{ item }}" + delegate_facts: True + with_items: "{{ groups['all'] }}" + run_once: true + when: + - delegate_facts_host | bool + + - name: install required packages for fedora > 23 + raw: sudo dnf -y install python2-dnf libselinux-python ntp + when: + - ansible_distribution == 'Fedora' + - ansible_distribution_major_version|int >= 23 + + roles: + - ceph-defaults + - ceph-validate + +- hosts: + - mons + - osds + - mgrs + gather_facts: false + become: True + roles: + - role: ceph-defaults + tags: ['ceph_update_config'] + - role: ceph-common + - role: ceph-config + tags: ['ceph_update_config'] + +- hosts: mons + gather_facts: false + become: True + roles: + - role: ceph-defaults + - role: ceph-common + - role: ceph-mon + +- hosts: mgrs + gather_facts: false + become: True + roles: + - role: ceph-defaults + - role: ceph-common + - role: ceph-mgr + +- hosts: osds + gather_facts: false + become: True + tasks: + - name: rsync ceph-volume to test nodes on centos + synchronize: + src: "{{ toxinidir}}/../../../../ceph_volume" + dest: "/usr/lib/python2.7/site-packages" + when: ansible_os_family == "RedHat" + + - name: rsync ceph-volume to test nodes on ubuntu + synchronize: + src: "{{ toxinidir}}/../../../../ceph_volume" + dest: "/usr/lib/python2.7/dist-packages" + when: ansible_os_family == "Ubuntu" + +- hosts: osds + gather_facts: false + become: True + roles: + - role: ceph-defaults + - role: ceph-common + - role: ceph-osd diff --git a/src/ceph-volume/ceph_volume/tests/functional/simple/tox.ini b/src/ceph-volume/ceph_volume/tests/functional/simple/tox.ini index 1f2963e7216a..e9e80079feb7 100644 --- a/src/ceph-volume/ceph_volume/tests/functional/simple/tox.ini +++ b/src/ceph-volume/ceph_volume/tests/functional/simple/tox.ini @@ -8,6 +8,7 @@ whitelist_externals = bash git sleep + cp passenv=* setenv= ANSIBLE_SSH_ARGS = -F {changedir}/vagrant_ssh_config @@ -44,8 +45,10 @@ commands= vagrant up --no-provision {posargs:--provider=virtualbox} bash {toxinidir}/../scripts/generate_ssh_config.sh {changedir} + cp {toxinidir}/../playbooks/deploy.yml {envdir}/tmp/ceph-ansible + # use ceph-ansible to deploy a ceph cluster on the vms - ansible-playbook -vv -i {changedir}/hosts {envdir}/tmp/ceph-ansible/site.yml.sample --extra-vars "fetch_directory={changedir}/fetch ceph_dev_branch={env:CEPH_DEV_BRANCH:master} ceph_dev_sha1={env:CEPH_DEV_SHA1:latest}" + ansible-playbook -vv -i {changedir}/hosts {envdir}/tmp/ceph-ansible/deploy.yml --extra-vars "fetch_directory={changedir}/fetch ceph_dev_branch={env:CEPH_DEV_BRANCH:master} ceph_dev_sha1={env:CEPH_DEV_SHA1:latest} toxinidir={toxinidir}" # prepare nodes for testing with testinfra ansible-playbook -vv -i {changedir}/hosts {envdir}/tmp/ceph-ansible/tests/functional/setup.yml