@@ -24,32 +24,32 @@ const (
2424
2525// ConfigFile ~/.docker/config.json file info
2626type ConfigFile struct {
27- AuthConfigs map [string ]types.AuthConfig `json:"auths"`
28- HTTPHeaders map [string ]string `json:"HttpHeaders,omitempty"`
29- PsFormat string `json:"psFormat,omitempty"`
30- ImagesFormat string `json:"imagesFormat,omitempty"`
31- NetworksFormat string `json:"networksFormat,omitempty"`
32- PluginsFormat string `json:"pluginsFormat,omitempty"`
33- VolumesFormat string `json:"volumesFormat,omitempty"`
34- StatsFormat string `json:"statsFormat,omitempty"`
35- DetachKeys string `json:"detachKeys,omitempty"`
36- CredentialsStore string `json:"credsStore,omitempty"`
37- CredentialHelpers map [string ]string `json:"credHelpers,omitempty"`
38- Filename string `json:"-"` // Note: for internal use only
39- ServiceInspectFormat string `json:"serviceInspectFormat,omitempty"`
40- ServicesFormat string `json:"servicesFormat,omitempty"`
41- TasksFormat string `json:"tasksFormat,omitempty"`
42- SecretFormat string `json:"secretFormat,omitempty"`
43- ConfigFormat string `json:"configFormat,omitempty"`
44- NodesFormat string `json:"nodesFormat,omitempty"`
45- PruneFilters []string `json:"pruneFilters,omitempty"`
46- Proxies map [string ]ProxyConfig `json:"proxies,omitempty"`
47- Experimental string `json:"experimental,omitempty"`
48- StackOrchestrator string `json:"stackOrchestrator,omitempty"`
49- Kubernetes * KubernetesConfig `json:"kubernetes,omitempty"`
50- CurrentContext string `json:"currentContext,omitempty"`
51- CLIPluginsExtraDirs []string `json:"cliPluginsExtraDirs,omitempty"`
52- Plugins map [string ]json. RawMessage `json:"plugins,omitempty"`
27+ AuthConfigs map [string ]types.AuthConfig `json:"auths"`
28+ HTTPHeaders map [string ]string `json:"HttpHeaders,omitempty"`
29+ PsFormat string `json:"psFormat,omitempty"`
30+ ImagesFormat string `json:"imagesFormat,omitempty"`
31+ NetworksFormat string `json:"networksFormat,omitempty"`
32+ PluginsFormat string `json:"pluginsFormat,omitempty"`
33+ VolumesFormat string `json:"volumesFormat,omitempty"`
34+ StatsFormat string `json:"statsFormat,omitempty"`
35+ DetachKeys string `json:"detachKeys,omitempty"`
36+ CredentialsStore string `json:"credsStore,omitempty"`
37+ CredentialHelpers map [string ]string `json:"credHelpers,omitempty"`
38+ Filename string `json:"-"` // Note: for internal use only
39+ ServiceInspectFormat string `json:"serviceInspectFormat,omitempty"`
40+ ServicesFormat string `json:"servicesFormat,omitempty"`
41+ TasksFormat string `json:"tasksFormat,omitempty"`
42+ SecretFormat string `json:"secretFormat,omitempty"`
43+ ConfigFormat string `json:"configFormat,omitempty"`
44+ NodesFormat string `json:"nodesFormat,omitempty"`
45+ PruneFilters []string `json:"pruneFilters,omitempty"`
46+ Proxies map [string ]ProxyConfig `json:"proxies,omitempty"`
47+ Experimental string `json:"experimental,omitempty"`
48+ StackOrchestrator string `json:"stackOrchestrator,omitempty"`
49+ Kubernetes * KubernetesConfig `json:"kubernetes,omitempty"`
50+ CurrentContext string `json:"currentContext,omitempty"`
51+ CLIPluginsExtraDirs []string `json:"cliPluginsExtraDirs,omitempty"`
52+ Plugins map [string ]map [ string ] string `json:"plugins,omitempty"`
5353}
5454
5555// ProxyConfig contains proxy configuration settings
@@ -71,7 +71,7 @@ func New(fn string) *ConfigFile {
7171 AuthConfigs : make (map [string ]types.AuthConfig ),
7272 HTTPHeaders : make (map [string ]string ),
7373 Filename : fn ,
74- Plugins : make (map [string ]json. RawMessage ),
74+ Plugins : make (map [string ]map [ string ] string ),
7575 }
7676}
7777
@@ -332,6 +332,36 @@ func (configFile *ConfigFile) GetFilename() string {
332332 return configFile .Filename
333333}
334334
335+ // PluginConfig retrieves the requested option for the given plugin.
336+ func (configFile * ConfigFile ) PluginConfig (pluginname , option string ) (string , bool ) {
337+ pluginConfig , ok := configFile .Plugins [pluginname ]
338+ if ! ok {
339+ return "" , false
340+ }
341+ value , ok := pluginConfig [option ]
342+ return value , ok
343+ }
344+
345+ // SetPluginConfig sets the option to the given value for the given
346+ // plugin. Passing a value of "" will remove the option. If removing
347+ // the final config item for a given plugin then also cleans up the
348+ // overall plugin entry.
349+ func (configFile * ConfigFile ) SetPluginConfig (pluginname , option , value string ) {
350+ pluginConfig , ok := configFile .Plugins [pluginname ]
351+ if ! ok {
352+ pluginConfig = make (map [string ]string )
353+ configFile .Plugins [pluginname ] = pluginConfig
354+ }
355+ if value != "" {
356+ pluginConfig [option ] = value
357+ } else {
358+ delete (pluginConfig , option )
359+ }
360+ if len (pluginConfig ) == 0 {
361+ delete (configFile .Plugins , pluginname )
362+ }
363+ }
364+
335365func checkKubernetesConfiguration (kubeConfig * KubernetesConfig ) error {
336366 if kubeConfig == nil {
337367 return nil
0 commit comments