blob: 038d5d5b02fd9ecf23db254ce66ed4fb6f96662d [file] [log] [blame]
divyadesai81bb7ba2020-03-11 11:45:23 +00001package api
2
3// keyringRequest is used for performing Keyring operations
4type keyringRequest struct {
5 Key string
6}
7
8// KeyringResponse is returned when listing the gossip encryption keys
9type KeyringResponse struct {
10 // Whether this response is for a WAN ring
11 WAN bool
12
13 // The datacenter name this request corresponds to
14 Datacenter string
15
16 // Segment has the network segment this request corresponds to.
17 Segment string
18
19 // Messages has information or errors from serf
20 Messages map[string]string `json:",omitempty"`
21
22 // A map of the encryption keys to the number of nodes they're installed on
23 Keys map[string]int
24
25 // The total number of nodes in this ring
26 NumNodes int
27}
28
29// KeyringInstall is used to install a new gossip encryption key into the cluster
30func (op *Operator) KeyringInstall(key string, q *WriteOptions) error {
31 r := op.c.newRequest("POST", "/v1/operator/keyring")
32 r.setWriteOptions(q)
33 r.obj = keyringRequest{
34 Key: key,
35 }
36 _, resp, err := requireOK(op.c.doRequest(r))
37 if err != nil {
38 return err
39 }
40 resp.Body.Close()
41 return nil
42}
43
44// KeyringList is used to list the gossip keys installed in the cluster
45func (op *Operator) KeyringList(q *QueryOptions) ([]*KeyringResponse, error) {
46 r := op.c.newRequest("GET", "/v1/operator/keyring")
47 r.setQueryOptions(q)
48 _, resp, err := requireOK(op.c.doRequest(r))
49 if err != nil {
50 return nil, err
51 }
52 defer resp.Body.Close()
53
54 var out []*KeyringResponse
55 if err := decodeBody(resp, &out); err != nil {
56 return nil, err
57 }
58 return out, nil
59}
60
61// KeyringRemove is used to remove a gossip encryption key from the cluster
62func (op *Operator) KeyringRemove(key string, q *WriteOptions) error {
63 r := op.c.newRequest("DELETE", "/v1/operator/keyring")
64 r.setWriteOptions(q)
65 r.obj = keyringRequest{
66 Key: key,
67 }
68 _, resp, err := requireOK(op.c.doRequest(r))
69 if err != nil {
70 return err
71 }
72 resp.Body.Close()
73 return nil
74}
75
76// KeyringUse is used to change the active gossip encryption key
77func (op *Operator) KeyringUse(key string, q *WriteOptions) error {
78 r := op.c.newRequest("PUT", "/v1/operator/keyring")
79 r.setWriteOptions(q)
80 r.obj = keyringRequest{
81 Key: key,
82 }
83 _, resp, err := requireOK(op.c.doRequest(r))
84 if err != nil {
85 return err
86 }
87 resp.Body.Close()
88 return nil
89}