etcd v3的python客户端(使用grpc json网关)
etcd3-p的Python项目详细描述
ETCD3年
用于etcd v3的python客户端(使用grpc json网关)
- 免费软件:apache软件许可证2.0
- 源代码:https://github.com/Revolution1/etcd3-py
- 文档:https://etcd3-py.readthedocs.io。
- 需要ETCD版本:v3.2.2+
注意:通过grpc json网关的身份验证头只在etcd v3.3.0+
功能
- [X]支持python2.7和python3.5+(aiohttp需要python3.5.2+)
- [X]根据请求同步客户端
- [X]基于aiohttp的异步客户机
- [X]TLS连接
- [X]支持API
- [X]授权
- [X]千伏
- [X]手表
- [X]群集
- [X]租约
- [X]锁定
- [X]维护
- [X]额外的API
- [X]有状态实用程序
- [X]手表
- [X]租约
- [X]交易
- [X]锁定
快速启动
安装
$ pip install etcd3-py
sync客户端
>>>frometcd3importClient>>>client=Client('127.0.0.1',2379,cert=(CERT_PATH,KEY_PATH),verify=CA_PATH)>>>client.version()EtcdVersion(etcdserver='3.3.0-rc.4',etcdcluster='3.3.0')>>>client.put('foo','bar')etcdserverpbPutResponse(header=etcdserverpbResponseHeader(cluster_id=11588568905070377092,member_id=128088275939295631,revision=15433,raft_term=4))>>>client.range('foo').kvs[mvccpbKeyValue(key=b'foo',create_revision=15429,mod_revision=15433,version=5,value=b'bar')]
异步客户端(python3.5+)
>>>importasyncio>>>frometcd3importAioClient>>>client=AioClient('127.0.0.1',2379)>>>asyncdefgetFoo():...awaitclient.put('foo','bar')...r=awaitclient.range('foo')...print('key:',r.kvs[0].key,'value:',r.kvs[0].value)>>>loop=asyncio.get_event_loop()>>>loop.run_until_complete(getFoo())key:b'foo'value:b'bar'
transaction util
>>>frometcd3importClient>>>txn=Client().Txn()>>>txn.compare(txn.key('foo').value=='bar')>>>txn.success(txn.put('foo','bra'))>>>txn.commit()etcdserverpbTxnResponse(header=etcdserverpbResponseHeader(cluster_id=11588568905070377092,member_id=128088275939295631,revision=15656,raft_term=4),succeeded=True,responses=[etcdserverpbResponseOp(response_put=etcdserverpbPutResponse(header=etcdserverpbResponseHeader(revision=15656)))])
lease util
>>>frometcd3importClient>>>client=Client()>>>withclient.Lease(ttl=5)aslease:...client.put('foo','bar',lease=lease.ID)...client.put('fizz','buzz',lease=lease.ID)...r=lease.time_to_live(keys=True)...assertset(r.keys)=={b'foo',b'fizz'}...assertlease.alive()
watch util
>>>frometcd3importClient>>>client=Client()>>>watcher=c.Watcher(all=True,progress_notify=True,prev_kv=True)>>>w.onEvent('f.*',lambdae:print(e.key,e.value))>>>w.runDaemon()>>># etcdctl put foo bar>>># etcdctl put foz barb'foo'b'bar'b'foz'b'bar'>>>w.stop()
lock util
>>>importtime>>>fromthreadingimportThread>>>frometcd3importClient>>>client=Client()>>>name='lock_name'>>>defuser1():...withclient.Lock(name,lock_ttl=5):...print('user1 got the lock')...time.sleep(5)...print('user1 releasing the lock')>>>defuser2():...withclient.Lock(name,lock_ttl=5):...print('user2 got the lock')...time.sleep(5)...print('user2 releasing the lock')>>>t1=Thread(target=user1,daemon=True)>>>t2=Thread(target=user2,daemon=True)>>>t1.start()>>>t2.start()>>>t1.join()>>>t2.join()user1gotthelockuser1releasingthelockuser2gotthelockuser2releasingthelock
使用docker启动单个节点etcd
q:身份验证似乎不起作用?尝试调用启用身份验证的ETCD服务器的API时返回错误“erruserempty error:'etcd server:user name is empty'” a:看看#41,目前etcd3 py没有自动验证,您需要自己调用client.auth()。 您可以在dev environment试用它exportNODE1=0.0.0.0
exportETCD_VER=v3.3
docker run -d \
-p 2379:2379 \
-p 2380:2380 \
--volume=/tmp/etcd3-data:/etcd-data \
--name etcd3 quay.io/coreos/etcd:$ETCD_VER\
/usr/local/bin/etcd \
--data-dir=/etcd-data --name node1 \
--initial-advertise-peer-urls http://${NODE1}:2380 --listen-peer-urls http://${NODE1}:2380 \
--advertise-client-urls http://${NODE1}:2379 --listen-client-urls http://${NODE1}:2379 \
--initial-cluster node1=http://${NODE1}:2380
常见问题解答
待办事项
历史记录
0.1.6(2019-05-9)
0.1.5(2018-07-4)
0.1.4(2018-03-30)
0.1.3(2018-03-21)
0.1.2(2018-03-20)
0.1.0(2018-03-19)
推荐PyPI第三方库