func loadDaemonCliConfig(opts daemonOptions) (*daemon.Config, error) { config := opts.daemonConfig flags := opts.flags config.Debug = opts.common.Debug config.Hosts = opts.common.Hosts config.LogLevel = opts.common.LogLevel config.TLS = opts.common.TLS config.TLSVerify = opts.common.TLSVerify config.CommonTLSOptions = daemon.CommonTLSOptions{} if opts.common.TLSOptions != nil { config.CommonTLSOptions.CAFile = opts.common.TLSOptions.CAFile config.CommonTLSOptions.CertFile = opts.common.TLSOptions.CertFile config.CommonTLSOptions.KeyFile = opts.common.TLSOptions.KeyFile } if opts.configFile != "" { c, err := daemon.MergeDaemonConfigurations(config, flags, opts.configFile) if err != nil { if flags.Changed(flagDaemonConfigFile) || !os.IsNotExist(err) { return nil, fmt.Errorf("unable to configure the Docker daemon with file %s: %v\n", opts.configFile, err) } } // the merged configuration can be nil if the config file didn't exist. // leave the current configuration as it is if when that happens. if c != nil { config = c } } if err := daemon.ValidateConfiguration(config); err != nil { return nil, err } // Regardless of whether the user sets it to true or false, if they // specify TLSVerify at all then we need to turn on TLS if config.IsValueSet(cliflags.FlagTLSVerify) { config.TLS = true } // ensure that the log level is the one set after merging configurations cliflags.SetLogLevel(config.LogLevel) return config, nil }
func loadDaemonCliConfig(opts daemonOptions) (*daemon.Config, error) { config := opts.daemonConfig flags := opts.flags config.Debug = opts.common.Debug config.Hosts = opts.common.Hosts config.LogLevel = opts.common.LogLevel config.TLS = opts.common.TLS config.TLSVerify = opts.common.TLSVerify config.CommonTLSOptions = daemon.CommonTLSOptions{} if opts.common.TLSOptions != nil { config.CommonTLSOptions.CAFile = opts.common.TLSOptions.CAFile config.CommonTLSOptions.CertFile = opts.common.TLSOptions.CertFile config.CommonTLSOptions.KeyFile = opts.common.TLSOptions.KeyFile } if opts.configFile != "" { c, err := daemon.MergeDaemonConfigurations(config, flags, opts.configFile) if err != nil { if flags.Changed(flagDaemonConfigFile) || !os.IsNotExist(err) { return nil, fmt.Errorf("unable to configure the Docker daemon with file %s: %v\n", opts.configFile, err) } } // the merged configuration can be nil if the config file didn't exist. // leave the current configuration as it is if when that happens. if c != nil { config = c } } if err := daemon.ValidateConfiguration(config); err != nil { return nil, err } // Labels of the docker engine used to allow multiple values associated with the same key. // This is deprecated in 1.13, and, be removed after 3 release cycles. // The following will check the conflict of labels, and report a warning for deprecation. // // TODO: After 3 release cycles (1.16) an error will be returned, and labels will be // sanitized to consolidate duplicate key-value pairs (config.Labels = newLabels): // // newLabels, err := daemon.GetConflictFreeLabels(config.Labels) // if err != nil { // return nil, err // } // config.Labels = newLabels // if _, err := daemon.GetConflictFreeLabels(config.Labels); err != nil { logrus.Warnf("Engine labels with duplicate keys and conflicting values have been deprecated: %s", err) } // Regardless of whether the user sets it to true or false, if they // specify TLSVerify at all then we need to turn on TLS if config.IsValueSet(cliflags.FlagTLSVerify) { config.TLS = true } // ensure that the log level is the one set after merging configurations cliflags.SetLogLevel(config.LogLevel) return config, nil }