741575eb38
Increases the max recieved gRPC message size for Node and Secret list operations. This has already been done for the other swarm types, but was not done for these. Signed-off-by: Drew Erny <drew.erny@docker.com> (cherry picked from commit a0903e1fa3eca32065c7dbfda8d1e0879cbfbb8f) Signed-off-by: Sebastiaan van Stijn <github@gone.nl> Upstream-commit: a987f31fbc42526bf2cccf1381066f075b18dfe0 Component: engine
122 lines
3.2 KiB
Go
122 lines
3.2 KiB
Go
package cluster // import "github.com/docker/docker/daemon/cluster"
|
|
|
|
import (
|
|
"context"
|
|
|
|
apitypes "github.com/docker/docker/api/types"
|
|
types "github.com/docker/docker/api/types/swarm"
|
|
"github.com/docker/docker/daemon/cluster/convert"
|
|
swarmapi "github.com/docker/swarmkit/api"
|
|
"google.golang.org/grpc"
|
|
)
|
|
|
|
// GetSecret returns a secret from a managed swarm cluster
|
|
func (c *Cluster) GetSecret(input string) (types.Secret, error) {
|
|
var secret *swarmapi.Secret
|
|
|
|
if err := c.lockedManagerAction(func(ctx context.Context, state nodeState) error {
|
|
s, err := getSecret(ctx, state.controlClient, input)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
secret = s
|
|
return nil
|
|
}); err != nil {
|
|
return types.Secret{}, err
|
|
}
|
|
return convert.SecretFromGRPC(secret), nil
|
|
}
|
|
|
|
// GetSecrets returns all secrets of a managed swarm cluster.
|
|
func (c *Cluster) GetSecrets(options apitypes.SecretListOptions) ([]types.Secret, error) {
|
|
c.mu.RLock()
|
|
defer c.mu.RUnlock()
|
|
|
|
state := c.currentNodeState()
|
|
if !state.IsActiveManager() {
|
|
return nil, c.errNoManager(state)
|
|
}
|
|
|
|
filters, err := newListSecretsFilters(options.Filters)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
ctx, cancel := c.getRequestContext()
|
|
defer cancel()
|
|
|
|
r, err := state.controlClient.ListSecrets(ctx,
|
|
&swarmapi.ListSecretsRequest{Filters: filters},
|
|
grpc.MaxCallRecvMsgSize(defaultRecvSizeForListResponse),
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
secrets := make([]types.Secret, 0, len(r.Secrets))
|
|
|
|
for _, secret := range r.Secrets {
|
|
secrets = append(secrets, convert.SecretFromGRPC(secret))
|
|
}
|
|
|
|
return secrets, nil
|
|
}
|
|
|
|
// CreateSecret creates a new secret in a managed swarm cluster.
|
|
func (c *Cluster) CreateSecret(s types.SecretSpec) (string, error) {
|
|
var resp *swarmapi.CreateSecretResponse
|
|
if err := c.lockedManagerAction(func(ctx context.Context, state nodeState) error {
|
|
secretSpec := convert.SecretSpecToGRPC(s)
|
|
|
|
r, err := state.controlClient.CreateSecret(ctx,
|
|
&swarmapi.CreateSecretRequest{Spec: &secretSpec})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
resp = r
|
|
return nil
|
|
}); err != nil {
|
|
return "", err
|
|
}
|
|
return resp.Secret.ID, nil
|
|
}
|
|
|
|
// RemoveSecret removes a secret from a managed swarm cluster.
|
|
func (c *Cluster) RemoveSecret(input string) error {
|
|
return c.lockedManagerAction(func(ctx context.Context, state nodeState) error {
|
|
secret, err := getSecret(ctx, state.controlClient, input)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
req := &swarmapi.RemoveSecretRequest{
|
|
SecretID: secret.ID,
|
|
}
|
|
|
|
_, err = state.controlClient.RemoveSecret(ctx, req)
|
|
return err
|
|
})
|
|
}
|
|
|
|
// UpdateSecret updates a secret in a managed swarm cluster.
|
|
// Note: this is not exposed to the CLI but is available from the API only
|
|
func (c *Cluster) UpdateSecret(input string, version uint64, spec types.SecretSpec) error {
|
|
return c.lockedManagerAction(func(ctx context.Context, state nodeState) error {
|
|
secret, err := getSecret(ctx, state.controlClient, input)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
secretSpec := convert.SecretSpecToGRPC(spec)
|
|
|
|
_, err = state.controlClient.UpdateSecret(ctx,
|
|
&swarmapi.UpdateSecretRequest{
|
|
SecretID: secret.ID,
|
|
SecretVersion: &swarmapi.Version{
|
|
Index: version,
|
|
},
|
|
Spec: &secretSpec,
|
|
})
|
|
return err
|
|
})
|
|
}
|