mirror of https://github.com/docker/docs.git
change refresh logic with new events
Signed-off-by: Victor Vieux <vieux@docker.com>
This commit is contained in:
parent
5492f4ab82
commit
3747ec9b9f
|
|
@ -451,7 +451,10 @@ func (e *Engine) DeleteNetwork(network *Network) {
|
|||
// AddNetwork adds a network to the internal engine state.
|
||||
func (e *Engine) AddNetwork(network *Network) {
|
||||
e.Lock()
|
||||
e.networks[network.ID] = network
|
||||
e.networks[network.ID] = &Network{
|
||||
NetworkResource: network.NetworkResource,
|
||||
Engine: e,
|
||||
}
|
||||
e.Unlock()
|
||||
}
|
||||
|
||||
|
|
@ -924,22 +927,41 @@ func (e *Engine) String() string {
|
|||
|
||||
func (e *Engine) handler(ev *dockerclient.Event, _ chan error, args ...interface{}) {
|
||||
// Something changed - refresh our internal state.
|
||||
switch ev.Status {
|
||||
case "pull", "untag", "delete", "commit":
|
||||
// These events refer to images so there's no need to update
|
||||
// containers.
|
||||
|
||||
switch ev.Type {
|
||||
case "network":
|
||||
e.RefreshNetworks()
|
||||
case "volume":
|
||||
e.RefreshVolumes()
|
||||
case "image":
|
||||
e.RefreshImages()
|
||||
case "die", "kill", "oom", "pause", "start", "stop", "unpause", "rename":
|
||||
// If the container state changes, we have to do an inspect in
|
||||
// order to update container.Info and get the new NetworkSettings.
|
||||
e.refreshContainer(ev.ID, true)
|
||||
e.RefreshVolumes()
|
||||
e.RefreshNetworks()
|
||||
default:
|
||||
// Otherwise, do a "soft" refresh of the container.
|
||||
e.refreshContainer(ev.ID, false)
|
||||
e.RefreshVolumes()
|
||||
e.RefreshNetworks()
|
||||
case "container":
|
||||
switch ev.Action {
|
||||
case "die", "kill", "oom", "pause", "start", "stop", "unpause", "rename":
|
||||
e.refreshContainer(ev.ID, true)
|
||||
default:
|
||||
e.refreshContainer(ev.ID, false)
|
||||
}
|
||||
case "":
|
||||
// docker < 1.10
|
||||
switch ev.Status {
|
||||
case "pull", "untag", "delete", "commit":
|
||||
// These events refer to images so there's no need to update
|
||||
// containers.
|
||||
e.RefreshImages()
|
||||
case "die", "kill", "oom", "pause", "start", "stop", "unpause", "rename":
|
||||
// If the container state changes, we have to do an inspect in
|
||||
// order to update container.Info and get the new NetworkSettings.
|
||||
e.refreshContainer(ev.ID, true)
|
||||
e.RefreshVolumes()
|
||||
e.RefreshNetworks()
|
||||
default:
|
||||
// Otherwise, do a "soft" refresh of the container.
|
||||
e.refreshContainer(ev.ID, false)
|
||||
e.RefreshVolumes()
|
||||
e.RefreshNetworks()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// If there is no event handler registered, abort right now.
|
||||
|
|
|
|||
|
|
@ -216,7 +216,7 @@ func (c *Cluster) RemoveContainer(container *cluster.Container, force, volumes b
|
|||
// RemoveNetwork removes a network from the cluster
|
||||
func (c *Cluster) RemoveNetwork(network *cluster.Network) error {
|
||||
err := network.Engine.RemoveNetwork(network)
|
||||
if err == nil {
|
||||
if err == nil && network.Scope == "global" {
|
||||
for _, engine := range c.engines {
|
||||
engine.DeleteNetwork(network)
|
||||
}
|
||||
|
|
@ -470,9 +470,10 @@ func (c *Cluster) CreateNetwork(request *dockerclient.NetworkCreate) (response *
|
|||
if nodes != nil {
|
||||
resp, err := c.engines[nodes[0].ID].CreateNetwork(request)
|
||||
if err == nil {
|
||||
network := c.engines[nodes[0].ID].Networks().Get(resp.ID)
|
||||
for _, engine := range c.engines {
|
||||
engine.AddNetwork(network)
|
||||
if network := c.engines[nodes[0].ID].Networks().Get(resp.ID); network != nil && network.Scope == "global" {
|
||||
for _, engine := range c.engines {
|
||||
engine.AddNetwork(network)
|
||||
}
|
||||
}
|
||||
}
|
||||
return resp, err
|
||||
|
|
|
|||
Loading…
Reference in New Issue