跳转到主要内容

docker events API的Python客户端。

项目描述

目标

  • 有一个CLI来启动一个在docker events上运行任意代码的过程

  • 能够提供更改事件订阅者行为和提供数据的方法

  • 通过模块或文件加载订阅者

  • 事件可以扩展

安装

# pip install docker-events

使用

 # 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

有一些预定义的事件: startstopcreatediedestroypull

您可以像这样编写自己的事件

@event
def pull(client, event_data):
    return event_data.get('status') == 'pull'

事件可以通过其他事件扩展

@docker_events.pull.extend
def pull_something(client, event_data):
    return event_data['id'].startswith("foobar")

例如,如果您想使用skydns,您可能需要将以下代码放入一个文件或模块中,并通过-m-f选项加载它

"""
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
    }))

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定要选择哪个,请了解更多关于安装包的信息。

源代码分发

docker-events-0.0.10.tar.gz (5.3 kB 查看散列)

上传时间:

构建分发

docker_events-0.0.10-py2.py3-none-any.whl (8.5 kB 查看哈希值)

上传时间 Python 2 Python 3

支持