PHP code example of easyswoole / etcd-client
1. Go to this page and download the library: Download easyswoole/etcd-client library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
easyswoole / etcd-client example snippets
asySwoole\EtcdClient\Config;
use EasySwoole\EtcdClient\Etcd;
$etcd = new Etcd(new Config(
endpoint: 'http://127.0.0.1:2379',
apiVersion: 'v3',
timeout: 5.0,
));
$client = $etcd->client;
$client->put('services/api', '127.0.0.1:9501');
$result = $client->range('services/api');
var_dump($result['kvs'][0]['value']); // 127.0.0.1:9501
$client->put('config/database/host', '127.0.0.1');
$result = $client->put(
'config/database/host',
'10.0.0.10',
['prev_kv' => true],
);
// 请求了 prev_kv 时,旧键值会被自动进行 Base64 解码。
$previousValue = $result['prev_kv']['value'] ?? null;
$lease = $client->grantLease(30);
$client->put('sessions/123', 'session-data', [
'lease' => $lease['ID'],
]);
$result = $client->range('config/database/host');
if (($result['count'] ?? '0') !== '0') {
$key = $result['kvs'][0]['key'];
$value = $result['kvs'][0]['value'];
}
$result = $client->range('config/a', 'config/z');
$result = $client->rangePrefix('services/');
foreach ($result['kvs'] ?? [] as $item) {
printf("%s = %s\n", $item['key'], $item['value']);
}
$result = $client->rangeAll();
$result = $client->rangePrefix('services/', [
'limit' => 10,
'keys_only' => true,
]);
// 删除单个键
$client->delete('config/database/host');
// 删除时要求 etcd 返回被删除前的键值
$result = $client->delete('config/database/host', previous: true);
// 删除指定前缀下的所有键
$result = $client->deletePrefix('services/');
$client->delete('config/a', 'config/z');
$client->compact(revision: 1000);
$client->compact(revision: 1000, physical: true);
// 创建一个有效期为 30 秒的租约
$lease = $client->grantLease(30);
$leaseId = (int) $lease['ID'];
// 使用指定的租约 ID
$lease = $client->grantLease(ttl: 30, id: 123456);
// 续租
$result = $client->keepLeaseAlive($leaseId);
// 查询租约,并要求返回绑定的键
$result = $client->leaseTimeToLive($leaseId,
$token = $client->authenticate('root', 'password');
$authenticatedClient = $client->withToken($token);
$result = $authenticatedClient->range('protected/key');
$anonymousClient = $authenticatedClient->withToken(null);
$client->enableAuthentication();
$authenticatedClient->disableAuthentication();
// 新增用户
$client->addUser('reader', 'initial-password');
// 获取用户信息
$user = $client->user('reader');
// 获取全部用户
$users = $client->users();
// 修改密码
$client->changePassword('reader', 'new-password');
// 为用户授予或撤销角色
$client->grantUserRole('reader', 'config-reader');
$client->revokeUserRole('reader', 'config-reader');
// 删除用户
$client->deleteUser('reader');
use EasySwoole\EtcdClient\Permission;
// 新增角色
$client->addRole('config-reader');
// 获取角色信息或角色列表
$role = $client->role('config-reader');
$roles = $client->roles();
// 授予单个键的读取权限
$client->grantRolePermission(
role: 'config-reader',
permission: Permission::Read,
key: 'config/app',
);
// 授予一个键范围的读写权限
$client->grantRolePermission(
role: 'config-admin',
permission: Permission::ReadWrite,
key: 'config/',
rangeEnd: 'config0',
);
// 撤销权限
$client->revokeRolePermission('config-reader', 'config/app');
// 删除角色
$client->deleteRole('config-reader');
use EasySwoole\EtcdClient\Config;
use EasySwoole\EtcdClient\Etcd;
use EasySwoole\EtcdClient\TlsConfig;
$tls = new TlsConfig(
caFile: '/run/secrets/etcd-ca.crt',
clientCertificate: '/run/secrets/etcd-client.crt',
clientPrivateKey: '/run/secrets/etcd-client.key',
passphrase: getenv('ETCD_CLIENT_KEY_PASSPHRASE') ?: null,
serverName: 'etcd.internal',
);
$etcd = new Etcd(new Config(
endpoint: 'https://etcd.internal:2379',
timeout: 5.0,
tls: $tls,
));
$client = $etcd->client;
$tls = new TlsConfig(
caFile: '/run/secrets/etcd-ca.crt',
serverName: 'etcd.internal',
);
$config = new Config(endpoint: 'https://10.0.0.5:2379', tls: $tls);
$tls = new TlsConfig(
caPath: '/etc/ssl/certs',
);
$config = new Config(endpoint: 'https://etcd.internal:2379', tls: $tls);
$tls = new TlsConfig(
verifyPeer: true,
allowSelfSigned: true,
serverName: 'localhost',
);
$config = new Config(endpoint: 'https://127.0.0.1:2379', tls: $tls);
$tls = new TlsConfig(
verifyPeer: false,
);
$config = new Config(endpoint: 'https://127.0.0.1:2379', tls: $tls);
$result = $client->range('name');
$revision = $result['header']['revision'] ?? null;
$count = (int) ($result['count'] ?? 0);
$value = $result['kvs'][0]['value'] ?? null;
use EasySwoole\EtcdClient\Exception\EtcdException;
use EasySwoole\EtcdClient\Exception\TransportException;
try {
$result = $client->range('config/app');
} catch (TransportException $exception) {
// DNS、连接失败、超时或请求编码错误
} catch (EtcdException $exception) {
// etcd 返回错误,或响应内容无法解析
}
use EasySwoole\EtcdClient\Config;
use EasySwoole\EtcdClient\Etcd;
use EasySwoole\EtcdClient\Transport\TransportInterface;
/** @var TransportInterface $transport */
$etcd = new Etcd(new Config(), $transport);