summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.travis.yml55
-rw-r--r--tests/Dockerfile.centos-615
-rw-r--r--tests/Dockerfile.centos-727
-rw-r--r--tests/Dockerfile.ubuntu-12.0411
-rw-r--r--tests/Dockerfile.ubuntu-14.0411
-rw-r--r--tests/inventory1
-rw-r--r--tests/test.yml6
7 files changed, 104 insertions, 22 deletions
diff --git a/.travis.yml b/.travis.yml
index 11a7369..668ba3b 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,34 +1,55 @@
---
sudo: required
-language: python
-python: "2.7"
env:
- - SITE=test.yml
+ - distribution: centos
+ version: 6
+ init: /sbin/init
+ run_opts: ""
+ - distribution: centos
+ version: 7
+ init: /usr/lib/systemd/systemd
+ run_opts: "--privileged --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro"
+ - distribution: ubuntu
+ version: 14.04
+ init: /sbin/init
+ run_opts: ""
+ - distribution: ubuntu
+ version: 12.04
+ init: /sbin/init
+ run_opts: ""
+
+services:
+ - docker
before_install:
- - sudo apt-get update -qq
-
-install:
- # Install Ansible.
- - pip install ansible
-
- # Add ansible.cfg to pick up roles path.
- - "{ echo '[defaults]'; echo 'roles_path = ../'; } >> ansible.cfg"
+ # Pull container
+ - 'sudo docker pull ${distribution}:${version}'
+ # Customize container
+ - 'sudo docker build --rm=true --file=tests/Dockerfile.${distribution}-${version} --tag=${distribution}-${version}:ansible tests'
script:
- # Check the role/playbook's syntax.
- - "ansible-playbook -i tests/inventory tests/$SITE --syntax-check"
+ - container_id=$(mktemp)
+ # Run container in detached state
+ - 'sudo docker run --detach -p 8025:8025 --volume="${PWD}":/etc/ansible/roles/role_under_test:ro ${run_opts} ${distribution}-${version}:ansible "${init}" > "${container_id}"'
- # Run the role/playbook with ansible-playbook.
- - "ansible-playbook -i tests/inventory tests/$SITE --connection=local --sudo"
+ # Ansible 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'
- # Run the role/playbook again, checking to make sure it's idempotent.
+ # Test role.
+ - 'sudo docker exec --tty "$(cat ${container_id})" env TERM=xterm ansible-playbook /etc/ansible/roles/role_under_test/tests/test.yml'
+
+ # Test role idempotence.
+ - idempotence=$(mktemp)
+ - sudo docker exec "$(cat ${container_id})" ansible-playbook /etc/ansible/roles/role_under_test/tests/test.yml | tee -a ${idempotence}
- >
- ansible-playbook -i tests/inventory tests/$SITE --connection=local --sudo
+ tail ${idempotence}
| grep -q 'changed=0.*failed=0'
&& (echo 'Idempotence test: pass' && exit 0)
|| (echo 'Idempotence test: fail' && exit 1)
+ # Clean up
+ - 'sudo docker stop "$(cat ${container_id})"'
+
notifications:
webhooks: https://galaxy.ansible.com/api/v1/notifications/
diff --git a/tests/Dockerfile.centos-6 b/tests/Dockerfile.centos-6
new file mode 100644
index 0000000..4a4e7b8
--- /dev/null
+++ b/tests/Dockerfile.centos-6
@@ -0,0 +1,15 @@
+FROM centos:6
+
+# Install Ansible
+RUN yum -y update; yum clean all;
+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
+
+CMD ["/usr/sbin/init"]
diff --git a/tests/Dockerfile.centos-7 b/tests/Dockerfile.centos-7
new file mode 100644
index 0000000..8aa0654
--- /dev/null
+++ b/tests/Dockerfile.centos-7
@@ -0,0 +1,27 @@
+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-12.04 b/tests/Dockerfile.ubuntu-12.04
new file mode 100644
index 0000000..d0c130c
--- /dev/null
+++ b/tests/Dockerfile.ubuntu-12.04
@@ -0,0 +1,11 @@
+FROM ubuntu:12.04
+RUN apt-get update
+
+# Install Ansible
+RUN apt-get install -y software-properties-common python-software-properties 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/Dockerfile.ubuntu-14.04 b/tests/Dockerfile.ubuntu-14.04
new file mode 100644
index 0000000..ca33287
--- /dev/null
+++ b/tests/Dockerfile.ubuntu-14.04
@@ -0,0 +1,11 @@
+FROM ubuntu:14.04
+RUN apt-get update
+
+# 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 34c9773..ddde48f 100644
--- a/tests/test.yml
+++ b/tests/test.yml
@@ -1,10 +1,8 @@
----
-- hosts: localhost
- remote_user: root
+- hosts: all
vars:
ntp_enabled: false
ntp_manage_config: true
roles:
- - ansible-role-ntp
+ - role_under_test