mirror of
https://github.com/containrrr/watchtower.git
synced 2024-12-12 09:04:17 +02:00
f6c19896a2
The life-cycle messages should not have the same level as the update messages. Why? I receive a (mail-) notification for every run even if no image is changed: ``` 2020-07-31 06:44:33 (info): Executing pre-check command. ``` But I only want to receive a notification if something changed: ``` 2020-07-20 06:44:44 (info): Found new traefik:v2.2 image (sha256:7c992081f52423e325bd12debf0edcb4f7cfa398683c26f99c00112ec14e1ab9) ```
91 lines
2.8 KiB
Go
91 lines
2.8 KiB
Go
package lifecycle
|
|
|
|
import (
|
|
"github.com/containrrr/watchtower/pkg/container"
|
|
"github.com/containrrr/watchtower/pkg/types"
|
|
log "github.com/sirupsen/logrus"
|
|
)
|
|
|
|
// ExecutePreChecks tries to run the pre-check lifecycle hook for all containers included by the current filter.
|
|
func ExecutePreChecks(client container.Client, params types.UpdateParams) {
|
|
containers, err := client.ListContainers(params.Filter)
|
|
if err != nil {
|
|
return
|
|
}
|
|
for _, container := range containers {
|
|
ExecutePreCheckCommand(client, container)
|
|
}
|
|
}
|
|
|
|
// ExecutePostChecks tries to run the post-check lifecycle hook for all containers included by the current filter.
|
|
func ExecutePostChecks(client container.Client, params types.UpdateParams) {
|
|
containers, err := client.ListContainers(params.Filter)
|
|
if err != nil {
|
|
return
|
|
}
|
|
for _, container := range containers {
|
|
ExecutePostCheckCommand(client, container)
|
|
}
|
|
}
|
|
|
|
// ExecutePreCheckCommand tries to run the pre-check lifecycle hook for a single container.
|
|
func ExecutePreCheckCommand(client container.Client, container container.Container) {
|
|
command := container.GetLifecyclePreCheckCommand()
|
|
if len(command) == 0 {
|
|
log.Debug("No pre-check command supplied. Skipping")
|
|
return
|
|
}
|
|
|
|
log.Debug("Executing pre-check command.")
|
|
if err := client.ExecuteCommand(container.ID(), command, 1); err != nil {
|
|
log.Error(err)
|
|
}
|
|
}
|
|
|
|
// ExecutePostCheckCommand tries to run the post-check lifecycle hook for a single container.
|
|
func ExecutePostCheckCommand(client container.Client, container container.Container) {
|
|
command := container.GetLifecyclePostCheckCommand()
|
|
if len(command) == 0 {
|
|
log.Debug("No post-check command supplied. Skipping")
|
|
return
|
|
}
|
|
|
|
log.Debug("Executing post-check command.")
|
|
if err := client.ExecuteCommand(container.ID(), command, 1); err != nil {
|
|
log.Error(err)
|
|
}
|
|
}
|
|
|
|
// ExecutePreUpdateCommand tries to run the pre-update lifecycle hook for a single container.
|
|
func ExecutePreUpdateCommand(client container.Client, container container.Container) error {
|
|
timeout := container.PreUpdateTimeout()
|
|
command := container.GetLifecyclePreUpdateCommand()
|
|
if len(command) == 0 {
|
|
log.Debug("No pre-update command supplied. Skipping")
|
|
return nil
|
|
}
|
|
|
|
log.Debug("Executing pre-update command.")
|
|
return client.ExecuteCommand(container.ID(), command, timeout)
|
|
}
|
|
|
|
// ExecutePostUpdateCommand tries to run the post-update lifecycle hook for a single container.
|
|
func ExecutePostUpdateCommand(client container.Client, newContainerID string) {
|
|
newContainer, err := client.GetContainer(newContainerID)
|
|
if err != nil {
|
|
log.Error(err)
|
|
return
|
|
}
|
|
|
|
command := newContainer.GetLifecyclePostUpdateCommand()
|
|
if len(command) == 0 {
|
|
log.Debug("No post-update command supplied. Skipping")
|
|
return
|
|
}
|
|
|
|
log.Debug("Executing post-update command.")
|
|
if err := client.ExecuteCommand(newContainerID, command, 1); err != nil {
|
|
log.Error(err)
|
|
}
|
|
}
|