An etcd client library for .Net
Get it on NuGet:
PM> Install-Package Draft
Initialize the Client
var client = Draft.Etcd.ClientFor(new Uri("http://localhost:4001"));
Initialize the Client with multiple endpoints
var endpointPool = await Draft.Endpoints.EndpointPool.Build()
.WithRoutingStrategy(Draft.Endpoints.EndpointRoutingStrategy.RoundRobin)
.WithVerificationStrategy(Draft.Endpoints.EndpointVerificationStrategy.All)
.VerifyAndBuild(
new Uri("http://localhost:4001"),
new Uri("http://localhost:4002"),
new Uri("http://localhost:5002")
);
var client = Draft.Etcd.ClientFor(endpointPool);
Set a key
var keyResult = await client
.UpsertKey("/somekey")
.WithValue("The Value!");
Set a key with an expiration
var keyResult = await client
.UpsertKey("/expiringkey")
.WithValue("I Expire!")
.WithTimeToLive(300 /* seconds */);
Get a key
var keyResult = await client
.GetKey("/somekey");
Get a key with a fully linearized read
var keyResult = await client
.GetKey("/somekey")
.WithQuorum(true);
Delete a key
await client.DeleteKey("/somekey");
Create a directory
var dirResult = await client
.CreateDirectory("/foo");
Create an expiring directory
var dirResult = await client
.CreateDirectory("/foo")
.WithTimeToLive(300 /* seconds */);
Watch a key for a single change
client.WatchOnce("/somekey")
.Subscribe(x => { /* do the thing */ });
Monitor a key and child keys for changes
client.Watch("/somekey")
.WithRecursive(true)
.Subscribe(x => { /* do the thing */ });
Stop monitoring key changes
var disposable = client.Watch("/somekey")
.WithRecursive(true)
.Subscribe(x => { /* do the thing */ });
disposable.Dispose();
Update a key with an expected value
var result = await client
.Atomic
.CompareAndSwap("/atomickey")
.WithExpectedValue("foo")
.WithNewValue("bar");
Delete a key with an expected modified index
var result = await client
.Atomic
.CompareAndDelete("/atomickey")
.WithExpectedIndex(33);
Get cluster members
var members = await client
.Cluster
.GetMembers();
Get cluster leader
var leader = await client
.Cluster
.GetLeader();
Add a cluster member
var memberInfo = await client
.Cluster
.CreateMember()
.WithPeerUri(
new Uri("http://localhost:4002"),
new Uri("http://localhost:5002")
);
Remove a cluster member
await client
.Cluster
.DeleteMember()
.WithMemberId(memberInfo.Id);