package api
// keyringRequest is used for performing Keyring operations
type keyringRequest struct {
Key string
}
// KeyringResponse is returned when listing the gossip encryption keys
type KeyringResponse struct {
// Whether this response is for a WAN ring
WAN bool
// The datacenter name this request corresponds to
Datacenter string
// Segment has the network segment this request corresponds to.
Segment string
// Messages has information or errors from serf
Messages map [ string ] string ` json:",omitempty" `
// A map of the encryption keys to the number of nodes they're installed on
Keys map [ string ] int
// The total number of nodes in this ring
NumNodes int
}
// KeyringInstall is used to install a new gossip encryption key into the cluster
func ( op * Operator ) KeyringInstall ( key string , q * WriteOptions ) error {
r := op . c . newRequest ( "POST" , "/v1/operator/keyring" )
r . setWriteOptions ( q )
r . obj = keyringRequest {
Key : key ,
}
_ , resp , err := requireOK ( op . c . doRequest ( r ) )
if err != nil {
return err
}
resp . Body . Close ( )
return nil
}
// KeyringList is used to list the gossip keys installed in the cluster
func ( op * Operator ) KeyringList ( q * QueryOptions ) ( [ ] * KeyringResponse , error ) {
r := op . c . newRequest ( "GET" , "/v1/operator/keyring" )
r . setQueryOptions ( q )
_ , resp , err := requireOK ( op . c . doRequest ( r ) )
if err != nil {
return nil , err
}
defer resp . Body . Close ( )
var out [ ] * KeyringResponse
if err := decodeBody ( resp , & out ) ; err != nil {
return nil , err
}
return out , nil
}
// KeyringRemove is used to remove a gossip encryption key from the cluster
func ( op * Operator ) KeyringRemove ( key string , q * WriteOptions ) error {
r := op . c . newRequest ( "DELETE" , "/v1/operator/keyring" )
r . setWriteOptions ( q )
r . obj = keyringRequest {
Key : key ,
}
_ , resp , err := requireOK ( op . c . doRequest ( r ) )
if err != nil {
return err
}
resp . Body . Close ( )
return nil
}
// KeyringUse is used to change the active gossip encryption key
func ( op * Operator ) KeyringUse ( key string , q * WriteOptions ) error {
r := op . c . newRequest ( "PUT" , "/v1/operator/keyring" )
r . setWriteOptions ( q )
r . obj = keyringRequest {
Key : key ,
}
_ , resp , err := requireOK ( op . c . doRequest ( r ) )
if err != nil {
return err
}
resp . Body . Close ( )
return nil
}