def __init__(self, host='localhost', port=2379,
ca_cert=None, cert_key=None, cert_cert=None, timeout=None,
user=None, password=None):
self._url = '{host}:{port}'.format(host=host, port=port)
cert_params = [c is not None for c in (cert_cert, cert_key)]
if ca_cert is not None:
if all(cert_params):
credentials = self._get_secure_creds(
ca_cert,
cert_key,
cert_cert
)
self.uses_secure_channel = True
self.channel = grpc.secure_channel(self._url, credentials)
elif any(cert_params):
# some of the cert parameters are set
raise ValueError(
'to use a secure channel ca_cert is required by itself, '
'or cert_cert and cert_key must both be specified.')
else:
credentials = self._get_secure_creds(ca_cert, None, None)
self.uses_secure_channel = True
self.channel = grpc.secure_channel(self._url, credentials)
else:
self.uses_secure_channel = False
self.channel = grpc.insecure_channel(self._url)
self.timeout = timeout
self.call_credentials = None
cred_params = [c is not None for c in (user, password)]
if all(cred_params):
self.auth_stub = etcdrpc.AuthStub(self.channel)
auth_request = etcdrpc.AuthenticateRequest(
name=user,
password=password
)
resp = self.auth_stub.Authenticate(auth_request, self.timeout)
self.call_credentials = grpc.metadata_call_credentials(
EtcdTokenCallCredentials(resp.token))
elif any(cred_params):
raise Exception(
'if using authentication credentials both user and password '
'must be specified.'
)
self.kvstub = etcdrpc.KVStub(self.channel)
self.watcher = watch.Watcher(
etcdrpc.WatchStub(self.channel),
timeout=self.timeout,
call_credentials=self.call_credentials,
)
self.clusterstub = etcdrpc.ClusterStub(self.channel)
self.leasestub = etcdrpc.LeaseStub(self.channel)
self.maintenancestub = etcdrpc.MaintenanceStub(self.channel)
self.transactions = Transactions()
评论列表
文章目录