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