Skip to content

Commit a48fd50

Browse files
committed
Added some tests, and fixed a few things
1 parent ebdc3bc commit a48fd50

File tree

11 files changed

+201
-14
lines changed

11 files changed

+201
-14
lines changed

README.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
[![Build Status](https://travis-ci.org/singleplatform-eng/ansible-role-celery.svg?branch=master)](https://travis-ci.org/singleplatform-eng/ansible-role-celery)
12
Ansible-Role-Celery
23
=========
34

@@ -15,7 +16,7 @@ Defaults
1516
celery_env_dir: /etc/celery.d
1617
celery_log_dir: /var/log/celery
1718
celery_run_dir: /var/run/celery
18-
celery_bin: "{{python_virtualenv}}/bin/celery"
19+
celery_bin: "/usr/local/bin/celery"
1920
```
2021
Required Vars
2122
```
@@ -27,9 +28,7 @@ celery_services
2728
Dependencies
2829
------------
2930
Python
30-
Python VirtualEnv
31-
32-
This role assumes that the celery binary is installed into the local python virtualenv's bin directory. The default value of celery_bin requires that the ansible variable "{{python_virtualenv}}" be defined.
31+
Message Broker - the tests in this role use a local instance of redis-server
3332

3433
Example Playbook
3534
----------------

defaults/main.yml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,12 @@ celery_install: True
33
celery_env_dir: /etc/celery.d
44
celery_log_dir: /var/log/celery
55
celery_run_dir: /var/run/celery
6-
celery_bin: "{{python_virtualenv}}/bin/celery"
6+
celery_bin: "/usr/local/bin/celery"
7+
8+
celeryd_default_env:
9+
CELERYD_LOG_FILE: "/var/log/celery/%n%I.log"
10+
CELERYD_PID_FILE: "/var/run/celery/%n.pid"
11+
CELERY_APP: "{{celery_app}}"
12+
CELERY_BIN: "{{celery_bin}}"
13+
CELERYD_LOG_LEVEL: "INFO"
14+
CELERYD_NODES: "worker"

tasks/main.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@
66
include_tasks: manage_configs.yml
77

88
- name: Manage systemd Service Units
9-
include_tasks: manage_service_units.yml
9+
include_tasks: manage_units.yml

tasks/manage_configs.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
22
- name: Configure Celery EnvironmentFile
33
template: src=celery_env.j2 dest="{{celery_env_dir}}/{{item.name}}"
4-
notify: "restart celery service"
4+
notify: "restart celery services"
55
with_items: "{{celery_services}}"

tasks/manage_paths.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,22 @@
33
file:
44
path: "{{celery_env_dir}}"
55
state: directory
6-
owner: "{{app_user}}"
7-
group: "{{app_user}}"
6+
owner: "{{celery_user}}"
7+
group: "{{celery_user}}"
88
mode: 0755
99

1010
- name: Ensure Celery Log Dir exists
1111
file:
1212
path: "{{celery_log_dir}}"
1313
state: directory
14-
owner: "{{app_user}}"
15-
group: "{{app_user}}"
14+
owner: "{{celery_user}}"
15+
group: "{{celery_user}}"
1616
mode: 0755
1717

1818
- name: Ensure Celery Run Dir exists
1919
file:
2020
path: "{{celery_run_dir}}"
2121
state: directory
22-
owner: "{{app_user}}"
23-
group: "{{app_user}}"
22+
owner: "{{celery_user}}"
23+
group: "{{celery_user}}"
2424
mode: 0755

tasks/manage_units.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
22
- name: Configure Celery systemd service unit
33
template: src=celery.service.j2 dest="/etc/systemd/system/{{item.name}}.service"
4-
notify: restart celery service
4+
notify: restart celery services
55
with_items: "{{celery_services}}"

tests/files/redis.conf

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# # This file is managed by Ansible. Local changes will be overwritten.
2+
3+
daemonize yes
4+
pidfile /var/run/redis/redis-server.pid
5+
port 6379
6+
bind 127.0.0.1
7+
8+
9+
timeout 300
10+
11+
loglevel notice
12+
logfile /var/log/redis/redis-server.log
13+
14+
# To enable logging to the system logger, just set 'syslog-enabled' to yes,
15+
# and optionally update the other syslog parameters to suit your needs.
16+
# syslog-enabled no
17+
# syslog-ident redis
18+
# syslog-facility local0
19+
20+
databases 16
21+
22+
save 900 1
23+
save 300 10
24+
save 60 10000
25+
26+
rdbcompression yes
27+
dbfilename dump.rdb
28+
dir /var/lib/redis
29+
30+
# maxclients 128

tests/files/tasks.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from celery import Celery
2+
3+
app = Celery('tasks', broker='redis://localhost:6379')
4+
5+
@app.task
6+
def add(x, y):
7+
return x + y

tests/test.retry

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
localhost

tests/test.sh

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
#!/bin/bash
2+
#
3+
# Ansible role test shim.
4+
#
5+
# Usage: [OPTIONS] ./tests/test.sh
6+
# - distro: a supported Docker distro version (default = "centos7")
7+
# - playbook: a playbook in the tests directory (default = "test.yml")
8+
# - cleanup: whether to remove the Docker container (default = true)
9+
# - container_id: the --name to set for the container (default = timestamp)
10+
11+
# Exit on any individual command failure.
12+
set -e
13+
14+
# Pretty colors.
15+
red='\033[0;31m'
16+
green='\033[0;32m'
17+
neutral='\033[0m'
18+
19+
timestamp=$(date +%s)
20+
21+
# Allow environment variables to override defaults.
22+
distro=${distro:-"ubuntu1804"}
23+
playbook=${playbook:-"test.yml"}
24+
cleanup=${cleanup:-"true"}
25+
container_id=${container_id:-$timestamp}
26+
27+
## Set up vars for Docker setup.
28+
init="/lib/systemd/systemd"
29+
opts="--privileged --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro"
30+
31+
# Run the container using the supplied OS.
32+
printf ${green}"Starting Docker container: geerlingguy/docker-$distro-ansible."${neutral}"\n"
33+
docker pull geerlingguy/docker-$distro-ansible:latest
34+
docker run --detach --volume="$PWD":/etc/ansible/roles/role_under_test:rw --name $container_id $opts geerlingguy/docker-$distro-ansible:latest $init
35+
36+
printf "\n"
37+
38+
# Install requirements if `requirements.yml` is present.
39+
if [ -f "$PWD/tests/requirements.yml" ]; then
40+
printf ${green}"Requirements file detected; installing dependencies."${neutral}"\n"
41+
docker exec --tty $container_id env TERM=xterm ansible-galaxy install -r /etc/ansible/roles/role_under_test/tests/requirements.yml
42+
fi
43+
44+
printf "\n"
45+
46+
# Test Ansible syntax.
47+
printf ${green}"Checking Ansible playbook syntax."${neutral}
48+
docker exec --tty $container_id env TERM=xterm ansible-playbook /etc/ansible/roles/role_under_test/tests/$playbook --syntax-check
49+
50+
printf "\n"
51+
52+
# Run Ansible playbook.
53+
printf ${green}"Running command: docker exec $container_id env TERM=xterm ansible-playbook /etc/ansible/roles/role_under_test/tests/$playbook"${neutral}
54+
docker exec $container_id env TERM=xterm env ANSIBLE_FORCE_COLOR=1 ansible-playbook /etc/ansible/roles/role_under_test/tests/$playbook
55+
56+
# Run Ansible playbook again (idempotence test).
57+
printf ${green}"Running playbook again: idempotence test"${neutral}
58+
idempotence=$(mktemp)
59+
docker exec $container_id ansible-playbook /etc/ansible/roles/role_under_test/tests/$playbook | tee -a $idempotence
60+
tail $idempotence \
61+
| grep -q 'changed=0.*failed=0' \
62+
&& (printf ${green}'Idempotence test: pass'${neutral}"\n") \
63+
|| (printf ${red}'Idempotence test: fail'${neutral}"\n" && exit 1)
64+
65+
66+
printf ${green}"Testing Start Handlers and Service\n"${neutral}
67+
docker exec $container_id ansible-playbook /etc/ansible/roles/role_under_test/tests/$playbook -e 'test_handlers=True test_service=True'
68+
printf ${green}"Handlers and Service test passed\n"${neutra}
69+
70+
71+
# Remove the Docker container (if configured).
72+
if [ "$cleanup" = true ]; then
73+
printf "Removing Docker container...\n"
74+
docker rm -f $container_id
75+
fi

0 commit comments

Comments
 (0)