mirror of https://github.com/containrrr/watchtower
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			36 lines
		
	
	
		
			865 B
		
	
	
	
		
			Go
		
	
			
		
		
	
	
			36 lines
		
	
	
		
			865 B
		
	
	
	
		
			Go
		
	
package actions
 | 
						|
 | 
						|
import (
 | 
						|
	"sort"
 | 
						|
 | 
						|
	"github.com/v2tec/watchtower/container"
 | 
						|
)
 | 
						|
 | 
						|
func watchtowerContainersFilter(c container.Container) bool { return c.IsWatchtower() }
 | 
						|
 | 
						|
// CheckPrereqs will ensure that there are not multiple instances of the
 | 
						|
// watchtower running simultaneously. If multiple watchtower containers are
 | 
						|
// detected, this function will stop and remove all but the most recently
 | 
						|
// started container.
 | 
						|
func CheckPrereqs(client container.Client, cleanup bool) error {
 | 
						|
	containers, err := client.ListContainers(watchtowerContainersFilter)
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
 | 
						|
	if len(containers) > 1 {
 | 
						|
		sort.Sort(container.ByCreated(containers))
 | 
						|
 | 
						|
		// Iterate over all containers execept the last one
 | 
						|
		for _, c := range containers[0 : len(containers)-1] {
 | 
						|
			client.StopContainer(c, 60)
 | 
						|
 | 
						|
			if cleanup {
 | 
						|
				client.RemoveImage(c)
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	return nil
 | 
						|
}
 |