From 76ca77d16b2849d1b5dc8dd6126fb1a8c6f3042d Mon Sep 17 00:00:00 2001 From: Markos Chandras Date: Mon, 24 Apr 2017 15:58:13 +0100 Subject: [PATCH] Add SUSE support Add support for SUSE based distributions. We also update the bindep.txt, run_tests.sh, .gitignore, tests-repo-clone.sh and Vagrantfile files from the openstack-ansible-tests repository. Change-Id: I5a2b3cae0ed325abb3920e9a684d25898df6027d --- .gitignore | 5 +-- Vagrantfile | 30 ++++++++++++--- bindep.txt | 33 +++++++++++----- meta/main.yml | 3 ++ run_tests.sh | 77 ++++++++++++------------------------- tasks/repo_cacher.yml | 23 +++++++++++ tasks/repo_post_install.yml | 4 +- tests/tests-repo-clone.sh | 20 +++++++--- vars/debian.yml | 2 + vars/redhat.yml | 2 + vars/suse.yml | 34 ++++++++++++++++ 11 files changed, 155 insertions(+), 78 deletions(-) create mode 100644 vars/suse.yml diff --git a/.gitignore b/.gitignore index 21adf3c..e0952ec 100644 --- a/.gitignore +++ b/.gitignore @@ -61,9 +61,8 @@ ChangeLog releasenotes/build # Test temp files -tests/plugins -tests/playbooks -tests/test.retry +tests/common +tests/*.retry # Vagrant artifacts .vagrant diff --git a/Vagrantfile b/Vagrantfile index 40fe913..0618ee2 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -1,8 +1,26 @@ Vagrant.configure(2) do |config| - config.vm.box = "ubuntu/xenial64" - config.vm.provision "shell", inline: <<-SHELL - sudo su - - cd /vagrant - ./run_tests.sh - SHELL + config.vm.provider "virtualbox" do |v| + v.memory = 2048 + v.cpus = 2 + end + + config.vm.provision "shell", + privileged: false, + inline: <<-SHELL + cd /vagrant + ./run_tests.sh + SHELL + + config.vm.define "ubuntu1604" do |xenial| + xenial.vm.box = "ubuntu/xenial64" + end + + config.vm.define "opensuse422" do |leap422| + leap422.vm.box = "opensuse/openSUSE-42.2-x86_64" + end + + config.vm.define "centos7" do |centos7| + centos7.vm.box = "centos/7" + end + end diff --git a/bindep.txt b/bindep.txt index 6cc0b22..dfe61db 100644 --- a/bindep.txt +++ b/bindep.txt @@ -3,12 +3,24 @@ # # See the following for details: # - http://docs.openstack.org/infra/bindep/ -# - https://github.com/openstack-infra/bindep/ +# - https://git.openstack.org/cgit/openstack-infra/bindep # # Even if the role does not make use of this facility, it # is better to have this file empty, otherwise OpenStack-CI # will fall back to installing its default packages which # will potentially be detrimental to the tests executed. +# +# Note: +# This file is maintained in the openstack-ansible-tests repository. +# https://git.openstack.org/cgit/openstack/openstack-ansible-tests/tree/bindep.txt +# If you need to remove or add extra dependencies, you should modify +# the central file instead and once your change is accepted then update +# this file as well. The purpose of this file is to ensure that Python and +# Ansible have all their necessary binary requirements on the test host before +# tox executes. Any binary requirements needed by services/roles should be +# installed by those roles in their applicable package install tasks, not through +# using this file. +# # Base requirements for Ubuntu build-essential [platform:dpkg] @@ -18,24 +30,27 @@ libffi-dev [platform:dpkg] python2.7 [platform:dpkg] python-dev [platform:dpkg] -# Base requirements for CentOS +# Base requirements for RPM distros gcc [platform:rpm] gcc-c++ [platform:rpm] git [platform:rpm] -python-devel [platform:rpm] libffi-devel [platform:rpm] openssl-devel [platform:rpm] +python-devel [platform:rpm] # For SELinux -libselinux-python [platform:rpm] +libselinux-python [platform:redhat] +libsemanage-python [platform:redhat] # For SSL SNI support -python-pyasn1 [platform:dpkg] -python-openssl [platform:dpkg] +python-pyasn1 [platform:dpkg platform:suse] +python-openssl [platform:dpkg platform:suse] python-ndg-httpsclient [platform:ubuntu] -python2-pyasn1 [platform:rpm] -python2-pyOpenSSL [platform:rpm] -python-ndg_httpsclient [platform:rpm] +python2-pyasn1 [platform:redhat] +python2-pyOpenSSL [platform:redhat] +python-pyOpenSSL [platform:suse] +python-ndg_httpsclient [platform:redhat] +python-ndg-httpsclient [platform:suse] # Required for compressing collected log files in CI gzip diff --git a/meta/main.yml b/meta/main.yml index 850376d..4ac4f49 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -26,6 +26,9 @@ galaxy_info: - name: EL versions: - 7 + - name: opensuse + versions: + - all categories: - cloud - python diff --git a/run_tests.sh b/run_tests.sh index 94ccf8b..dca488c 100755 --- a/run_tests.sh +++ b/run_tests.sh @@ -13,62 +13,35 @@ # See the License for the specific language governing permissions and # limitations under the License. -set -xeuo pipefail +set -xeu -FUNCTIONAL_TEST=${FUNCTIONAL_TEST:-true} +source /etc/os-release || source /usr/lib/os-release -# Install python2 for Ubuntu 16.04 and CentOS 7 -if which apt-get; then - sudo apt-get update && sudo apt-get install -y python -fi +install_pkg_deps() { + pkg_deps="git" -if which yum; then - sudo yum install -y python -fi + case ${ID,,} in + *suse*) pkg_mgr_cmd="zypper -n in" ;; + centos|rhel) pkg_mgr_cmd="yum install -y" ;; + fedora) pkg_mgr_cmd="dnf -y install" ;; + ubuntu|debian) pkg_mgr_cmd="apt-get install -y" ;; + *) echo "unsupported distribution: ${ID,,}"; exit 1 ;; + esac -# Install pip. -if ! which pip; then - curl --silent --show-error --retry 5 \ - https://bootstrap.pypa.io/get-pip.py | sudo python2.7 -fi + eval sudo $pkg_mgr_cmd $pkg_deps +} -# Install bindep and tox with pip. -sudo pip install bindep tox - -# CentOS 7 requires two additional packages: -# redhat-lsb-core - for bindep profile support -# epel-release - required to install python-ndg_httpsclient/python2-pyasn1 -if which yum; then - sudo yum -y install redhat-lsb-core epel-release -fi - -# Get a list of packages to install with bindep. If packages need to be -# installed, bindep exits with an exit code of 1. -BINDEP_PKGS=$(bindep -b -f bindep.txt test || true) -echo "Packages to install: ${BINDEP_PKGS}" - -# Install a list of OS packages provided by bindep. -if which apt-get; then - sudo apt-get update - DEBIAN_FRONTEND=noninteractive \ - sudo apt-get -q --option "Dpkg::Options::=--force-confold" \ - --assume-yes install $BINDEP_PKGS -elif which yum; then - # Don't run yum with an empty list of packages. - # It will fail and cause the script to exit with an error. - if [[ ${#BINDEP_PKGS} > 0 ]]; then - sudo yum install -y $BINDEP_PKGS +git_clone_repo() { + if [[ ! -d tests/common ]]; then + git clone https://git.openstack.org/openstack/openstack-ansible-tests tests/common fi -fi +} -# Loop through each tox environment and run tests. -for tox_env in $(awk -F= '/envlist/ { gsub(",", " "); print $2 }' tox.ini); do - echo "Executing tox environment: ${tox_env}" - if [[ ${tox_env} == ansible-functional ]]; then - if ${FUNCTIONAL_TEST}; then - tox -e ${tox_env} - fi - else - tox -e ${tox_env} - fi -done +install_pkg_deps + +git_clone_repo + +# start executing the main test script +source tests/common/run_tests.sh + +# vim: set ts=4 sw=4 expandtab: diff --git a/tasks/repo_cacher.yml b/tasks/repo_cacher.yml index c588420..7fd0087 100644 --- a/tasks/repo_cacher.yml +++ b/tasks/repo_cacher.yml @@ -24,6 +24,29 @@ tags: - repo_server-install +- name: Enable OBS:Servers:Proxy repository for apt-cacher-ng (SUSE) + zypper_repository: + refresh: yes + name: "OBS:Server:Proxy" + repo: http://download.opensuse.org/repositories/server:/proxy/openSUSE_Leap_{{ ansible_distribution_version }} + register: zypper_repository_added + when: + - ansible_pkg_mgr == 'zypper' + tags: + - repo_server-install + +# NOTE(hwoarang): We need to run this right after we add the repos and +# before we install any packages so it can't be a handler unless we +# move everything to pre_tasks +- name: Refresh zypper repository (SUSE) + command: zypper --gpg-auto-import-keys ref + when: + - ansible_pkg_mgr == 'zypper' + - zypper_repository_added.changed + tags: + - skip_ansible_lint + - repo_server-install + - name: Install repo caching server packages package: name: "{{ item }}" diff --git a/tasks/repo_post_install.yml b/tasks/repo_post_install.yml index d51f85d..fd643ad 100644 --- a/tasks/repo_post_install.yml +++ b/tasks/repo_post_install.yml @@ -172,8 +172,8 @@ owner: "root" group: "root" with_items: - - { src: "git.service.j2", dest: "/lib/systemd/system/git@.service" } - - { src: "git.socket.j2", dest: "/lib/systemd/system/git.socket" } + - { src: "git.service.j2", dest: "{{ systemd_utils_prefix }}/system/git@.service" } + - { src: "git.socket.j2", dest: "{{ systemd_utils_prefix }}/system/git.socket" } when: - ansible_service_mgr == 'systemd' notify: diff --git a/tests/tests-repo-clone.sh b/tests/tests-repo-clone.sh index 619a905..9c793c5 100755 --- a/tests/tests-repo-clone.sh +++ b/tests/tests-repo-clone.sh @@ -34,28 +34,39 @@ export TESTING_HOME=${TESTING_HOME:-$HOME} export WORKING_DIR=${WORKING_DIR:-$(pwd)} export CLONE_UPGRADE_TESTS=${CLONE_UPGRADE_TESTS:-no} -## Main ---------------------------------------------------------------------- +## Functions ----------------------------------------------------------------- + +function create_tests_clonemap { # Prepare the clonemap for zuul-cloner to use -# This is placed here instead of inside the conditional -# to prevent indentation problems. cat > ${TESTING_HOME}/tests-clonemap.yaml << EOF clonemap: - name: openstack/openstack-ansible-tests dest: ${WORKING_DIR}/tests/common EOF +} + +## Main ---------------------------------------------------------------------- + # If zuul-cloner is present, use it so that we # also include any dependent patches from the # tests repo noted in the commit message. if [[ -x /usr/zuul-env/bin/zuul-cloner ]]; then + # Prepare the clonemap for zuul-cloner to use + create_tests_clonemap + + # Execute the clone /usr/zuul-env/bin/zuul-cloner \ --cache-dir /opt/git \ --map ${TESTING_HOME}/tests-clonemap.yaml \ git://git.openstack.org \ openstack/openstack-ansible-tests + # Clean up the clonemap. + rm -f ${TESTING_HOME}/tests-clonemap.yaml + # Alternatively, use a simple git-clone. We do # not re-clone if the directory exists already # to prevent overwriting any local changes which @@ -73,9 +84,6 @@ elif [[ ! -d tests/common ]]; then fi fi -# Clean up the clonemap. -rm -f ${TESTING_HOME}/tests-clonemap.yaml - # If this test set includes an upgrade test, the # previous stable release tests repo must also be # cloned. diff --git a/vars/debian.yml b/vars/debian.yml index 4103a12..b2c06d3 100644 --- a/vars/debian.yml +++ b/vars/debian.yml @@ -13,6 +13,8 @@ # See the License for the specific language governing permissions and # limitations under the License. +systemd_utils_prefix: "/lib/systemd" + repo_nginx_pid: /var/run/nginx.pid git_daemon_path: /usr/lib/git-core/git-daemon diff --git a/vars/redhat.yml b/vars/redhat.yml index 5e03105..3eb6835 100644 --- a/vars/redhat.yml +++ b/vars/redhat.yml @@ -13,6 +13,8 @@ # See the License for the specific language governing permissions and # limitations under the License. +systemd_utils_prefix: "/lib/systemd" + repo_nginx_pid: /run/nginx.pid git_daemon_path: /usr/libexec/git-core/git-daemon diff --git a/vars/suse.yml b/vars/suse.yml new file mode 100644 index 0000000..4a4a647 --- /dev/null +++ b/vars/suse.yml @@ -0,0 +1,34 @@ +--- +# Copyright 2016, Walmart Stores, Inc. +# Copyright 2017, SUSE LINUX GmbH. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +systemd_utils_prefix: "/usr/lib/systemd" + +repo_nginx_pid: /var/run/nginx.pid + +git_daemon_path: /usr/lib/git/git-daemon +rsyncd_service_name: rsyncd + +repo_server_distro_packages: + - git-daemon + - lsyncd + - nginx + - rsync + +repo_pkg_cache_server_distro_packages: + - apt-cacher-ng + +repo_lsyncd_config_file: /etc/lsyncd/lsyncd.conf +repo_lsyncd_defaults_file: /etc/sysconfig/lsyncd