- It reverts fa163f5619bb01cabca1c21 plus a small change
in order to allow passing the global scope datastore
to libnetwork after damon boot.
Signed-off-by: Alessandro Boch <aboch@docker.com>
... | ... |
@@ -1598,12 +1598,12 @@ func (daemon *Daemon) initDiscovery(config *Config) error { |
1598 | 1598 |
// daemon according to those changes. |
1599 | 1599 |
// This are the settings that Reload changes: |
1600 | 1600 |
// - Daemon labels. |
1601 |
+// - Cluster discovery (reconfigure and restart). |
|
1601 | 1602 |
func (daemon *Daemon) Reload(config *Config) error { |
1602 | 1603 |
daemon.configStore.reloadLock.Lock() |
1604 |
+ defer daemon.configStore.reloadLock.Unlock() |
|
1603 | 1605 |
daemon.configStore.Labels = config.Labels |
1604 |
- daemon.configStore.reloadLock.Unlock() |
|
1605 |
- |
|
1606 |
- return nil |
|
1606 |
+ return daemon.reloadClusterDiscovery(config) |
|
1607 | 1607 |
} |
1608 | 1608 |
|
1609 | 1609 |
func (daemon *Daemon) reloadClusterDiscovery(config *Config) error { |
... | ... |
@@ -1640,6 +1640,19 @@ func (daemon *Daemon) reloadClusterDiscovery(config *Config) error { |
1640 | 1640 |
daemon.configStore.ClusterOpts = config.ClusterOpts |
1641 | 1641 |
daemon.configStore.ClusterAdvertise = newAdvertise |
1642 | 1642 |
|
1643 |
+ if daemon.netController == nil { |
|
1644 |
+ return nil |
|
1645 |
+ } |
|
1646 |
+ netOptions, err := daemon.networkOptions(daemon.configStore) |
|
1647 |
+ if err != nil { |
|
1648 |
+ logrus.Warnf("Failed to reload configuration with network controller: %v", err) |
|
1649 |
+ return nil |
|
1650 |
+ } |
|
1651 |
+ err = daemon.netController.ReloadConfiguration(netOptions...) |
|
1652 |
+ if err != nil { |
|
1653 |
+ logrus.Warnf("Failed to reload configuration with network controller: %v", err) |
|
1654 |
+ } |
|
1655 |
+ |
|
1643 | 1656 |
return nil |
1644 | 1657 |
} |
1645 | 1658 |
|
... | ... |
@@ -371,7 +371,7 @@ func TestDaemonDiscoveryReload(t *testing.T) { |
371 | 371 |
&discovery.Entry{Host: "127.0.0.1", Port: "5555"}, |
372 | 372 |
} |
373 | 373 |
|
374 |
- if err := daemon.reloadClusterDiscovery(newConfig); err != nil { |
|
374 |
+ if err := daemon.Reload(newConfig); err != nil { |
|
375 | 375 |
t.Fatal(err) |
376 | 376 |
} |
377 | 377 |
ch, errCh = daemon.discoveryWatcher.Watch(stopCh) |
... | ... |
@@ -403,7 +403,7 @@ func TestDaemonDiscoveryReloadFromEmptyDiscovery(t *testing.T) { |
403 | 403 |
&discovery.Entry{Host: "127.0.0.1", Port: "5555"}, |
404 | 404 |
} |
405 | 405 |
|
406 |
- if err := daemon.reloadClusterDiscovery(newConfig); err != nil { |
|
406 |
+ if err := daemon.Reload(newConfig); err != nil { |
|
407 | 407 |
t.Fatal(err) |
408 | 408 |
} |
409 | 409 |
stopCh := make(chan struct{}) |
... | ... |
@@ -22,6 +22,7 @@ import ( |
22 | 22 |
"github.com/docker/docker/pkg/idtools" |
23 | 23 |
"github.com/docker/docker/pkg/system" |
24 | 24 |
"github.com/docker/libnetwork" |
25 |
+ nwconfig "github.com/docker/libnetwork/config" |
|
25 | 26 |
blkiodev "github.com/opencontainers/runc/libcontainer/configs" |
26 | 27 |
) |
27 | 28 |
|
... | ... |
@@ -251,3 +252,7 @@ func restoreCustomImage(is image.Store, ls layer.Store, rs reference.Store) erro |
251 | 251 |
} |
252 | 252 |
return nil |
253 | 253 |
} |
254 |
+ |
|
255 |
+func (daemon *Daemon) networkOptions(dconfig *Config) ([]nwconfig.Option, error) { |
|
256 |
+ return nil, fmt.Errorf("Network controller config reload not aavailable on Windows yet") |
|
257 |
+} |
... | ... |
@@ -890,4 +890,13 @@ if there are conflicts, but it won't stop execution. |
890 | 890 |
The list of currently supported options that can be reconfigured is this: |
891 | 891 |
|
892 | 892 |
- `debug`: it changes the daemon to debug mode when set to true. |
893 |
+- `cluster-store`: it reloads the discovery store with the new address. |
|
894 |
+- `cluster-store-opts`: it uses the new options to reload the discovery store. |
|
895 |
+- `cluster-advertise`: it modifies the address advertised after reloading. |
|
893 | 896 |
- `labels`: it replaces the daemon labels with a new set of labels. |
897 |
+ |
|
898 |
+Updating and reloading the cluster configurations such as `--cluster-store`, |
|
899 |
+`--cluster-advertise` and `--cluster-store-opts` will take effect only if |
|
900 |
+these configurations were not previously configured. Configuration reload will |
|
901 |
+log a warning message if it detects a change in previously configured cluster |
|
902 |
+configurations. |
|
894 | 903 |
\ No newline at end of file |