etseed tutorial
for v0.1.0
etcd is a key-value DB written in Go. It has an HTTP API, which this R package wraps.
etcd API docs
Installing etcd
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.
Start etcd
at the command line
how to start etcd may differ depending on your setup
## Installation
Stable version from CRAN
```r
install.packages("etseed")
```
Development version from GitHub
```r
if (!require("devtools")) install.packages("devtools")
devtools::install_github("ropensci/etseed")
```
```r
library("etseed")
```
## Usage
### Make a client
First task when using this package is to initialize a client
with the `etcd()` function. it's a wrapper around an R6 class.
```r
(client <- etcd())
#>
#> 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.
### Get version
```r
client$version()
#> $etcdserver
#> [1] "3.0.9"
#>
#> $etcdcluster
#> [1] "3.0.0"
```
### Create a directory
```r
client$create("/neighbor", dir = TRUE)
#> $action
#> [1] "set"
#>
#> $node
#> $node$key
#> [1] "/neighbor"
#>
#> $node$dir
#> [1] TRUE
#>
#> $node$modifiedIndex
#> [1] 219
#>
#> $node$createdIndex
#> [1] 219
```
### Create a key
```r
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] 220
#>
#> $node$createdIndex
#> [1] 220
```
Use `ttl` parameter to make it dissappear after `x` seconds
```r
client$create(key = "/stuff", value = "tables", ttl = 5)
#> $action
#> [1] "set"
#>
#> $node
#> $node$key
#> [1] "/stuff"
#>
#> $node$value
#> [1] "tables"
#>
#> $node$expiration
#> [1] "2016-10-13T23:27:23.974782735Z"
#>
#> $node$ttl
#> [1] 5
#>
#> $node$modifiedIndex
#> [1] 221
#>
#> $node$createdIndex
#> [1] 221
```
And the key will be gone after 5 seconds, see:
```r
client$key("/stuff")
#> Error in etcd_GET(sprintf("%s%s/%s/", etcdbase(), "keys", key), ...) :
#> client error: (404) Not Found
```
### Update a key
Create a key
```r
client$create(key = "/foo", value = "bar")
#> $action
#> [1] "set"
#>
#> $node
#> $node$key
#> [1] "/foo"
#>
#> $node$value
#> [1] "bar"
#>
#> $node$modifiedIndex
#> [1] 222
#>
#> $node$createdIndex
#> [1] 222
```
Then update the key
```r
client$update(key = "/foo", value = "bar stool")
#> $action
#> [1] "set"
#>
#> $node
#> $node$key
#> [1] "/foo"
#>
#> $node$value
#> [1] "bar stool"
#>
#> $node$modifiedIndex
#> [1] 223
#>
#> $node$createdIndex
#> [1] 223
#>
#>
#> $prevNode
#> $prevNode$key
#> [1] "/foo"
#>
#> $prevNode$value
#> [1] "bar"
#>
#> $prevNode$modifiedIndex
#> [1] 222
#>
#> $prevNode$createdIndex
#> [1] 222
```
### Create in-order keys
```r
client$create_inorder("/queue", "thing1")
#> $action
#> [1] "create"
#>
#> $node
#> $node$key
#> [1] "/queue/00000000000000000224"
#>
#> $node$value
#> [1] "thing1"
#>
#> $node$modifiedIndex
#> [1] 224
#>
#> $node$createdIndex
#> [1] 224
```
```r
client$create_inorder("/queue", "thing2")
#> $action
#> [1] "create"
#>
#> $node
#> $node$key
#> [1] "/queue/00000000000000000225"
#>
#> $node$value
#> [1] "thing2"
#>
#> $node$modifiedIndex
#> [1] 225
#>
#> $node$createdIndex
#> [1] 225
```
```r
client$create_inorder("/queue", "thing3")
#> $action
#> [1] "create"
#>
#> $node
#> $node$key
#> [1] "/queue/00000000000000000226"
#>
#> $node$value
#> [1] "thing3"
#>
#> $node$modifiedIndex
#> [1] 226
#>
#> $node$createdIndex
#> [1] 226
```
### List keys
```r
client$keys()
#> $action
#> [1] "get"
#>
#> $node
#> $node$dir
#> [1] TRUE
#>
#> $node$nodes
#> $node$nodes[[1]]
#> $node$nodes[[1]]$key
#> [1] "/apylsnuqk"
#>
#> $node$nodes[[1]]$dir
#> [1] TRUE
#>
#> $node$nodes[[1]]$modifiedIndex
#> [1] 207
#>
#> $node$nodes[[1]]$createdIndex
#> [1] 207
#>
#>
#> $node$nodes[[2]]
#> $node$nodes[[2]]$key
#> [1] "/neighbor"
#>
#> $node$nodes[[2]]$dir
#> [1] TRUE
#>
#> $node$nodes[[2]]$modifiedIndex
#> [1] 219
#>
#> $node$nodes[[2]]$createdIndex
#> [1] 219
#>
#>
#> $node$nodes[[3]]
#> $node$nodes[[3]]$key
#> [1] "/foo"
#>
#> $node$nodes[[3]]$value
#> [1] "bar stool"
#>
#> $node$nodes[[3]]$modifiedIndex
#> [1] 223
#>
#> $node$nodes[[3]]$createdIndex
#> [1] 223
#>
#>
#> $node$nodes[[4]]
#> $node$nodes[[4]]$key
#> [1] "/eorgswujl"
#>
#> $node$nodes[[4]]$value
#> [1] "saturn cow and moon cheese"
#>
#> $node$nodes[[4]]$modifiedIndex
#> [1] 213
#>
#> $node$nodes[[4]]$createdIndex
#> [1] 213
#>
#>
#> $node$nodes[[5]]
#> $node$nodes[[5]]$key
#> [1] "/mykey"
#>
#> $node$nodes[[5]]$value
#> [1] "this is awesome"
#>
#> $node$nodes[[5]]$modifiedIndex
#> [1] 220
#>
#> $node$nodes[[5]]$createdIndex
#> [1] 220
#>
#>
#> $node$nodes[[6]]
#> $node$nodes[[6]]$key
#> [1] "/stuff"
#>
#> $node$nodes[[6]]$value
#> [1] "tables"
#>
#> $node$nodes[[6]]$expiration
#> [1] "2016-10-13T23:27:23.974782735Z"
#>
#> $node$nodes[[6]]$ttl
#> [1] 5
#>
#> $node$nodes[[6]]$modifiedIndex
#> [1] 221
#>
#> $node$nodes[[6]]$createdIndex
#> [1] 221
#>
#>
#> $node$nodes[[7]]
#> $node$nodes[[7]]$key
#> [1] "/queue"
#>
#> $node$nodes[[7]]$dir
#> [1] TRUE
#>
#> $node$nodes[[7]]$modifiedIndex
#> [1] 224
#>
#> $node$nodes[[7]]$createdIndex
#> [1] 224
```
### List a key
```r
client$key("/mykey")
#> $action
#> [1] "get"
#>
#> $node
#> $node$key
#> [1] "/mykey"
#>
#> $node$value
#> [1] "this is awesome"
#>
#> $node$modifiedIndex
#> [1] 220
#>
#> $node$createdIndex
#> [1] 220
```
## Citing
> Scott Chamberlain (2016). etseed: Client for 'etcd', a 'Key-value' Database. R package version 0.1.0. https://CRAN.R-project.org/package=etseed
## License and bugs
* License: [MIT](http://opensource.org/licenses/MIT)
* Report bugs at [our GitHub repo for etseed](https://github.com/ropensci/etseed/issues?state=open)
[Back to top](#top)