github.com/flavio/docker@v0.1.3-0.20170117145210-f63d1a6eec47/daemon/cluster/secrets.go (about) 1 package cluster 2 3 import ( 4 apitypes "github.com/docker/docker/api/types" 5 types "github.com/docker/docker/api/types/swarm" 6 "github.com/docker/docker/daemon/cluster/convert" 7 swarmapi "github.com/docker/swarmkit/api" 8 ) 9 10 // GetSecret returns a secret from a managed swarm cluster 11 func (c *Cluster) GetSecret(id string) (types.Secret, error) { 12 c.mu.RLock() 13 defer c.mu.RUnlock() 14 15 state := c.currentNodeState() 16 if !state.IsActiveManager() { 17 return types.Secret{}, c.errNoManager(state) 18 } 19 20 ctx, cancel := c.getRequestContext() 21 defer cancel() 22 23 r, err := state.controlClient.GetSecret(ctx, &swarmapi.GetSecretRequest{SecretID: id}) 24 if err != nil { 25 return types.Secret{}, err 26 } 27 28 return convert.SecretFromGRPC(r.Secret), nil 29 } 30 31 // GetSecrets returns all secrets of a managed swarm cluster. 32 func (c *Cluster) GetSecrets(options apitypes.SecretListOptions) ([]types.Secret, error) { 33 c.mu.RLock() 34 defer c.mu.RUnlock() 35 36 state := c.currentNodeState() 37 if !state.IsActiveManager() { 38 return nil, c.errNoManager(state) 39 } 40 41 filters, err := newListSecretsFilters(options.Filters) 42 if err != nil { 43 return nil, err 44 } 45 ctx, cancel := c.getRequestContext() 46 defer cancel() 47 48 r, err := state.controlClient.ListSecrets(ctx, 49 &swarmapi.ListSecretsRequest{Filters: filters}) 50 if err != nil { 51 return nil, err 52 } 53 54 secrets := []types.Secret{} 55 56 for _, secret := range r.Secrets { 57 secrets = append(secrets, convert.SecretFromGRPC(secret)) 58 } 59 60 return secrets, nil 61 } 62 63 // CreateSecret creates a new secret in a managed swarm cluster. 64 func (c *Cluster) CreateSecret(s types.SecretSpec) (string, error) { 65 c.mu.RLock() 66 defer c.mu.RUnlock() 67 68 state := c.currentNodeState() 69 if !state.IsActiveManager() { 70 return "", c.errNoManager(state) 71 } 72 73 ctx, cancel := c.getRequestContext() 74 defer cancel() 75 76 secretSpec := convert.SecretSpecToGRPC(s) 77 78 r, err := state.controlClient.CreateSecret(ctx, 79 &swarmapi.CreateSecretRequest{Spec: &secretSpec}) 80 if err != nil { 81 return "", err 82 } 83 84 return r.Secret.ID, nil 85 } 86 87 // RemoveSecret removes a secret from a managed swarm cluster. 88 func (c *Cluster) RemoveSecret(id string) error { 89 c.mu.RLock() 90 defer c.mu.RUnlock() 91 92 state := c.currentNodeState() 93 if !state.IsActiveManager() { 94 return c.errNoManager(state) 95 } 96 97 ctx, cancel := c.getRequestContext() 98 defer cancel() 99 100 req := &swarmapi.RemoveSecretRequest{ 101 SecretID: id, 102 } 103 104 _, err := state.controlClient.RemoveSecret(ctx, req) 105 return err 106 } 107 108 // UpdateSecret updates a secret in a managed swarm cluster. 109 // Note: this is not exposed to the CLI but is available from the API only 110 func (c *Cluster) UpdateSecret(id string, version uint64, spec types.SecretSpec) error { 111 c.mu.RLock() 112 defer c.mu.RUnlock() 113 114 state := c.currentNodeState() 115 if !state.IsActiveManager() { 116 return c.errNoManager(state) 117 } 118 119 ctx, cancel := c.getRequestContext() 120 defer cancel() 121 122 secretSpec := convert.SecretSpecToGRPC(spec) 123 124 _, err := state.controlClient.UpdateSecret(ctx, 125 &swarmapi.UpdateSecretRequest{ 126 SecretID: id, 127 SecretVersion: &swarmapi.Version{ 128 Index: version, 129 }, 130 Spec: &secretSpec, 131 }) 132 return err 133 }