Consul 协程客户端
EasySwoole
提供了一个协程安全的 Consul 协程版本客户端,方便用户做分布式的微服务开发。
组件要求
- easyswoole/spl: ^1.1
- easyswoole/http-client: ^1.2.5
安装方法
composer require easyswoole/consul
仓库地址
使用方式
- 使用下面的接口方式,都需要先给
Consul
注入Config
配置。 - 接口只展示用法,具体的命名空间需要开发者自己引入
use EasySwoole\Consul\Config;
use EasySwoole\Consul\Consul;
// config默认 127.0.0.1:8500/v1
$config = new Config([
'IP' => '127.0.0.1',
'port' => '8500',
'version' => 'v1',
]);
$consul = new Consul($config);
// 两种写法,结果相同
$config = new Config();
$config->setIP('127.0.0.1');
$config->setPort('8500');
$config->setVersion('v1');
$consul = new Consul($config);
ACLs
// Bootstrap ACLs
$bootstrap = new Bootstrap();
$this->consul->acl()->bootstrap($bootstrap);
// Check ACL Replication
$replication = new Replication();
$this->consul->acl()->replication($replication);
// Translate Rules
// Translate a Legacy Token's Rules
$translate = new Translate([
'accessor_id' => $accessor_id
]);
$this->consul->acl()->translate($translate);
// Login to Auth Method
$login = new Login([
"authMethod" => $authMethod,
"bearerToken" => $bearerToken
]);
$this->consul->acl()->login($login);
// Logout from Auth Method
$logout = new Logout([
'token' => $header['token']
]);
$this->consul->acl()->logout($logout);
Tokens
// Create a Token
$token = new Token([
"description" => "Agent token for 'node1'",
"Policies" => [
["ID" => "165d4317-e379-f732-ce70-86278c4558f7"],
["Name" => "node-read"],
],
"Local" => false,
]);
$this->consul->acl()->token($token);
// Read a Token
$token = new Token([
"AccessorID" => "6a1253d2-1785-24fd-91c2-f8e78c745511"
]);
$this->consul->acl()->readToken($token);
// Read Self Token
$self = new Token\GetSelf([
'token' => "6a1253d2-1785-24fd-91c2-f8e78c745511"
]);
$this->consul->acl()->self($self);
// Update a Token
$update = new Token([
'accessorID' => '6a1253d2-1785-24fd-91c2-f8e78c745511',
"Description" => "Agent token for 'node1'",
"Policies" => [],
"local" => false
]);
$this->consul->acl()->updateToken($update);
// Clone a Token
$clone = new Token\CloneToken([
'accessorID' => '8f246b77-f3e1-ff88-5b48-8ec93abf3e05',
"description" => "Clone of Agent token for 'node1'",
]);
$this->consul->acl()->cloneToken($clone);
// Delete a Token
$delete = new Token([
'AccessorID' => '8f246b77-f3e1-ff88-5b48-8ec93abf3e05'
]);
$this->consul->acl()->delete($delete);
// List Tokens
$token = new Tokens();
$this->consul->acl()->tokens($token);
Legacy Tokens
// Create ACL Token
$create = new Create([
"Name" => "my-app-token",
"Type" => "client",
"rules" => "a"
]);
$this->consul->acl()->create($create);
// Update ACL Token
$update = new Update([
"id" => "adf4238a-882b-9ddc-4a9d-5b6758e4159e",
"Name" => "my-app-token-updated",
"Type" => "client",
"Rules" => "# New Rules",
]);
$this->consul->acl()->update($update);
// Delete ACL Token
$delete = new Destroy([
'uuid' => '8f246b77-f3e1-ff88-5b48-8ec93abf3e05'
]);
$this->consul->acl()->destroy($delete);
// Read ACL Token
$info = new Info([
'uuid' => '8f246b77-f3e1-ff88-5b48-8ec93abf3e05'
]);
$this->consul->acl()->info($info);
// Clone ACL Token
$cloneAclToken = new CloneACLToken([
'uuid' => '8f246b77-f3e1-ff88-5b48-8ec93abf3e05'
]);
$this->consul->acl()->cloneAclToken($cloneAclToken);
// List ACLs
$getList = new Lists();
$this->consul->acl()->getList($getList);
$this->assertEquals('x','x');
Policies
// Create a Policy
$policy = new Policy([
"Name" => "node-read",
"Description" => "Grants read access to all node information",
"Rules" => "node_prefix \"\" { policy = \"read\"}",
"datacenters" => ["dc1"]
]);
$this->consul->acl()->policy($policy);
// Read a Policy
$policy = new Policy([
'id' => 'c01a1f82-44be-41b0-a686-685fb6e0f485',
]);
$this->consul->acl()->readPolicy($policy);
// Update a Policy
$policy = new Policy([
"ID" => "c01a1f82-44be-41b0-a686-685fb6e0f485",
"Name" => "register-app-service",
"Description" => "Grants write permissions necessary to register the 'app' service",
"Rules" => "service \"app\" { policy = \"write\"}",
]);
$this->consul->acl()->updatePolicy($policy);
// Delete a Policy
$policy = new Policy([
'id' => 'c01a1f82-44be-41b0-a686-685fb6e0f485'
]);
$this->consul->acl()->deletePolicy($policy);
// List Policies
$policies = new Policies();
$this->consul->acl()->policies($policies);
Roles
// Create a Role
$role = new Role([
"name" => "example-role",
"description" => "Showcases all input parameters",
]);
$this->consul->acl()->role($role);
// Read a Role
$role = new Role([
'id' => 'aa770e5b-8b0b-7fcf-e5a1-8535fcc388b4'
]);
$this->consul->acl()->readRole($role);
// Read a Role by Name
$name = new Role([
'name' => 'example-role'
]);
$this->consul->acl()->readRoleByName($name);
// Update a Role
$role = new Role([
'id' => 'aa770e5b-8b0b-7fcf-e5a1-8535fcc388b4',
"name" => "example-two",
]);
$this->consul->acl()->updateRole($role);
// Delete a Role
$role = new Role([
'id' => 'aa770e5b-8b0b-7fcf-e5a1-8535fcc388b4'
]);
$this->consul->acl()->deleteRole($role);
// List Roles
$roles = new Roles();
$this->consul->acl()->roles($roles);
Auth Method
// Create an Auth Method
$method = new AuthMethod([
"Name" => "minikube",
"Type" => "kubernetes",
"Description" => "dev minikube cluster",
"Config" => [
"Host" => "https://192.0.2.42:8443",
"CACert" => "-----BEGIN CERTIFICATE-----\n...-----END CERTIFICATE-----\n",
"ServiceAccountJWT" => "eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9..."
]
]);
$this->consul->acl()->authMethod($method);
// Read an Auth Method
$method = new AuthMethod([
'name' => 'minikube',
]);
$this->consul->acl()->readAuthMethod($method);
// Update an Auth Method
$method = new AuthMethod([
"Name" => "minikube",
"Type" => "kubernetes",
"Description" => "dev minikube cluster",
"Config" => [
"Host" => "https://192.0.2.42:8443",
"CACert" => "-----BEGIN CERTIFICATE-----\n...-----END CERTIFICATE-----\n",
"ServiceAccountJWT" => "eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9..."
]
]);
$this->consul->acl()->updateAuthMethod($method);
// Delete an Auth Method
$method = new AuthMethod([
"Name" => "minikube",
]);
$this->consul->acl()->deleteAuthMethod($method);
// List Auth Methods
$method = new AuthMethods();
$this->consul->acl()->authMethods($method);
Binding Rules
// Create a Binding Rule
$bindingRule = new BindingRule([
"description" => "example rule",
"authMethod" => "minikube",
"Selector" => "serviceaccount.namespace==default",
"BindType" => "service",
"BindName" => "{{ serviceaccount.name }}"
]);
$this->consul->acl()->bindingRule($bindingRule);
// Read a Binding Rule
$bindingRule = new BindingRule([
'id' => '000ed53c-e2d3-e7e6-31a5-c19bc3518a3d',
]);
$this->consul->acl()->readBindingRule($bindingRule);
// Update a Binding Rule
$bindingRule = new BindingRule([
'id' => '000ed53c-e2d3-e7e6-31a5-c19bc3518a3d',
"Description" => "updated rule",
"authMethod" => "minikube",
"Selector" => "serviceaccount.namespace=dev",
"BindType" => "role",
"BindName" => "{{ serviceaccount.name }}",
]);
$this->consul->acl()->updateBindingRule($bindingRule);
// Delete a Binding Rule
$bindingRule = new BindingRule([
'id' => '000ed53c-e2d3-e7e6-31a5-c19bc3518a3d',
]);
$this->consul->acl()->deleteBindingRule($bindingRule);
// List Binding Rules
$bindingRules = new BindingRules();
$this->consul->acl()->bindingRules($bindingRules);
Agent
// List Members
$this->consul->agent()->members(new Members([
'wan' => 'a',
'segment' => 'b',
]));
// Read Configuration
$self = new SelfParams();
$this->consul->agent()->self($self);
// Reload Agent
$reload = new Reload();
$this->consul->agent()->reload($reload);
// Enable Maintenance Mode
$maintenance = new Maintenance([
'enable' => true,
'reason' => 'whatever',
]);
$this->consul->agent()->maintenance($maintenance);
// View Metrics
$metrics = new Metrics([
'format' => 'prometheus',
]);
$this->consul->agent()->metrics($metrics);
// Stream Logs
$monitor = new Monitor([
'loglevel' => 'info',
]);
$this->consul->agent()->monitor($monitor);
// Join Agent
$join = new Join([
'address' => '1.2.3.4',
'wan' => false
]);
$this->consul->agent()->join($join);
// Graceful Leave and Shutdown
$leave = new Leave();
$this->consul->agent()->leave($leave);
// Force Leave and Shutdown
$forceLeave = new ForceLeave([
'node' => 'consul'
]);
$this->consul->agent()->forceLeave($forceLeave);
// Update ACL Tokens
$token = new Token([
'action' => 'acl_agent_token',
'token' => 'token'
]);
$this->consul->agent()->token($token);
Checks
// List Checks
$checks = new Checks([
'filter' => '',
]);
$this->consul->agent()->checks($checks);
// Register Check
$register = new Register([
'name' => 'Memory_utilization', // 不可以出现空格或者其他url中不允许出现的特殊字符,否则取消注册的check_id会报400 error
"notes" => "Ensure we don't oversubscribe memory",
"DeregisterCriticalServiceAfter" => "90m",
"Args" => ["/usr/local/bin/check_mem.py"],
"DockerContainerID" => "f972c95ebf0e",
"Shell" => "/bin/bash",
"HTTP" => "https://example.com",
"Method" => "POST",
"Header" => ["x-foo" => ["bar", "baz"]],
"TCP" => "example.com:22",
"Interval" => "10s",
"TTL" => "15s",
"TLSSkipVerify" => true,
]);
$this->consul->agent()->register($register);
// Deregister Check
$deRegister = new DeRegister([
'check_id' => 'Memory_utilization'
]);
$this->consul->agent()->deRegister($deRegister);
// TTL Check Pass
$pass = new Pass([
'check_id' => 'Memory_utilization',
'note' => 'consul',
]);
$this->consul->agent()->pass($pass);
// TTL Check Warn
$warn = new Warn([
'check_id' => 'Memory_utilization',
'note' => 'consul',
]);
$this->consul->agent()->warn($warn);
// TTL Check Fail
$fail = new Fail([
'check_id' => 'Memory_utilization',
'note' => 'consul',
]);
$this->consul->agent()->fail($fail);
// TTL Check Update
$update = new Update([
'check_id' => 'Memory_utilization',
'Status' => 'passing',
'Output' => 'update success'
]);
$this->consul->agent()->update($update);
Services
// List Services
$services = new Services([
'filter' => '',
]);
$this->consul->agent()->services($services);
// Get Service Configuration
$service = new Service([
'service_id' => "consul"
]);
$this->consul->agent()->service($service);
// Get local service health
$name = new Name([
'service_name' => 'consul',
'format' => 'text',
]);
$this->consul->agent()->name($name);
// Get local service health by its ID
$id = new ID([
'service_id' => 'consul',
'format' => 'text',
]);
$this->consul->agent()->id($id);
// Register Service
$register = new Service\Register([
"ID" => "redis1",
"name" => "redis",
"Tags" => [
"primary",
"v1"
],
"Address" => "127.0.0.1",
"Port" => 8000,
"meta" => [
"redis_version" => "4.0",
],
"EnableTagOverride" => false,
"Check" => [
"DeregisterCriticalServiceAfter" => "90m",
"Args" => ["/usr/local/bin/check_redis.py"],
"HTTP" => "http://localhost:5000/health",
"Interval" => "10s",
"TTL" => "15s"
],
"weights" => [
"Passing" => 10,
"Warning" => 1
]
]);
$this->consul->agent()->serviceRegister($register);
// Deregister Service
$deregister = new Service\DeRegister([
'service_id' => 'consul',
]);
$this->consul->agent()->serviceDeregister($deregister);
// Enable Maintenance Mode
$maintenance= new Service\Maintenance([
'service_id' => 'consul',
'enable' => true,
'reason' => ''
]);
$this->consul->agent()->serviceMaintenance($maintenance);
Connect
// Authorize
$authorize = new Authorize([
"target" => "db",
"clientCertURI" => "spiffe://dc1-7e567ac2-551d-463f-8497-f78972856fc1.consul/ns/default/dc/dc1/svc/web",
"clientCertSerial" => "04:00:00:00:00:01:15:4b:5a:c3:94"
]);
$this->consul->agent()->authorize($authorize);
// Certificate Authority (CA) Roots
$roots = new Roots();
$this->consul->agent()->roots($roots);
// Service Leaf Certificate
$leaf = new Leaf([
'service' => 'consul'
]);
$this->consul->agent()->leaf($leaf);
Catalog
// Register Entity
$register = new Register([
"datacenter" => "dc1",
"id" => "40e4a748-2192-161a-0510-9bf59fe950b5",
"node" => "foobar",
"Address" => "192.168.10.10",
"TaggedAddresses" => [
"lan" => "192.168.10.10",
"wan" => "10.0.10.10"
],
"NodeMeta" => [
"somekey" => "somevalue"
],
"Service" => [
"ID" => "redis1",
"Service" => "redis",
"Tags" => [
"primary",
"v1"
],
"Address" => "127.0.0.1",
"TaggedAddresses" => [
"lan" => [
"address" => "127.0.0.1",
"port" => 8000,
],
"wan" => [
"address" => "198.18.0.1",
"port" => 80
]
],
"Meta" => [
"redis_version" => "4.0"
],
"Port" => 8000
],
"Check" => [
"Node" => "foobar",
"CheckID" => "service:redis1",
"Name" => "Redis health check",
"Notes" => "Script based health check",
"Status" => "passing",
"ServiceID" => "redis1",
"Definition" => [
"TCP" => "localhost:8888",
"Interval" => "5s",
"Timeout" => "1s",
"DeregisterCriticalServiceAfter" => "30s"
]
],
"SkipNodeUpdate" => false
]);
$this->consul->catalog()->register($register);
// Deregister Entity
$deregister = new Deregister([
"datacenter" => "dc1",
"node" => "foobar",
"CheckID" => "service:redis1",
]);
$this->consul->catalog()->deRegister($deregister);
// List Datacenters
$datacenters = new Datacenters();
$this->consul->catalog()->dataCenters($datacenters);
// List Nodes
$nodes = new Nodes([
'dc' => 'dc1',
'node-meta' => '',
'near' => '',
'filter' => '',
]);
$this->consul->catalog()->nodes($nodes);
// List Services
$nodes = new Nodes([
$services = new Services([
'dc' => 'dc1',
'node-meta' => '',
]);
$this->consul->catalog()->services($services);
]);
$this->consul->catalog()->nodes($nodes);
// List Nodes for Service
$services = new Services([
'dc' => 'a',
'node-meta' => 'b',
]);
$this->consul->catalog()->services($services);
// List Nodes for Connect-capable Service
$service = new Service([
'service' => 'consul',
'dc' => 'dc1',
'tag' => '',
'near' => '',
'node-meta' => '',
'filter' => '',
]);
$this->consul->catalog()->service($service);
// List Services for Node
$connect = new Connect([
'service' => 'consul',
'dc' => 'dc1',
'tag' => '',
'near' => '',
'node-meta' => '',
'filter' => '',
]);
$this->consul->catalog()->connect($connect);
// List Services for Node
$node = new Node([
'node' => '2eb87046a6fe',
'dc' => 'dc1',
'filter' => '',
]);
$this->consul->catalog()->node($node);
Config
// Apply Configuration
$config = new \EasySwoole\Consul\Request\Config([
'Kind' => 'service-defaults',
'Name' => 'web',
'Protocol' => 'Http'
]);
$this->consul->config()->config($config);
// Get Configuration
$config = new \EasySwoole\Consul\Request\Config([
'Kind' => 'service-defaults',
'name' => 'web',
]);
$this->consul->config()->getConfig($config);
// List Configurations
$config = new \EasySwoole\Consul\Request\Config([
'Kind' => 'service-defaults'
]);
$this->consul->config()->listConfig($config);
// Delete Configuration
$config = new \EasySwoole\Consul\Request\Config([
'Kind' => 'service-defaults',
'name' => 'web',
]);
$this->consul->config()->deleteConfig($config);
Connect
Certificate Authority (CA)
// List CA Root Certificates
$roots = new Roots();
$this->consul->connect()->roots($roots);
// Get CA Configuration
$configuration = new Configuration();
$this->consul->connect()->configuration($configuration);
// Update CA Configuration
$configuration = new Configuration([
'Provider' => 'consul',
'Config' => [
'LeafCertTTL' => '72h'
]
]);
$this->consul->connect()->updateConfiguration($configuration);
Intentions
// Create Intention
$intentions = new Intentions([
'SourceName' => 'web',
'DestinationName' => 'db',
'SourceType' => 'consul',
'action' => 'allow'
]);
$this->consul->connect()->intentions($intentions);
// Read Specific Intention
$intentions = new Intentions([
'uuid' => 'e9ebc19f-d481-42b1-4871-4d298d3acd5c',
]);
$this->consul->connect()->readIntention($intentions);
// List Intentions
$intentions = new Intentions();
$this->consul->connect()->listIntention($intentions);
// Update Intention
$intentions = new Intentions([
'uuid' => 'b40faaf3-34aa-349f-3cf2-f5d720240662',
'description' => 'just a test description',
'SourceName' => '',
'DestinationName' => '',
'Action' => 'allow'
]);
$this->consul->connect()->updateIntention($intentions);
// Delete Intention
$intentions = new Intentions([
'uuid' => 'b40faaf3-34aa-349f-3cf2-f5d720240662',
]);
$this->consul->connect()->deleteIntention($intentions);
// Check Intention Result
$intentions = new Intentions\Check([
'source' => 'web',
'destination' => 'db',
]);
$this->consul->connect()->check($intentions);
// List Matching Intentions
$intentions = new Intentions\Match([
'by' => 'source',
'name' => 'web',
]);
$this->consul->connect()->match($intentions);
Coordinate
// Read WAN Coordinates
$datacenters = new Datacenters();
$this->consul->coordinates()->datacenters($datacenters);
// Read LAN Coordinates for all nodes
$nodes = new Nodes([]);
$this->consul->coordinates()->nodes($nodes);
// Read LAN Coordinates for a node
$node = new Node([
'node' => '2456c2850382',
]);
$this->consul->coordinates()->node($node);
// Update LAN Coordinates for a node
$update = new Update([
'dc' => 'dc1',
'node' => '2456c2850382',
'Segment' => 'update',
"Coord" => [
"Adjustment" => 0,
"Error" => 1.5,
"Height" => 0,
"Vec" => [0, 0, 0, 0, 0, 0, 0, 0]
]
]);
$this->consul->coordinates()->update($update);
Events
// Fire Event
$fire = new Fire([
'name' => 'consul',
'dc' => 'dc1',
]);
$this->consul->event()->fire($fire);
// List Events
$listEvent = new ListEvent([
'name' => 'consul',
]);
$this->consul->event()->listEvent($listEvent);
Health
// List Checks for Node
$node = new Node([
'node' => '2456c2850382',
'dc' => 'dc1',
]);
$this->consul->health()->node($node);
// List Checks for Service
$checks = new Checks([
'service' => 'consul',
'node_meta' => 'node-meta',
]);
$this->consul->health()->checks($checks);
// List Nodes for Service
$service = new Service([
'service' => 'consul',
'dc' => 'dc1',
]);
$this->consul->health()->service($service);
// List Nodes for Connect-capable Service
$connect = new Connect([
'service' => 'consul'
]);
$this->consul->health()->connect($connect);
// List Checks in State
$state = new State([
'state' => 'passing'
]);
$this->consul->health()->state($state);
KV Store
// Read Key
$kv = new Kv([
'key' => 'my-key',
'dc' => 'dc1',
]);
$this->consul->kvStore()->kv($kv);
// Create Key
$create = new kv([
'key' => 'my-key',
'dc' => 'dc1',
]);
$this->consul->kvStore()->create($create);
// Update Key
$update = new kv([
'key' => 'my-key',
'dc' => 'dc1',
]);
$this->consul->kvStore()->update($update);
// Delete Key
$delete = new Kv([
'key' => 'my-key',
'recurse' => false,
]);
$this->consul->kvStore()->delete($delete);
Operator
Area
// Create Network Area
$area = new Area([
'PeerDatacenter' => 'dc1',
"RetryJoin" => [ "10.1.2.3", "10.1.2.4", "10.1.2.5" ],
"UseTLS" => false
]);
$this->consul->operator()->area($area);
// List Network Areas
$area = new Area([
'dc' => 'dc1',
'uuid' => '10275a2e-aa8f-2cf3-0adf-ff03d8950902',
]);
$this->consul->operator()->areaList($area);
// List Specific Network Area
$area = new Area([
'dc' => 'dc1',
'uuid' => '10275a2e-aa8f-2cf3-0adf-ff03d8950902',
]);
$this->consul->operator()->areaList($area);
// Update Network Area
$area = new Area([
'uuid' => '10275a2e-aa8f-2cf3-0adf-ff03d8950902',
'UseTLS' => true,
'dc' => 'dc1',
]);
$this->consul->operator()->updateArea($area);
// Delete Network Area
$area = new Area([
'uuid' => '10275a2e-aa8f-2cf3-0adf-ff03d8950902',
]);
$this->consul->operator()->deleteArea($area);
// Join Network Area
$area = new Area([
'uuid' => '10275a2e-aa8f-2cf3-0adf-ff03d8950902',
]);
$this->consul->operator()->joinArea($area);
// List Network Area Members
$area = new Area([
'uuid' => '10275a2e-aa8f-2cf3-0adf-ff03d8950902'
]);
$this->consul->operator()->membersArea($area);
Autopilot
// Read Configuration
$configuration = new Configuration([
'dc' => 'dc1',
'stale' => true,
]);
$this->consul->operator()->getConfiguration($configuration);
// Update Configuration
$configuration = new Configuration([
'dc' => 'dc1',
'stale' => true,
"cleanupDeadServers" => true,
"lastContactThreshold" => "200ms",
"MaxTrailingLogs" => 250,
"ServerStabilizationTime" => "10s",
"RedundancyZoneTag" => "",
"DisableUpgradeMigration" => false,
"UpgradeVersionTag" => "",
]);
$this->consul->operator()->updateConfiguration($configuration);
// Read Health
$health = new Health([
'dc' => 'dc1',
]);
$this->consul->operator()->health($health);
Keyring
// List Gossip Encryption Keys
$keyring = new Keyring();
$keyring->setRelayFactor(0);
$keyring->setLocalOnly(false);
$this->consul->operator()->getKeyring($keyring);
// Add New Gossip Encryption Key
$keyring = new Keyring([
"Key" => "3lg9DxVfKNzI8O+IQ5Ek+Q==",
'relayFactor' => 1,
]);
$this->consul->operator()->addKeyring($keyring);
// Change Primary Gossip Encryption Key
$keyring = new Keyring([
"Key" => "3lg9DxVfKNzI8O+IQ5Ek+Q==",
]);
$this->consul->operator()->changeKeyring($keyring);
// Delete Gossip Encryption Key
$keyring = new Keyring([
"Key" => "3lg9DxVfKNzI8O+IQ5Ek+Q==",
"relayFactor" => 1
]);
$this->consul->operator()->deleteKeyring($keyring);
License
// Getting the Consul License
$license = new License([
'dc' => 'dc1',
]);
$this->consul->operator()->getLicense($license);
// Updating the Consul License
$license = new License([
'dc' => 'dc1'
]);
$this->consul->operator()->updateLicense($license);
// Resetting the Consul License
$license = new License([
'dc' => 'dc1'
]);
$this->consul->operator()->resetLicense($license);
Raft
// Read Configuration
$raft = new \EasySwoole\Consul\Request\Operator\Raft\Configuration();
$this->consul->operator()->getRaftConfiguration($raft);
// Delete Raft Peer
$peer = new Peer([
'address' => '172.17.0.18:8301',
'dc' => 'dc1',
]);
$this->consul->operator()->peer($peer);
Segment
// List Network Segments
$segment = new Segment();
$this->consul->operator()->segment($segment);
Prepared Query
// Create Prepared Query
$query = new Query([
"name" => "my-query",
"Session" => "adf4238a-882b-9ddc-4a9d-5b6758e4159e",
"Token" => "11",
"Service" => [
"Service" => "redis",
"Failover" => [
"NearestN" => 3,
"Datacenters" => ["dc1", "dc2"]
],
"Near" => "node1",
"OnlyPassing" => false,
"Tags" => ["primary", "!experimental"],
"NodeMeta" => ["instance_type" => "m3.large"],
"ServiceMeta" => ["environment" => "production"]
],
"DNS" => [
"TTL" => "10s"
],
]);
$this->consul->query()->query($query);
// Read Prepared Query
$query = new Query([
'dc' => 'dc1'
]);
$this->consul->query()->readQuery($query);
// Update Prepared Query
$query = new Query([
'uuid' => '90dce5ca-5697-ae2f-09ae-51e9542ea58c',
'dc' => 'dc1',
]);
$this->consul->query()->updateQuery($query);;
// Read Prepared Query
$query = new Query([
'dc' => 'dc1'
]);
$this->consul->query()->readQuery($query);
// Delete Prepared Query
$query = new Query([
'uuid' => '90dce5ca-5697-ae2f-09ae-51e9542ea58c'
]);
$this->consul->query()->deleteQuery($query);;
// Execute Prepared Query
$execute = new Query\Execute([
'uuid' => '90dce5ca-5697-ae2f-09ae-51e9542ea58c',
'dc' => 'dc1',
]);
$this->consul->query()->execute($execute);
// Explain Prepared Query
$execute = new Query\Explain([
'uuid' => '90dce5ca-5697-ae2f-09ae-51e9542ea58c',
'dc' => 'dc1',
]);
$this->consul->query()->explain($execute);
Sessions
// Create Session
$create = new Create([
'dc' => 'dc1',
"LockDelay" => "15s",
"Name" => "my-service-lock",
"Node" => "foobar",
"Checks" => ["a", "b", "c"],
"Behavior" => "release",
"TTL" => "30s",
]);
$this->consul->session()->create($create);
// Delete Session
$destroy = new Destroy([
'uuid' => 'f32a15b3-1baa-c047-bde9-bec3015ea013',
'dc' => 'dc1',
]);
$this->consul->session()->destroy($destroy);
// Read Session
$info = new Info([
'uuid' => 'f32a15b3-1baa-c047-bde9-bec3015ea013',
'dc' => 'dc1',
]);
$this->consul->session()->info($info);
// List Sessions for Node
$node = new Node([
'node' => '2456c2850382',
'dc' => 'dc1',
]);
$this->consul->session()->node($node);
// List Sessions
$sessionList = new SessionList([
'dc' => 'dc1'
]);
$this->consul->session()->sessionList($sessionList);
// Renew Session
$renew = new Renew([
'uuid' => '4f6d1cf6-b60a-c929-eeb8-12f4d7eaff62',
'dc' => 'dc1'
]);
$this->consul->session()->renew($renew);
Snapshots
// Generate Snapshot
$generate = new Snapshot([
'dc' => 'dc1',
'stale' => 'true',
]);
$this->consul->snapshot()->generate($generate);
// Restore Snapshot
$restore = new Snapshot();
$this->consul->snapshot()->restore($restore);
Status
// Get Raft Leader
$leader = new Leader();
$this->consul->status()->leader($leader);
// List Raft Peers
$peers = new Peers([
'dc' => 'dc1',
]);
$this->consul->status()->peers($peers);
Transactions
// Create Transaction
$transaction = new Txn([]);
$this->consul->transaction()->create($transaction);
$node = new Node([
'node' => '44e4656a94cd',
'dc' => 'dc1',
'filter' => '',
]);
$consul->catalog()->node($node);