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 +  | 
