Documentation
¶
Overview ¶
Package etcdvar provides a runtimevar implementation with variables backed by etcd. Use OpenVariable to construct a *runtimevar.Variable.
URLs ¶
For runtimevar.OpenVariable, etcdvar registers for the scheme "etcd". The default URL opener will dial an etcd server based on the environment variable "ETCD_SERVER_URL". To customize the URL opener, or for more details on the URL format, see URLOpener. See https://github.com/cornelk/go-cloud/concepts/urls/ for background information.
As ¶
etcdvar exposes the following types for As:
- Snapshot: *clientv3.GetResponse
- Error: rpctypes.EtcdError
Example (OpenVariableFromURL) ¶
package main
import (
"context"
"log"
"github.com/cornelk/go-cloud/runtimevar"
)
func main() {
// PRAGMA: This example is used on github.com/cornelk/go-cloud; PRAGMA comments adjust how it is shown and can be ignored.
// PRAGMA: On github.com/cornelk/go-cloud, add a blank import: _ "github.com/cornelk/go-cloud/runtimevar/etcdvar"
// PRAGMA: On github.com/cornelk/go-cloud, hide lines until the next blank line.
ctx := context.Background()
// runtimevar.OpenVariable creates a *runtimevar.Variable from a URL.
// The default opener connects to an etcd server based on the environment
// variable ETCD_SERVER_URL.
v, err := runtimevar.OpenVariable(ctx, "etcd://myvarname?decoder=string")
if err != nil {
log.Fatal(err)
}
defer v.Close()
}
Output:
Index ¶
Examples ¶
Constants ¶
const Scheme = "etcd"
Scheme is the URL scheme etcdvar registers its URLOpener under on runtimevar.DefaultMux.
Variables ¶
This section is empty.
Functions ¶
func OpenVariable ¶
func OpenVariable(cli *clientv3.Client, name string, decoder *runtimevar.Decoder, opts *Options) (*runtimevar.Variable, error)
OpenVariable constructs a *runtimevar.Variable that uses client to watch the variable name on an etcd server. etcd returns raw bytes; provide a decoder to decode the raw bytes into the appropriate type for runtimevar.Snapshot.Value. See the runtimevar package documentation for examples of decoders.
Example ¶
package main
import (
"log"
"github.com/cornelk/go-cloud/runtimevar"
"github.com/cornelk/go-cloud/runtimevar/etcdvar"
"go.etcd.io/etcd/clientv3"
)
func main() {
// PRAGMA: This example is used on github.com/cornelk/go-cloud; PRAGMA comments adjust how it is shown and can be ignored.
// Connect to the etcd server.
client, err := clientv3.NewFromURL("http://your.etcd.server:9999")
if err != nil {
log.Fatal(err)
}
// Construct a *runtimevar.Variable that watches the variable.
v, err := etcdvar.OpenVariable(client, "cfg-variable-name", runtimevar.StringDecoder, nil)
if err != nil {
log.Fatal(err)
}
defer v.Close()
}
Output:
Types ¶
type Options ¶
type Options struct {
// Timeout controls the timeout on RPCs to etcd; timeouts will result in
// errors being returned from Watch. Defaults to 30 seconds.
Timeout time.Duration
}
Options sets options.
type URLOpener ¶
type URLOpener struct {
// The Client to use; required.
Client *clientv3.Client
// Decoder specifies the decoder to use if one is not specified in the URL.
// Defaults to runtimevar.BytesDecoder.
Decoder *runtimevar.Decoder
// Options specifies the options to pass to OpenVariable.
Options Options
}
URLOpener opens etcd URLs like "etcd://mykey?decoder=string".
The host+path is used as the variable name.
The following URL parameters are supported:
- decoder: The decoder to use. Defaults to runtimevar.BytesDecoder. See runtimevar.DecoderByName for supported values.
func (*URLOpener) OpenVariableURL ¶
OpenVariableURL opens a etcdvar Variable for u.