Skip to main content

A tool to wait for services and execute command. Useful for Docker containers that depend on slow to start services (like almost everything).

Project description

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

Installation

Currently holdup is only published to PyPI and hub.docker.com.

To install from PyPI:

pip install holdup

It has no dependencies except the optional PostgreSQL check support, which you’d install with:

pip install 'holdup[pg]'

You can also install the in-development version with:

pip install https://github.com/ionelmc/python-holdup/archive/master.zip

Alternate installation (Docker image)

Example:

docker run --rm ionelmc/holdup tcp://foobar:1234

Note that this will have some limitations:

  • executing the command is pretty pointless because holdup will run in its own container

  • you’ll probably need extra network configuration to be able to access services

  • you won’t be able to use docker run inside a container without exposing a docker daemon in said container

Usage

usage: holdup [-h] [-t SECONDS] [-T SECONDS] [-i SECONDS] [-n] 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”, “pg://user:password@host:port/dbname” (“postgres” and “postgresql” also allowed), “http://urn”, “https://urn”, “https+insecure://urn” (status 200 expected for http*). 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

-v, --verbose

Verbose mode.

--verbose-passwords

Disable PostgreSQL/HTTP password masking.

-n, --no-abort

Ignore failed services. This makes holdup return 0 exit code regardless of services actually responding.

--insecure

Disable SSL Certificate verification for HTTPS services.

--version

display the version of the holdup package and its location, then exit.

Example:

holdup tcp://foobar:1234 -- django-admin ...

Documentation

https://python-holdup.readthedocs.io/

Development

To run all the 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

Changelog

5.1.1 (2024-05-21)

  • Do not display an authentication mask for http protocols if there are no actual credentials specified.

5.1.0 (2024-04-12)

  • Fixed buggy handling when http checks are specified with a port.

  • Changed User-Agent header and stripped port from Host header for http checks.

  • Refactored a bunch of code into a separate holdup.checks module.

5.0.0 (2024-04-11)

  • Added a static binary in the Github release (built with Pyinstaller on Alpine, as a static bin).

  • Dropped support for Python 3.7 and added in Python 3.12 in the test suite.

4.0.0 (2023-02-14)

  • Added support for psycopg 3 (now the holdup[pg] extra will require that). The old psycopg2 is still supported for now.

  • Dropped support for Python 3.6 and added in Python 3.11 in the test suite.

3.0.0 (2022-03-20)

  • Dropped support for Python 2.

  • Switched CI from Travis to GitHub Actions.

  • Fixed bugs with password masking (it wasn’t working for postgresql URIs).

2.0.0 (2021-04-08)

  • Added support for password masking (--verbose-passwords to disable this feature).

  • Overhauled checks display a bit, output might be slightly different.

  • Added support for basic and digest HTTP authentication.

  • Published Docker image at https://hub.docker.com/r/ionelmc/holdup (Alpine based).

1.9.0 (2021-01-11)

  • Added a --version argument.

  • Changed verbose output to mask passwords in postgresql checks.

1.8.1 (2020-12-16)

  • Add support for PostgreSQL 12+ clients (strict integer type-checking on connect_timeout). The float is now converted to an integer.

1.8.0 (2019-05-28)

  • Added a PostgreSQL check. It handles the the database system is starting up problem. Contributed by Dan Ailenei in 6.

  • Changed output so it’s more clear and more brief:

    • arguments (checks) are quoted when printed,

    • “any” checks give exact info about what made it pass,

    • repetitive information is removed.

  • Simplified the internals for the “AnyCheck”.

1.7.0 (2018-11-24)

  • Added support for skipping SSL certificate verification for HTTPS services (the --insecure option and https+insecure protocol). Contributed by Mithun Ayachit in 2.

1.6.0 (2018-03-22)

  • Added verbose mode (-v or --verbose).

  • Changed default timeout to 60s (from 5s).

1.5.0 (2017-06-07)

  • Added an eval://expression protocol for weird user-defined checks.

1.4.0 (2017-03-27)

  • Added support for HTTP(S) check.

1.3.0 (2017-02-21)

  • Add support for “any” service check (service syntax with comma).

1.2.1 (2016-06-17)

  • Handle situation where internal operations would take more than planned.

1.2.0 (2016-05-25)

  • Added a file check.

1.1.0 (2016-05-06)

  • Removed debug print.

  • Added --interval option for how often to check. No more spinloops.

1.0.0 (2016-04-22)

  • Improved tests.

  • Always log to stderr.

0.1.0 (2016-04-21)

  • First release on PyPI.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

holdup-5.1.1.tar.gz (28.9 kB view details)

Uploaded Source

Built Distribution

holdup-5.1.1-py3-none-any.whl (11.3 kB view details)

Uploaded Python 3

File details

Details for the file holdup-5.1.1.tar.gz.

File metadata

  • Download URL: holdup-5.1.1.tar.gz
  • Upload date:
  • Size: 28.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for holdup-5.1.1.tar.gz
Algorithm Hash digest
SHA256 244981e3546b4f9a1e04010eb73f52dbab0cc6dd2dcae0edbebcb71e2815b7eb
MD5 f9a32e292952d8e28f95d65cef7cb2b0
BLAKE2b-256 f4fbcbf09e6f2d68291dc3bb7508190affb8586f85757a2c0026b3f553017861

See more details on using hashes here.

File details

Details for the file holdup-5.1.1-py3-none-any.whl.

File metadata

  • Download URL: holdup-5.1.1-py3-none-any.whl
  • Upload date:
  • Size: 11.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for holdup-5.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 3826fd9a9a88f311418c6f79cf12e69bc0f039706f4bde0fc9fd4b2dd8108b76
MD5 da000ed59a42398bb6e632af511cb55f
BLAKE2b-256 100cd6e2f8a51412ca039555639c415e3cefbeb850bed24899abccdbadfc9200

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page