github.com/rhatdan/docker@v0.7.7-0.20180119204836-47a0dcbcd20a/daemon/cluster/configs.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  	"golang.org/x/net/context"
     9  )
    10  
    11  // GetConfig returns a config from a managed swarm cluster
    12  func (c *Cluster) GetConfig(input string) (types.Config, error) {
    13  	var config *swarmapi.Config
    14  
    15  	if err := c.lockedManagerAction(func(ctx context.Context, state nodeState) error {
    16  		s, err := getConfig(ctx, state.controlClient, input)
    17  		if err != nil {
    18  			return err
    19  		}
    20  		config = s
    21  		return nil
    22  	}); err != nil {
    23  		return types.Config{}, err
    24  	}
    25  	return convert.ConfigFromGRPC(config), nil
    26  }
    27  
    28  // GetConfigs returns all configs of a managed swarm cluster.
    29  func (c *Cluster) GetConfigs(options apitypes.ConfigListOptions) ([]types.Config, error) {
    30  	c.mu.RLock()
    31  	defer c.mu.RUnlock()
    32  
    33  	state := c.currentNodeState()
    34  	if !state.IsActiveManager() {
    35  		return nil, c.errNoManager(state)
    36  	}
    37  
    38  	filters, err := newListConfigsFilters(options.Filters)
    39  	if err != nil {
    40  		return nil, err
    41  	}
    42  	ctx, cancel := c.getRequestContext()
    43  	defer cancel()
    44  
    45  	r, err := state.controlClient.ListConfigs(ctx,
    46  		&swarmapi.ListConfigsRequest{Filters: filters})
    47  	if err != nil {
    48  		return nil, err
    49  	}
    50  
    51  	configs := []types.Config{}
    52  
    53  	for _, config := range r.Configs {
    54  		configs = append(configs, convert.ConfigFromGRPC(config))
    55  	}
    56  
    57  	return configs, nil
    58  }
    59  
    60  // CreateConfig creates a new config in a managed swarm cluster.
    61  func (c *Cluster) CreateConfig(s types.ConfigSpec) (string, error) {
    62  	var resp *swarmapi.CreateConfigResponse
    63  	if err := c.lockedManagerAction(func(ctx context.Context, state nodeState) error {
    64  		configSpec := convert.ConfigSpecToGRPC(s)
    65  
    66  		r, err := state.controlClient.CreateConfig(ctx,
    67  			&swarmapi.CreateConfigRequest{Spec: &configSpec})
    68  		if err != nil {
    69  			return err
    70  		}
    71  		resp = r
    72  		return nil
    73  	}); err != nil {
    74  		return "", err
    75  	}
    76  	return resp.Config.ID, nil
    77  }
    78  
    79  // RemoveConfig removes a config from a managed swarm cluster.
    80  func (c *Cluster) RemoveConfig(input string) error {
    81  	return c.lockedManagerAction(func(ctx context.Context, state nodeState) error {
    82  		config, err := getConfig(ctx, state.controlClient, input)
    83  		if err != nil {
    84  			return err
    85  		}
    86  
    87  		req := &swarmapi.RemoveConfigRequest{
    88  			ConfigID: config.ID,
    89  		}
    90  
    91  		_, err = state.controlClient.RemoveConfig(ctx, req)
    92  		return err
    93  	})
    94  }
    95  
    96  // UpdateConfig updates a config in a managed swarm cluster.
    97  // Note: this is not exposed to the CLI but is available from the API only
    98  func (c *Cluster) UpdateConfig(input string, version uint64, spec types.ConfigSpec) error {
    99  	return c.lockedManagerAction(func(ctx context.Context, state nodeState) error {
   100  		config, err := getConfig(ctx, state.controlClient, input)
   101  		if err != nil {
   102  			return err
   103  		}
   104  
   105  		configSpec := convert.ConfigSpecToGRPC(spec)
   106  
   107  		_, err = state.controlClient.UpdateConfig(ctx,
   108  			&swarmapi.UpdateConfigRequest{
   109  				ConfigID: config.ID,
   110  				ConfigVersion: &swarmapi.Version{
   111  					Index: version,
   112  				},
   113  				Spec: &configSpec,
   114  			})
   115  		return err
   116  	})
   117  }