github.com/lazyboychen7/engine@v17.12.1-ce-rc2+incompatible/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 }