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  }