docs | |
---|---|
tests | |
package |
A tool to wait for services and execute command. Useful for Docker containers that depend on slow to start services (like almost everything).
- Free software: BSD 2-Clause License
pip install holdup
Usage: holdup [-h] [-t SECONDS] [-T SECONDS] [-i SECONDS] [-n] [--insecure] service [service ...] [-- command [arg [arg ...]]]
Wait for services to be ready and optionally exec command.
- Positional arguments:
service
- A service to wait for. Supported protocols: "tcp://host:port/", "path:///path/to/something", "unix:///path/to/domain.sock", "eval://expr", "http://urn", "http://urn", "https+insecure//urn" (status 200 expected). Join protocols with a comma to make holdup exit at the first passing one, eg: tcp://host:1,host:2 or tcp://host:1,tcp://host:2 are equivalent and mean "any that pass".
command
- An optional command to exec.
- Optional arguments:
-h, --help show this help message and exit -t SECONDS, --timeout SECONDS Time to wait for services to be ready. Default: 60.0 -T SECONDS, --check-timeout SECONDS Time to wait for a single check. Default: 1.0 -i SECONDS, --interval SECONDS How often to check. Default: 0.2 -n, --no-abort Ignore failed services. This makes holdup return 0 exit code regardless of services actually responding. --insecure Skip SSL Certificate verification for HTTPS services.
Assuming you always want the container to wait add this in your Dockerfile
:
COPY entrypoint.sh / ENTRYPOINT ["/entrypoint.sh"] CMD ["/bin/bash"]
Then in entrypoint.sh
you could have:
#!/bin/sh set -eux urlstrip() { string=${@##*://}; echo ${string%%[\?/]*}; } exec holdup \ "tcp://$DJANGO_DATABASE_HOST:$DJANGO_DATABASE_PORT" \ "tcp://$(urlstrip $CELERY_RESULT_BACKEND)" \ -- "$@"
The only disadvantage is that you might occasionally need to use docker run --entrypoint=''
to avoid running holdup. No biggie.
You may choose to skip SSL validation when waiting for an HTTPS service (for e.g., when using an IP Address). This can be done using either of the following methods:
# Specifying a https+insecure protocol holdup https+insecure://10.1.2.3/ # Specifying the --insecure` option holdup --insecure https://10.1.2.3/
Skipping SSL Certificate verification requires a minimum of Python-2.7.9 or Python-3.4.3.
To run the all tests run:
tox
Note, to combine the coverage data from all the tox environments run:
Windows | set PYTEST_ADDOPTS=--cov-append tox |
---|---|
Other | PYTEST_ADDOPTS=--cov-append tox |