diff --git a/.travis.yml b/.travis.yml index e7bf93b..0253d7d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,34 +1,49 @@ ---- -language: python -python: "2.7" - +sudo: required env: - - SITE=test.yml + - > + container_id=$(mktemp) + distribution=centos + version=7 + init=/usr/lib/systemd/systemd + run_opts="--privileged --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro" + - > + container_id=$(mktemp) + distribution=ubuntu + version=14.04 + init=/sbin/init + run_opts="" + +services: + - docker before_install: - - sudo apt-get update -qq - - sudo apt-get install -y curl - -install: - # Install Ansible. - - pip install ansible - - # Add ansible.cfg to pick up roles path. - - "{ echo '[defaults]'; echo 'roles_path = ../'; } >> ansible.cfg" + - sudo apt-get update + # Pull container + - sudo docker pull ${distribution}:${version} + # Customize container + - sudo docker build --rm=true --file=tests/Dockerfile.${distribution} --tag=${distribution}:ansible tests script: - # Check the role/playbook's syntax. - - "ansible-playbook -i tests/inventory tests/$SITE --syntax-check" + # + # Run test playbook + # - # Run the role/playbook with ansible-playbook. - - "ansible-playbook -i tests/inventory tests/$SITE --connection=local --sudo" + # Run container in detached state + - sudo docker run --detach --volume="${PWD}":/etc/ansible/roles/role_under_test:ro ${run_opts} ${distribution}:ansible "${init}" > "${container_id}" - # Run the role/playbook again, checking to make sure it's idempotent. + # Syntax check + - sudo docker exec --tty "$(cat ${container_id})" env TERM=xterm ansible-playbook /etc/ansible/roles/role_under_test/tests/test.yml --syntax-check + # Test role + - sudo docker exec --tty "$(cat ${container_id})" env TERM=xterm ansible-playbook /etc/ansible/roles/role_under_test/tests/test.yml + # Idempotence test - > - ansible-playbook -i tests/inventory tests/$SITE --connection=local --sudo + sudo docker exec "$(cat ${container_id})" ansible-playbook /etc/ansible/roles/role_under_test/tests/test.yml | grep -q 'changed=0.*failed=0' && (echo 'Idempotence test: pass' && exit 0) || (echo 'Idempotence test: fail' && exit 1) - # Request a page via Apache, to make sure Apache is running and responds. - - "curl http://localhost/" + # Clean up + - sudo docker stop "$(cat ${container_id})" + +notifications: + email: false diff --git a/tests/Dockerfile.centos b/tests/Dockerfile.centos new file mode 100644 index 0000000..888d502 --- /dev/null +++ b/tests/Dockerfile.centos @@ -0,0 +1,23 @@ +FROM centos:7 +# Install systemd -- See https://hub.docker.com/_/centos/ +RUN yum -y swap -- remove fakesystemd -- install systemd systemd-libs +RUN yum -y update; yum clean all; \ +(cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done); \ +rm -f /lib/systemd/system/multi-user.target.wants/*; \ +rm -f /etc/systemd/system/*.wants/*; \ +rm -f /lib/systemd/system/local-fs.target.wants/*; \ +rm -f /lib/systemd/system/sockets.target.wants/*udev*; \ +rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \ +rm -f /lib/systemd/system/basic.target.wants/*; \ +rm -f /lib/systemd/system/anaconda.target.wants/*; +# Install Ansible +RUN yum -y install epel-release +RUN yum -y install git ansible sudo +RUN yum clean all +# Disable requiretty +RUN sed -i -e 's/^\(Defaults\s*requiretty\)/#--- \1/' /etc/sudoers +# Install Ansible inventory file +RUN echo -e '[local]\nlocalhost ansible_connection=local' > /etc/ansible/hosts +VOLUME [ "/sys/fs/cgroup" ] +CMD ["/usr/sbin/init"] + diff --git a/tests/Dockerfile.ubuntu b/tests/Dockerfile.ubuntu new file mode 100644 index 0000000..3dd5383 --- /dev/null +++ b/tests/Dockerfile.ubuntu @@ -0,0 +1,9 @@ +FROM ubuntu:14.04 +# Install Ansible +RUN apt-get install -y software-properties-common git +RUN apt-add-repository -y ppa:ansible/ansible +RUN apt-get update +RUN apt-get install -y ansible +# Install Ansible inventory file +RUN echo "[local]\nlocalhost ansible_connection=local" > /etc/ansible/hosts + diff --git a/tests/inventory b/tests/inventory deleted file mode 100644 index 2fbb50c..0000000 --- a/tests/inventory +++ /dev/null @@ -1 +0,0 @@ -localhost diff --git a/tests/test.yml b/tests/test.yml index 854cb52..1edb57a 100644 --- a/tests/test.yml +++ b/tests/test.yml @@ -1,5 +1,11 @@ --- -- hosts: localhost - remote_user: root +- hosts: all + vars: + apache_listen_port_ssl: 443 + apache_create_vhosts: true + apache_vhosts_filename: "vhosts.conf" + apache_vhosts: + - servername: "example.com" + documentroot: "/var/www/vhosts/example_com" roles: - - ansible-role-apache + - role_under_test