etcd
is a key-value DB written in Go
. It has an HTTP API, which this R package wraps.
See the etcd Github repo for help on installing etcd
.
There are various ways to install it, and they depend on your operating sytsem.
You can install via homebrew
, install from source, and via Docker.
at the command line
etcd
how to start etcd may differ depending on your setup
Install etseed
install.packages("etseed")
Development version
install.packages("devtools")
devtools::install_github("ropensci/etseed")
library("etseed")
First task when using this package is to initialize a client
with the etcd()
function. it's a wrapper around an R6 class.
(client <- etcd())
#> <etcd client>
#> host: 127.0.0.1
#> port: 2379
#> api_version: v2
#> scheme: http
#> allow redirect: TRUE
Default settings in etcd()
connect you to localhost
, and port 2379
,
using etcd API version 2, with an http
scheme.
client$version()
#> $etcdserver
#> [1] "3.0.7"
#>
#> $etcdcluster
#> [1] "3.0.0"
client$create("/neighbor", dir = TRUE)
#> $action
#> [1] "set"
#>
#> $node
#> $node$key
#> [1] "/neighbor"
#>
#> $node$dir
#> [1] TRUE
#>
#> $node$modifiedIndex
#> [1] 14
#>
#> $node$createdIndex
#> [1] 14
client$create(key = "/mykey", value = "this is awesome")
#> $action
#> [1] "set"
#>
#> $node
#> $node$key
#> [1] "/mykey"
#>
#> $node$value
#> [1] "this is awesome"
#>
#> $node$modifiedIndex
#> [1] 16
#>
#> $node$createdIndex
#> [1] 16
Use ttl
parameter to make it dissappear after x
seconds
client$create(key = "/stuff", value = "tables", ttl = 5)
#> $action
#> [1] "set"
#>
#> $node
#> $node$key
#> [1] "/stuff"
#>
#> $node$value
#> [1] "tables"
#>
#> $node$expiration
#> [1] "2016-09-02T21:40:59.617130434Z"
#>
#> $node$ttl
#> [1] 5
#>
#> $node$modifiedIndex
#> [1] 17
#>
#> $node$createdIndex
#> [1] 17
And the key will be gone after 5 seconds, see:
client$key("/stuff")
#> Error in etcd_GET(sprintf("%s%s/%s/", etcdbase(), "keys", key), ...) :
#> client error: (404) Not Found
Create a key
client$create(key = "/foo", value = "bar")
#> $action
#> [1] "set"
#>
#> $node
#> $node$key
#> [1] "/foo"
#>
#> $node$value
#> [1] "bar"
#>
#> $node$modifiedIndex
#> [1] 19
#>
#> $node$createdIndex
#> [1] 19
Then update the key
client$update(key = "/foo", value = "bar stool")
#> $action
#> [1] "set"
#>
#> $node
#> $node$key
#> [1] "/foo"
#>
#> $node$value
#> [1] "bar stool"
#>
...
client$create_inorder("/queue", "thing1")
#> $action
#> [1] "create"
#>
#> $node
#> $node$key
#> [1] "/queue/00000000000000000021"
#>
#> $node$value
#> [1] "thing1"
#>
#> $node$modifiedIndex
#> [1] 21
#>
#> $node$createdIndex
#> [1] 21
client$create_inorder("/queue", "thing2")
#> $action
#> [1] "create"
#>
#> $node
#> $node$key
#> [1] "/queue/00000000000000000022"
#>
#> $node$value
#> [1] "thing2"
#>
#> $node$modifiedIndex
#> [1] 22
#>
#> $node$createdIndex
#> [1] 22
client$create_inorder("/queue", "thing3")
#> $action
#> [1] "create"
#>
#> $node
#> $node$key
#> [1] "/queue/00000000000000000023"
#>
#> $node$value
#> [1] "thing3"
#>
#> $node$modifiedIndex
#> [1] 23
#>
#> $node$createdIndex
#> [1] 23
client$keys()
#> $action
#> [1] "get"
#>
#> $node
#> $node$dir
#> [1] TRUE
#>
#> $node$nodes
#> $node$nodes[[1]]
#> $node$nodes[[1]]$key
...
client$key("/mykey")
#> $action
#> [1] "get"
#>
#> $node
#> $node$key
#> [1] "/mykey"
#>
#> $node$value
#> [1] "this is awesome"
#>
#> $node$modifiedIndex
#> [1] 16
#>
#> $node$createdIndex
#> [1] 16