Service announcer for Consul.
Functionality:
- Register/deregister services with checks
- Spawn a subprocess
- Periodically mark all TTL checks as passed (if any)
For regular usage:
pip install consul-announcer # or add it as a requirement
consul-announcer --config="JSON or @path" [-h] [--agent=hostname[:port]] [--token=acl-token] [--interval=seconds] [--verbose] -- command [arguments]
Arguments:
-h, --help Show this help message and exit.
--agent hostname[:port] Consul agent address: hostname[:port].
Default: localhost (default port is 8500).
You can also use CONSUL_ANNOUNCER_AGENT env variable.
--config "JSON or @path" Consul configuration JSON (required).
If starts with @ - considered as file path.
You can also use CONSUL_ANNOUNCER_CONFIG env variable.
--token acl-token Consul ACL token.
You can also use CONSUL_ANNOUNCER_TOKEN env variable.
--interval seconds Interval for periodic marking all TTL checks as passed, in seconds.
Should be less than min TTL.
You can also use CONSUL_ANNOUNCER_INTERVAL env variable.
--verbose, -v Verbose output. You can specify -v or -vv.
Minimal usage:
consul-announcer --config=@path/to/config.json -- some-process --with --arguments
It should be valid JSON that contains {"service": {...}}
or {"services": [...]}
:
consul-announcer --config='{"service": {"name": "test service", "check": {"ttl": "10s"}}}' -- ...
If starts with @
- considered as file path:
consul-announcer --config=@path/to/config.json -- ...
Read Consul docs about services definition.
All the services & checks will be registered on process start and deregistered on process termination.
You can also use CONSUL_ANNOUNCER_CONFIG
env variable.
In the example above, the interval is not specified so it'll be calculated as min TTL / 10 (if there are TTL checks specified in the config). But you can provide your own value (in seconds):
consul-announcer --interval=3 ...
If there are no TTL checks and no --interval
- an error will raise.
You can also use CONSUL_ANNOUNCER_INTERVAL
env variable.
Default agent address is localhost
(with default port 8500
). You can provide your own:
consul-announcer --agent=1.2.3.4:5678 ...
You can also use CONSUL_ANNOUNCER_AGENT
env variable.
Consul ACL token. Required only in you've enabled ACL in your Consul agent.
consul-announcer --token=01234567-89ab-cdef-0123-456789abcdef ...
You can also use CONSUL_ANNOUNCER_TOKEN
env variable.
Output levels:
- by default only errors and warnings are printed
-v
will show info messages-vv
will show info and debug messages
from announcer.service import Service
service = Service('localhost:1234', '@/path/to/config.json', ['sleep', '5'], '01234567-89ab-cdef-0123-456789abcdef', 0.5)
service.run()
git clone <this-repo>
cd consul-announcer
pip install -r requirements/test.txt -e .
Test configuration is defined in the tox.ini
file and includes py.test
tests and flake8
source code checker. You can run all of the tests:
python setup.py test
To run just the py.test
tests, not flake8
, and to re-use the current virtualenv
:
py.test
- Tests must be passing
- Don't forget to test all added functionality
- Update
CHANGELOG
with the release info - Update
README
(if necessary) - Commit all the changes
- Create new version tag (e.g.):
v1.2.3
- Push commits and tags
- Release new version on PyPI