etcd R client
etcd
is a key-value DB written in Go
. It has an HTTP API, which this R package wraps.
Development follows closely the newest version of etcd
released by the Coreos folks. As of 2016-09-07 that's etcd v3.0.7
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] 156
#>
#> $node$createdIndex
#> [1] 156
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] 158
#>
#> $node$createdIndex
#> [1] 158
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-07T17:21:08.993528228Z"
#>
#> $node$ttl
#> [1] 5
#>
#> $node$modifiedIndex
#> [1] 159
#>
#> $node$createdIndex
#> [1] 159
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] 161
#>
#> $node$createdIndex
#> [1] 161
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/00000000000000000163"
#>
#> $node$value
#> [1] "thing1"
#>
#> $node$modifiedIndex
#> [1] 163
#>
#> $node$createdIndex
#> [1] 163
client$create_inorder("/queue", "thing2")
#> $action
#> [1] "create"
#>
#> $node
#> $node$key
#> [1] "/queue/00000000000000000164"
#>
#> $node$value
#> [1] "thing2"
#>
#> $node$modifiedIndex
#> [1] 164
#>
#> $node$createdIndex
#> [1] 164
client$create_inorder("/queue", "thing3")
#> $action
#> [1] "create"
#>
#> $node
#> $node$key
#> [1] "/queue/00000000000000000165"
#>
#> $node$value
#> [1] "thing3"
#>
#> $node$modifiedIndex
#> [1] 165
#>
#> $node$createdIndex
#> [1] 165
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] 158
#>
#> $node$createdIndex
#> [1] 158
citation(package = 'etseed')