mirror of
https://gitea.elkins.co/Networking/ccl.git
synced 2025-03-04 09:18:48 -06:00
Abstract cdata variables from Container struct
This commit is contained in:
parent
beb1fe71a8
commit
1f4387f9b4
@ -68,8 +68,8 @@ type Container struct {
|
||||
Devices []string `toml:"devices,omitempty"`
|
||||
|
||||
conn context.Context
|
||||
cdataChan chan chan *define.InspectContainerData // do not use directly -- use getCData()
|
||||
cdataInval chan bool // send a bool when container state changes
|
||||
getCData func() *define.InspectContainerData
|
||||
invalCData func()
|
||||
wasRunning bool
|
||||
}
|
||||
|
||||
@ -157,7 +157,7 @@ func (c *Container) newCommandSet(op string, cmds cmd.Commands) cmd.Set {
|
||||
func (c *Container) PullCommands() cmd.Set {
|
||||
return c.newCommandSet("PULL", cmd.Commands{
|
||||
cmd.NewFunc("do_pull", func() error {
|
||||
c.cdataInval <- true
|
||||
c.invalCData()
|
||||
return c.pull()
|
||||
}),
|
||||
})
|
||||
@ -261,7 +261,7 @@ func (c *Container) CreateCommands() cmd.Set {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
c.cdataInval <- true
|
||||
c.invalCData()
|
||||
return c.pull()
|
||||
}
|
||||
return nil
|
||||
@ -271,7 +271,7 @@ func (c *Container) CreateCommands() cmd.Set {
|
||||
if _, err := containers.CreateWithSpec(c.conn, &spec, nil); err != nil {
|
||||
return err
|
||||
}
|
||||
c.cdataInval <- true
|
||||
c.invalCData()
|
||||
return nil
|
||||
}),
|
||||
})
|
||||
@ -296,7 +296,7 @@ func (c *Container) RemoveCommands() cmd.Set {
|
||||
}
|
||||
yes := true
|
||||
_, err := containers.Remove(c.conn, cdata.ID, &containers.RemoveOptions{Force: &yes})
|
||||
c.cdataInval <- true
|
||||
c.invalCData()
|
||||
return err
|
||||
}),
|
||||
})
|
||||
@ -326,7 +326,7 @@ func (c *Container) StartCommands() cmd.Set {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
c.cdataInval <- true
|
||||
c.invalCData()
|
||||
cdata = c.getCData()
|
||||
if cdata != nil && cdata.HostConfig != nil && cdata.HostConfig.NetworkMode == "bridge" {
|
||||
err = c.assureNetNS()
|
||||
@ -436,36 +436,40 @@ func (c *Container) StopCommands() cmd.Set {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
c.cdataInval <- true
|
||||
c.invalCData()
|
||||
return nil
|
||||
}),
|
||||
})
|
||||
}
|
||||
|
||||
func (c *Container) watchCData() {
|
||||
c.cdataChan = make(chan chan *define.InspectContainerData)
|
||||
c.cdataInval = make(chan bool)
|
||||
cdataChan := make(chan chan *define.InspectContainerData)
|
||||
cdataInval := make(chan bool)
|
||||
|
||||
go func() {
|
||||
var cache *define.InspectContainerData
|
||||
for {
|
||||
select {
|
||||
case dchan := <-c.cdataChan:
|
||||
case dchan := <-cdataChan:
|
||||
if cache == nil {
|
||||
no := false
|
||||
cache, _ = containers.Inspect(c.conn, c.Name, &containers.InspectOptions{Size: &no})
|
||||
}
|
||||
dchan <- cache
|
||||
case <-c.cdataInval:
|
||||
case <-cdataInval:
|
||||
cache = nil
|
||||
}
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
func (c *Container) getCData() *define.InspectContainerData {
|
||||
cc := make(chan *define.InspectContainerData)
|
||||
c.cdataChan <- cc
|
||||
return <-cc
|
||||
c.getCData = func() *define.InspectContainerData {
|
||||
cc := make(chan *define.InspectContainerData)
|
||||
cdataChan <- cc
|
||||
return <-cc
|
||||
}
|
||||
c.invalCData = func() {
|
||||
cdataInval <- true
|
||||
}
|
||||
}
|
||||
|
||||
// Pid will return the host process id of the main container process (pid
|
||||
|
Loading…
x
Reference in New Issue
Block a user