etcd v3的python客户端(使用grpc json网关)

etcd3-p的Python项目详细描述


ETCD3年

pypitravisCodacy Badgecodecovdocupdatespython3

用于etcd v3的python客户端(使用grpc json网关)

注意:通过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

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

常见问题解答

q:身份验证似乎不起作用?尝试调用启用身份验证的ETCD服务器的API时返回错误“erruserempty error:'etcd server:user name is empty'”

a:看看#41,目前etcd3 py没有自动验证,您需要自己调用client.auth()。

待办事项

  • []人性化的中级API
  • []能够向用户公开json或原始响应
  • []添加选举API
  • []基准
  • []与python etcd(etcd v2)兼容的客户端
  • []ETCD浏览器
  • []支持ETCD v3.4.x

历史记录

0.1.6(2019-05-9)

  • 合并拉取请求#90修复租约实用程序保留问题
  • 合并拉取请求#89添加范围结束并租用到txn
  • 合并拉取请求#87在建模响应数据时,像gogoproto那样添加handel空值
  • 合并拉取请求#82修复监视实用程序问题18和78
  • 合并拉取请求#79提高多个版本的etcd容量
  • 合并拉取请求#51将基本etcdmodel添加到所有动态创建的模型中
  • 合并拉取请求#42提高多个版本的etcd容量

0.1.5(2018-07-4)

  • 合并拉取请求#34仅在需要时枚举34

0.1.4(2018-03-30)

  • 更好的代码质量
  • 支持ETCD v3.2.2+

0.1.3(2018-03-21)

  • 完成的锁实用程序

0.1.2(2018-03-20)

  • 添加更多测试
  • 添加监视程序、事务和租约实用程序

您可以在dev environment试用它

0.1.0(2018-03-19)

  • 实现了etcd3的grpc json网关的所有api
  • 有状态实用程序(监视程序租用锁事务)正在进行中

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java LineNumberReader。如果查询行为不正确,则返回readLine()   java包含了一个使用AndroidX的工具栏,这让我的应用程序崩溃了   JVM设置通过“java jar”运行应用程序的最佳实践   java如何获取ImageButton宽度   java Oracle SQLLDR实用程序无响应   列出Java获取对象的arrayList中最常见的元素   java使用带有FlowLayout的getContentpane对布局应用更改,但不起作用为什么?   在java中,我可以在画布上绘制画布吗?   编译游戏代码时发生java异常错误   从firestore获取java Webview失败   java将TableLayout中单元格的内容向右对齐   java无法在发布模式下启动活动(使用proguard安卓optimize配置)   java允许在线程期间进行GUI更新。睡觉   java如何对以变量为列表的列表进行排序   API URL上的java Google云端点异常