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);