|
1 | 1 | ---
|
2 |
| -language: python |
3 |
| -python: "2.7" |
| 2 | +sudo: required |
4 | 3 |
|
5 | 4 | env:
|
6 |
| - - SITE=test.yml |
| 5 | + - distribution: centos |
| 6 | + version: 6 |
| 7 | + init: /sbin/init |
| 8 | + run_opts: "" |
| 9 | + playbook: test.yml |
| 10 | + - distribution: centos |
| 11 | + version: 7 |
| 12 | + init: /usr/lib/systemd/systemd |
| 13 | + run_opts: "--privileged --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro" |
| 14 | + playbook: centos-7-test.yml |
| 15 | + - distribution: ubuntu |
| 16 | + version: 14.04 |
| 17 | + init: /sbin/init |
| 18 | + run_opts: "" |
| 19 | + playbook: test.yml |
| 20 | + # - distribution: ubuntu |
| 21 | + # version: 12.04 |
| 22 | + # init: /sbin/init |
| 23 | + # run_opts: "" |
| 24 | + # playbook: test.yml |
7 | 25 |
|
8 |
| -before_install: |
9 |
| - - sudo apt-get update -qq |
10 |
| - |
11 |
| - # Remove MySQL. Completely and totally. |
12 |
| - - sudo apt-get remove --purge 'mysql*' |
13 |
| - - sudo apt-get autoremove |
14 |
| - - sudo apt-get autoclean |
15 |
| - - sudo rm -rf /var/lib/mysql |
16 |
| - - sudo truncate -s 0 /var/log/mysql/error.log |
17 |
| - |
18 |
| -install: |
19 |
| - # Install Ansible. |
20 |
| - - pip install ansible |
| 26 | +services: |
| 27 | + - docker |
21 | 28 |
|
22 |
| - # Add ansible.cfg to pick up roles path. |
23 |
| - - "{ echo '[defaults]'; echo 'roles_path = ../'; } >> ansible.cfg" |
| 29 | +before_install: |
| 30 | + # Pull container |
| 31 | + - 'sudo docker pull ${distribution}:${version}' |
| 32 | + # Customize container |
| 33 | + - 'sudo docker build --rm=true --file=tests/Dockerfile.${distribution}-${version} --tag=${distribution}-${version}:ansible tests' |
24 | 34 |
|
25 | 35 | script:
|
26 |
| - # Check the role/playbook's syntax. |
27 |
| - - "ansible-playbook -i tests/inventory tests/$SITE --syntax-check" |
| 36 | + - container_id=$(mktemp) |
| 37 | + # Run container in detached state |
| 38 | + - 'sudo docker run --detach --volume="${PWD}":/etc/ansible/roles/role_under_test:ro ${run_opts} ${distribution}-${version}:ansible "${init}" > "${container_id}"' |
| 39 | + |
| 40 | + # Ansible syntax check. |
| 41 | + - 'sudo docker exec --tty "$(cat ${container_id})" env TERM=xterm ansible-playbook /etc/ansible/roles/role_under_test/tests/${playbook} --syntax-check' |
28 | 42 |
|
29 |
| - # Run the role/playbook with ansible-playbook. |
30 |
| - - "ansible-playbook -i tests/inventory tests/$SITE --connection=local --sudo" |
| 43 | + # Test role. |
| 44 | + - 'sudo docker exec --tty "$(cat ${container_id})" env TERM=xterm ansible-playbook /etc/ansible/roles/role_under_test/tests/${playbook}' |
31 | 45 |
|
32 |
| - # Run the role/playbook again, checking to make sure it's idempotent. |
| 46 | + # Test role idempotence. |
33 | 47 | - >
|
34 |
| - ansible-playbook -i tests/inventory tests/$SITE --connection=local --sudo |
| 48 | + sudo docker exec "$(cat ${container_id})" ansible-playbook /etc/ansible/roles/role_under_test/tests/${playbook} |
35 | 49 | | grep -q 'changed=0.*failed=0'
|
36 | 50 | && (echo 'Idempotence test: pass' && exit 0)
|
37 | 51 | || (echo 'Idempotence test: fail' && exit 1)
|
38 | 52 |
|
39 | 53 | # Some MySQL debugging (show all the logs).
|
40 |
| - - "sudo ls -lah /var/log" |
41 |
| - - "sudo cat /var/log/mysql/error.log" |
| 54 | + - sudo docker exec --tty "$(cat ${container_id})" env TERM=xterm ls -lah /var/log |
| 55 | + - sudo docker exec --tty "$(cat ${container_id})" env TERM=xterm cat /var/log/mysql/error.log || true |
| 56 | + - sudo docker exec --tty "$(cat ${container_id})" env TERM=xterm cat /var/log/mysql.err || true |
42 | 57 |
|
43 | 58 | # Check to make sure we can connect to MySQL via Unix socket.
|
44 | 59 | - >
|
45 |
| - mysql -u root -proot -e 'show databases;' |
46 |
| - | grep -q 'performance_schema' |
| 60 | + sudo docker exec "$(cat ${container_id})" mysql -u root -proot -e 'show databases;' |
| 61 | + | grep -q 'information_schema' |
47 | 62 | && (echo 'MySQL running normally' && exit 0)
|
48 | 63 | || (echo 'MySQL not running' && exit 1)
|
49 | 64 |
|
50 | 65 | # Check to make sure we can connect to MySQL via TCP.
|
51 | 66 | - >
|
52 |
| - mysql -u root -proot -h 127.0.0.1 -e 'show databases;' |
53 |
| - | grep -q 'performance_schema' |
| 67 | + sudo docker exec "$(cat ${container_id})" mysql -u root -proot -h 127.0.0.1 -e 'show databases;' |
| 68 | + | grep -q 'information_schema' |
54 | 69 | && (echo 'MySQL running normally' && exit 0)
|
55 | 70 | || (echo 'MySQL not running' && exit 1)
|
| 71 | +
|
| 72 | + # Clean up |
| 73 | + - sudo docker stop "$(cat ${container_id})" |
0 commit comments