func (cli *DaemonCli) reloadConfig() { reload := func(config *daemon.Config) { // Reload the authorization plugin cli.authzMiddleware.SetPlugins(config.AuthorizationPlugins) if err := cli.d.Reload(config); err != nil { logrus.Errorf("Error reconfiguring the daemon: %v", err) return } if config.IsValueSet("debug") { debugEnabled := utils.IsDebugEnabled() switch { case debugEnabled && !config.Debug: // disable debug utils.DisableDebug() cli.api.DisableProfiler() case config.Debug && !debugEnabled: // enable debug utils.EnableDebug() cli.api.EnableProfiler() } } } if err := daemon.ReloadConfiguration(*cli.configFile, cli.flags, reload); err != nil { logrus.Error(err) } }
// setupConfigReloadTrap configures the USR2 signal to reload the configuration. func setupConfigReloadTrap(configFile string, flags *mflag.FlagSet, reload func(*daemon.Config)) { c := make(chan os.Signal, 1) signal.Notify(c, syscall.SIGHUP) go func() { for range c { daemon.ReloadConfiguration(configFile, flags, reload) } }() }
// setupConfigReloadTrap configures a Win32 event to reload the configuration. func setupConfigReloadTrap(configFile string, flags *mflag.FlagSet, reload func(*daemon.Config)) { go func() { sa := syscall.SecurityAttributes{ Length: 0, } ev := "Global\\docker-daemon-config-" + fmt.Sprint(os.Getpid()) if h, _ := system.CreateEvent(&sa, false, false, ev); h != 0 { logrus.Debugf("Config reload - waiting signal at %s", ev) for { syscall.WaitForSingleObject(h, syscall.INFINITE) daemon.ReloadConfiguration(configFile, flags, reload) } } }() }
func TestLoadDaemonConfigWithTrueDefaultValues(t *testing.T) { c := &daemon.Config{} common := &cli.CommonFlags{} flags := mflag.NewFlagSet("test", mflag.ContinueOnError) flags.BoolVar(&c.EnableUserlandProxy, []string{"-userland-proxy"}, true, "") f, err := ioutil.TempFile("", "docker-config-") if err != nil { t.Fatal(err) } if err := flags.ParseFlags([]string{}, false); err != nil { t.Fatal(err) } configFile := f.Name() f.Write([]byte(`{ "userland-proxy": false }`)) f.Close() loadedConfig, err := loadDaemonCliConfig(c, flags, common, configFile) if err != nil { t.Fatal(err) } if loadedConfig == nil { t.Fatal("expected configuration, got nil") } if loadedConfig.EnableUserlandProxy { t.Fatal("expected userland proxy to be disabled, got enabled") } // make sure reloading doesn't generate configuration // conflicts after normalizing boolean values. err = daemon.ReloadConfiguration(configFile, flags, func(reloadedConfig *daemon.Config) { if reloadedConfig.EnableUserlandProxy { t.Fatal("expected userland proxy to be disabled, got enabled") } }) if err != nil { t.Fatal(err) } }
func TestLoadDaemonConfigWithTrueDefaultValues(t *testing.T) { content := `{ "userland-proxy": false }` tempFile := tempfile.NewTempFile(t, "config", content) defer tempFile.Remove() opts := defaultOptions(tempFile.Name()) loadedConfig, err := loadDaemonCliConfig(opts) assert.NilError(t, err) assert.NotNil(t, loadedConfig) assert.NotNil(t, loadedConfig.ClusterOpts) assert.Equal(t, loadedConfig.EnableUserlandProxy, false) // make sure reloading doesn't generate configuration // conflicts after normalizing boolean values. reload := func(reloadedConfig *daemon.Config) { assert.Equal(t, reloadedConfig.EnableUserlandProxy, false) } assert.NilError(t, daemon.ReloadConfiguration(opts.configFile, opts.flags, reload)) }
func (cli *DaemonCli) reloadConfig() { reload := func(config *daemon.Config) { if err := cli.d.Reload(config); err != nil { logrus.Errorf("Error reconfiguring the daemon: %v", err) return } if config.IsValueSet("debug") { debugEnabled := utils.IsDebugEnabled() switch { case debugEnabled && !config.Debug: // disable debug utils.DisableDebug() cli.api.DisableProfiler() case config.Debug && !debugEnabled: // enable debug utils.EnableDebug() cli.api.EnableProfiler() } } } if err := daemon.ReloadConfiguration(*cli.configFile, flag.CommandLine, reload); err != nil { logrus.Error(err) } }