A Python client for docker events API.
Project description
objective
have a CLI to start a process which runs abitrary code on docker events
be able to provide a way to change behavior of and provide data to event subscribers
load subscribers by module or file
events may be extended
install
# pip install docker-events
usage
# docker-events --help
Usage: docker-events [OPTIONS]
Options:
-s, --sock TEXT the docker socket
-c, --config FILENAME a config yaml
-m, --module TEXT a python module to load
-f, --file PATH a python file to load
-l, --log PATH logging config
--debug enable debug log level
--help Show this message and exit.
# create a config for skydns
# cat > skydns-config.yaml << EOF
---
skydns:
domain: foo
skydns.containers:
redis:
domain: myredis.{domain}
EOF
# run skydns subscriber on start events
# docker-events -c skydns-config.yaml -m docker_events.tools.skydns
API
There are some predefined events: start, stop, create, die, destroy, pull
You may write your own events like this:
@event
def pull(client, event_data):
return event_data.get('status') == 'pull'
Events may be extended by other events:
@docker_events.pull.extend
def pull_something(client, event_data):
return event_data['id'].startswith("foobar")
For example if you want to use skydns, you may want to put the following code into a file or module and load it via -m or -f option:
"""
setup skydns records for containers
"""
import docker_events
import etcd
import simplejson as json
etcd_client = etcd.Client()
@docker_events.start.subscribe
def set_skydns_record(client, docker_event, config):
# get ip of container
container = client.inspect_container(docker_event['id'])
container_name = container['Name'].strip("/")
container_ip = container['NetworkSettings']['IPAddress']
skydns_config = config.get('skydns', {})
skydns_containers = config.get('skydns.containers', {
'domain': 'docker.local'
})
# find domain name for this container
if skydns_config and container_name in skydns_containers:
# use template
domain = skydns_containers[container_name].get('domain').format(**skydns_config)
else:
# join container_name with domain
domain = '.'.join((container_name, skydns_config.get('domain')))
domain_path = '/'.join(reversed(domain.split('.')))
etcd_client.write('/skydns/local/skydns/{}'.format(domain_path), json.dumps({
'host': container_ip
}))
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
docker-events-0.0.4.tar.gz
(5.1 kB
view hashes)
Built Distribution
Close
Hashes for docker_events-0.0.4-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b991411db042f0463e60ba3d54b2d8e9236255df964999b87bf2c88ba1a4e009 |
|
MD5 | 7b6518496fac1bdee10d155b9e5b776c |
|
BLAKE2b-256 | ac71430438dfb161919804300482f2fa48610354843e90e88d4f87a53c2c32e0 |