1 1、创建lease,续租lease,撤销lease

import etcd3
import json
import time
etcd = etcd3.client(host='127.0.0.1', port=2379)


# lease使用
# 创建新租约。返回lease对象
new_lease = etcd.lease(5)
print("new_lease:{}" .format(new_lease.__str__()))
etcd.get_lease_info(new_lease.id)
print("get_lease_info:{}" .format(etcd.get_lease_info(new_lease.id)))
# 如果租约到期,附加到该租约的所有密钥都将过期并删除。
# 可以发送租约保持活动消息以刷新 ttl。如果超时了的话续租仍然是可以成功的
for i in range(3):
    # 续租
    print("=========={}============" .format(i))
    res = list(etcd.refresh_lease(new_lease.id))
    # 打印续租是否成功信息
    time.sleep(3)
    print("refresh_lease resp:{}" .format(res))
# time.sleep(5) # 超时的话,打印error
# 撤销租约
try:
    res = etcd.revoke_lease(new_lease.id)
    print("revoke_lease resp:{}" .format(res.__str__()))
except:
    print("revoke_lease error")

# 打印信息如下:
'''
new_lease:<etcd3.leases.Lease object at 0x7fdb5f709220>
get_lease_info:header {
  cluster_id: 17237436991929493444
  member_id: 9372538179322589801
  revision: 2
  raft_term: 4
}
ID: 3632582335366158369
TTL: 4
grantedTTL: 5

==========0============
refresh_lease resp:[header {
  cluster_id: 17237436991929493444
  member_id: 9372538179322589801
  revision: 2
  raft_term: 4
}
ID: 3632582335366158369
TTL: 5
]
==========1============
refresh_lease resp:[header {
  cluster_id: 17237436991929493444
  member_id: 9372538179322589801
  revision: 2
  raft_term: 4
}
ID: 3632582335366158369
TTL: 5
]
==========2============
refresh_lease resp:[header {
  cluster_id: 17237436991929493444
  member_id: 9372538179322589801
  revision: 2
  raft_term: 4
}
ID: 3632582335366158369
TTL: 5
]
revoke_lease resp:None
'''

import etcd3
import json
import time
etcd = etcd3.client(host='127.0.0.1', port=2379)

# 基础操作 put get delete
# 获取当前所有存储的key
print(list(etcd.get_all()))

# 创建新租约。返回lease对象
new_lease = etcd.lease(5)
print("new_lease:{}" .format(new_lease.__str__()))
etcd.get_lease_info(new_lease.id)
print("get_lease_info:{}" .format(etcd.get_lease_info(new_lease.id)))
# 将lease attach 到某个key上
etcd.put('/demo/key', 'hello world',lease=new_lease)
# 查看key是否存在
print(list(etcd.get_all()))
time.sleep(6)
# 查看key是否存在
print(list(etcd.get_all()))
etcd.close()

# 打印结果如下:
# [(b'hello', <etcd3.client.KVMetadata object at 0x7f0011933370>)]
# new_lease:<etcd3.leases.Lease object at 0x7f0011933280>
# get_lease_info:header {
#   cluster_id: 17237436991929493444
#   member_id: 9372538179322589801
#   revision: 2
#   raft_term: 4
# }
# ID: 3632582335366158376
# TTL: 4
# grantedTTL: 5

# [(b'hello world', <etcd3.client.KVMetadata object at 0x7f0011933430>), (b'hello', <etcd3.client.KVMetadata object at 0x7f00119333a0>)]
# [(b'hello', <etcd3.client.KVMetadata object at 0x7f0011933400>)]