You've already forked watchtower
							
							
				mirror of
				https://github.com/containrrr/watchtower.git
				synced 2025-10-31 00:17:44 +02:00 
			
		
		
		
	add a monitor only flag
This commit is contained in:
		| @@ -12,14 +12,22 @@ var ( | ||||
| 	letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") | ||||
| ) | ||||
|  | ||||
| type UpdateParams struct { | ||||
| 	Filter container.Filter | ||||
| 	Cleanup bool | ||||
| 	NoRestart bool | ||||
| 	Timeout time.Duration | ||||
| 	MonitorOnly bool | ||||
| } | ||||
|  | ||||
| // Update looks at the running Docker containers to see if any of the images | ||||
| // used to start those containers have been updated. If a change is detected in | ||||
| // any of the images, the associated containers are stopped and restarted with | ||||
| // the new image. | ||||
| func Update(client container.Client, filter container.Filter, cleanup bool, noRestart bool, timeout time.Duration) error { | ||||
| func Update(client container.Client, params UpdateParams) error { | ||||
| 	log.Debug("Checking containers for updated images") | ||||
|  | ||||
| 	containers, err := client.ListContainers(filter) | ||||
| 	containers, err := client.ListContainers(params.Filter) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| @@ -27,7 +35,8 @@ func Update(client container.Client, filter container.Filter, cleanup bool, noRe | ||||
| 	for i, container := range containers { | ||||
| 		stale, err := client.IsContainerStale(container) | ||||
| 		if err != nil { | ||||
| 			log.Infof("Unable to update container %s, err='%s'. Proceeding to next.", containers[i].Name(), err) | ||||
| 			log.Infof("Unable to update container %s. Proceeding to next.", containers[i].Name()) | ||||
| 			log.Debug(err) | ||||
| 			stale = false | ||||
| 		} | ||||
| 		containers[i].Stale = stale | ||||
| @@ -40,6 +49,10 @@ func Update(client container.Client, filter container.Filter, cleanup bool, noRe | ||||
|  | ||||
| 	checkDependencies(containers) | ||||
|  | ||||
| 	if params.MonitorOnly { | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| 	// Stop stale containers in reverse order | ||||
| 	for i := len(containers) - 1; i >= 0; i-- { | ||||
| 		container := containers[i] | ||||
| @@ -50,7 +63,7 @@ func Update(client container.Client, filter container.Filter, cleanup bool, noRe | ||||
| 		} | ||||
|  | ||||
| 		if container.Stale { | ||||
| 			if err := client.StopContainer(container, timeout); err != nil { | ||||
| 			if err := client.StopContainer(container, params.Timeout); err != nil { | ||||
| 				log.Error(err) | ||||
| 			} | ||||
| 		} | ||||
| @@ -70,13 +83,13 @@ func Update(client container.Client, filter container.Filter, cleanup bool, noRe | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			if !noRestart { | ||||
| 			if !params.NoRestart { | ||||
| 				if err := client.StartContainer(container); err != nil { | ||||
| 					log.Error(err) | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			if cleanup { | ||||
| 			if params.Cleanup { | ||||
| 				client.RemoveImage(container) | ||||
| 			} | ||||
| 		} | ||||
|   | ||||
							
								
								
									
										16
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								main.go
									
									
									
									
									
								
							| @@ -29,6 +29,7 @@ var ( | ||||
| 	scheduleSpec string | ||||
| 	cleanup      bool | ||||
| 	noRestart    bool | ||||
| 	monitorOnly  bool | ||||
| 	enableLabel  bool | ||||
| 	notifier     *notifications.Notifier | ||||
| 	timeout		 time.Duration | ||||
| @@ -171,6 +172,11 @@ func main() { | ||||
| 			Usage:  "The MSTeams notifier will try to extract log entry fields as MSTeams message facts", | ||||
| 			EnvVar: "WATCHTOWER_NOTIFICATION_MSTEAMS_USE_LOG_DATA", | ||||
| 		}, | ||||
| 		cli.BoolFlag{ | ||||
| 			Name:   "monitor-only", | ||||
| 			Usage:  "Will only monitor for new images, not update the containers", | ||||
| 			EnvVar: "WATCHTOWER_MONITOR_ONLY", | ||||
| 		}, | ||||
| 	} | ||||
|  | ||||
| 	if err := app.Run(os.Args); err != nil { | ||||
| @@ -196,6 +202,7 @@ func before(c *cli.Context) error { | ||||
|  | ||||
| 	cleanup = c.GlobalBool("cleanup") | ||||
| 	noRestart = c.GlobalBool("no-restart") | ||||
| 	monitorOnly = c.GlobalBool("monitor-only") | ||||
| 	timeout = c.GlobalDuration("stop-timeout") | ||||
| 	if timeout < 0 { | ||||
| 		log.Fatal("Please specify a positive value for timeout value.") | ||||
| @@ -234,7 +241,14 @@ func start(c *cli.Context) error { | ||||
| 			case v := <-tryLockSem: | ||||
| 				defer func() { tryLockSem <- v }() | ||||
| 				notifier.StartNotification() | ||||
| 				if err := actions.Update(client, filter, cleanup, noRestart, timeout); err != nil { | ||||
| 				updateParams := actions.UpdateParams{ | ||||
| 					Filter: filter, | ||||
| 					Cleanup: cleanup, | ||||
| 					NoRestart: noRestart, | ||||
| 					Timeout: timeout, | ||||
| 					MonitorOnly: monitorOnly, | ||||
| 				} | ||||
| 				if err := actions.Update(client, updateParams); err != nil { | ||||
| 					log.Println(err) | ||||
| 				} | ||||
| 				notifier.SendNotification() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user