diff options
10 files changed, 282 insertions, 0 deletions
diff --git a/glusterfs.spec.in b/glusterfs.spec.in index 4dc485220fa..3281ee903ee 100644 --- a/glusterfs.spec.in +++ b/glusterfs.spec.in @@ -1107,6 +1107,7 @@ fi %{_prefix}/share/glusterfs/run-tests.sh %{_prefix}/share/glusterfs/tests %exclude %{_prefix}/share/glusterfs/tests/basic/rpm.t +%exclude %{_prefix}/share/glusterfs/tests/vagrant %if ( 0%{!?_without_ocf:1} ) %files resource-agents diff --git a/run-tests-in-vagrant.sh b/run-tests-in-vagrant.sh new file mode 100755 index 00000000000..00ec99a4eb8 --- /dev/null +++ b/run-tests-in-vagrant.sh @@ -0,0 +1,126 @@ +#!/bin/bash + +############################################################################### +# TODO: Provide an option parser; may be getopts. # +# TODO: Allow subset of tests to be executed when VM starts. # +# TODO: Provide option to destroy the VM. # +############################################################################### + +function force_location() +{ + current_dir=$(dirname $0); + + if [ ! -f ${current_dir}/tests/vagrant/vagrant-template/Vagrantfile ]; then + echo "Aborting." + echo + echo "The tests/vagrant subdirectory seems to be missing." + echo + echo "Please correct the problem and try again." + echo + exit 1 + fi +} + +function vagrant_check() +{ + vagrant -v; + + if [ $? -ne 0 ]; then + echo "Aborting" + echo "Vagrant not found. Please install Vagrant and try again." + exit 1 + else + echo "Found Vagrant, continuing...." + echo + fi +} + +function ansible_check() +{ + ansible --version; + + if [ $? -ne 0 ]; then + echo "Aborting" + echo "Ansible not found. Please install Ansible and try again." + exit 1 + else + echo "Found Ansible, continuing...." + echo + fi +} + +force_location + +echo "Testing for Vagrant...." +vagrant_check +echo +echo + +echo "Testing for Ansible...." +ansible_check +echo +echo + +BRANCHNAME=`git rev-parse --abbrev-ref HEAD` +echo "Copying tests/vagrant/vagrant-template dir to tests/vagrant/$BRANCHNAME" +mkdir -p tests/vagrant/$BRANCHNAME +cp -R tests/vagrant/vagrant-template/* tests/vagrant/$BRANCHNAME +echo "Change dir to vagrant dir: tests/vagrant/$BRANCHNAME" +cd tests/vagrant/$BRANCHNAME +echo "Working directory is $PWD" +echo +echo + +echo "Doing vagrant up...." +vagrant up || { echo "vagrant up failed, exiting...."; exit 1; } +echo +echo + + +echo "Vagrant up successfull" +echo +echo + + +vagrant ssh-config > ssh_config + +echo "Copying source code from host machine to VM" +rsync -az -e "ssh -F ssh_config" "../../../." vagrant-testVM:/home/vagrant/glusterfs +#scp -r -F ssh_config "./../../../." vagrant-testVM:/home/vagrant/glusterfs +echo "Copied." +echo +echo + +vagrant ssh -c 'cd /home/vagrant/glusterfs ; ./autogen.sh' -- -t +echo +echo + +vagrant ssh -c 'cd /home/vagrant/glusterfs ; \ + CFLAGS="-g -O0 -Werror -Wall -Wno-error=cpp -Wno-error=maybe-uninitialized" \ + ./configure \ + --prefix=/usr \ + --exec-prefix=/usr \ + --bindir=/usr/bin \ + --sbindir=/usr/sbin \ + --sysconfdir=/etc \ + --datadir=/usr/share \ + --includedir=/usr/include \ + --libdir=/usr/lib64 \ + --libexecdir=/usr/libexec \ + --localstatedir=/var \ + --sharedstatedir=/var/lib \ + --mandir=/usr/share/man \ + --infodir=/usr/share/info \ + --libdir=/usr/lib64 \ + --enable-debug' -- -t +echo +echo + + +vagrant ssh -c 'cd /home/vagrant/glusterfs; sudo make install' -- -t +echo +echo + +vagrant ssh -c 'cd /home/vagrant/glusterfs; sudo ./run-tests.sh' -- -t +echo +echo diff --git a/tests/vagrant/vagrant-template/Vagrantfile b/tests/vagrant/vagrant-template/Vagrantfile new file mode 100644 index 00000000000..fda113f98de --- /dev/null +++ b/tests/vagrant/vagrant-template/Vagrantfile @@ -0,0 +1,50 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +Vagrant.configure("2") do |config| + config.vm.define "vagrant-testVM" do |testvm| + testvm.vm.box = "fedora/23-cloud-base" + testvm.vm.hostname = "vagrant-testVM" + #testvm.ssh.insert_key = false + testvm.vm.synced_folder ".", "/vagrant", disabled: true + + + # Define basic config for VM, memory, cpu, storage pool + testvm.vm.provider "libvirt" do |lv| + lv.storage_pool_name = "default" + lv.memory = 1024 + lv.cpus = 1 + + + # We need a brick partition, lets have a 5G disk for that. + # If you need more bricks, just add more letters to the + # string below. + "b".split("").each do |i| + lv.storage :file, + #:path => "", + #:allow_existing => "", + :device => "vd#{i}", + :size => "5G", + :type => "qcow2", + :bus => "virtio", + :cache => "default" + end + end + + # Let's provision + + # Some packages are required for ansible dnf module to work + # so install them using shell inline + testvm.vm.provision "shell", inline: "sudo dnf install -y python-dnf", run: "always" + testvm.vm.provision "shell", inline: "sudo dnf install -y libselinux-python", run: "always" + testvm.vm.provision "shell", inline: "sudo dnf install -y libsemanage-python", run: "always" + + # Now onto the main provisioning + testvm.vm.provision "ansible", run: "always" do |setup| + setup.verbose = "v" + setup.playbook = "setup.yml" + end + + end +end + diff --git a/tests/vagrant/vagrant-template/roles/daemon-services/tasks/main.yml b/tests/vagrant/vagrant-template/roles/daemon-services/tasks/main.yml new file mode 100644 index 00000000000..98d077b1f2e --- /dev/null +++ b/tests/vagrant/vagrant-template/roles/daemon-services/tasks/main.yml @@ -0,0 +1,3 @@ +--- +- name: stop and disable kernel nfs + service: name=nfs-server state=stopped enabled=no diff --git a/tests/vagrant/vagrant-template/roles/install-pkgs/tasks/main.yml b/tests/vagrant/vagrant-template/roles/install-pkgs/tasks/main.yml new file mode 100644 index 00000000000..a6656b6cbb0 --- /dev/null +++ b/tests/vagrant/vagrant-template/roles/install-pkgs/tasks/main.yml @@ -0,0 +1,76 @@ +--- +- name: install deltarpm + dnf: name=deltarpm state=present + +- name: update system + shell: dnf update -y + +- name: install other packages + dnf: name={{ item }} state=present + with_items: + - attr + - autoconf + - automake + - bison + - cmockery2 + - cmockery2-devel + - cifs-utils + - dbench + - dos2unix + - e2fsprogs + - findutils + - flex + - fuse-devel + - fuse-libs + - gcc + - gdb + - git + - glib2-devel + - hostname + - libacl-devel + - libaio-devel + - libattr-devel + - libibverbs-devel + - librdmacm-devel + - libtool + - libxml2-devel + - lvm2-devel + - make + - man-db + - mock + - net-tools + - nfs-utils + - openssh-server + - openssl-devel + - perl-Test-Harness + - pkgconfig + - procps-ng + - psmisc + - python-devel + - python-devel + - python-eventlet + - python-netifaces + - python-paste-deploy + - python-setuptools + - python-simplejson + - python-sphinx + - python-webob + - pyxattr + - readline-devel + - rpm-build + - screen + - strace + - supervisor + - systemtap-sdt-devel + - sqlite-devel + - samba* + - userspace-rcu-devel + - vim + - wget + - which + - xfsprogs + - yajl-devel + +- name: Erase gluster packages, keep dependencies; we will source install + shell: rpm -ev --nodeps `rpm -qa | grep ^gluster` + ignore_errors: True diff --git a/tests/vagrant/vagrant-template/roles/iptables/tasks/main.yml b/tests/vagrant/vagrant-template/roles/iptables/tasks/main.yml new file mode 100644 index 00000000000..768cb0e8668 --- /dev/null +++ b/tests/vagrant/vagrant-template/roles/iptables/tasks/main.yml @@ -0,0 +1,3 @@ +--- +- name: disable iptables, need to add specific rules later + shell: iptables -F diff --git a/tests/vagrant/vagrant-template/roles/mock-user/tasks/main.yml b/tests/vagrant/vagrant-template/roles/mock-user/tasks/main.yml new file mode 100644 index 00000000000..c8e1209937e --- /dev/null +++ b/tests/vagrant/vagrant-template/roles/mock-user/tasks/main.yml @@ -0,0 +1,3 @@ +--- +- name: Add mock user; required for rpm.t + user: name=mock group=mock diff --git a/tests/vagrant/vagrant-template/roles/prepare-brick/tasks/main.yml b/tests/vagrant/vagrant-template/roles/prepare-brick/tasks/main.yml new file mode 100644 index 00000000000..6b3f6b8d3ea --- /dev/null +++ b/tests/vagrant/vagrant-template/roles/prepare-brick/tasks/main.yml @@ -0,0 +1,6 @@ +--- +- name: Format backend + filesystem: fstype=xfs dev=/dev/vdb + +- name: Add entry to fstab and mount + mount: name=/d src=/dev/vdb fstype=xfs state=mounted diff --git a/tests/vagrant/vagrant-template/roles/selinux/tasks/main.yml b/tests/vagrant/vagrant-template/roles/selinux/tasks/main.yml new file mode 100644 index 00000000000..c9ba9618428 --- /dev/null +++ b/tests/vagrant/vagrant-template/roles/selinux/tasks/main.yml @@ -0,0 +1,3 @@ +--- +- name: Allow gfapi in Samba to bind to other ports than well known smb ports + seboolean: name=samba_load_libgfapi state=yes persistent=yes diff --git a/tests/vagrant/vagrant-template/setup.yml b/tests/vagrant/vagrant-template/setup.yml new file mode 100644 index 00000000000..691c7aff07f --- /dev/null +++ b/tests/vagrant/vagrant-template/setup.yml @@ -0,0 +1,11 @@ +--- +- hosts: all + sudo: true + roles: + - install-pkgs + - prepare-brick + - mock-user + - selinux + - iptables + - daemon-services + |