package container import "strconv" const ( watchtowerLabel = "com.centurylinklabs.watchtower" signalLabel = "com.centurylinklabs.watchtower.stop-signal" enableLabel = "com.centurylinklabs.watchtower.enable" monitorOnlyLabel = "com.centurylinklabs.watchtower.monitor-only" noPullLabel = "com.centurylinklabs.watchtower.no-pull" dependsOnLabel = "com.centurylinklabs.watchtower.depends-on" zodiacLabel = "com.centurylinklabs.zodiac.original-image" scope = "com.centurylinklabs.watchtower.scope" preCheckLabel = "com.centurylinklabs.watchtower.lifecycle.pre-check" postCheckLabel = "com.centurylinklabs.watchtower.lifecycle.post-check" preUpdateLabel = "com.centurylinklabs.watchtower.lifecycle.pre-update" postUpdateLabel = "com.centurylinklabs.watchtower.lifecycle.post-update" preUpdateTimeoutLabel = "com.centurylinklabs.watchtower.lifecycle.pre-update-timeout" postUpdateTimeoutLabel = "com.centurylinklabs.watchtower.lifecycle.post-update-timeout" ) // GetLifecyclePreCheckCommand returns the pre-check command set in the container metadata or an empty string func (c Container) GetLifecyclePreCheckCommand() string { return c.getLabelValueOrEmpty(preCheckLabel) } // GetLifecyclePostCheckCommand returns the post-check command set in the container metadata or an empty string func (c Container) GetLifecyclePostCheckCommand() string { return c.getLabelValueOrEmpty(postCheckLabel) } // GetLifecyclePreUpdateCommand returns the pre-update command set in the container metadata or an empty string func (c Container) GetLifecyclePreUpdateCommand() string { return c.getLabelValueOrEmpty(preUpdateLabel) } // GetLifecyclePostUpdateCommand returns the post-update command set in the container metadata or an empty string func (c Container) GetLifecyclePostUpdateCommand() string { return c.getLabelValueOrEmpty(postUpdateLabel) } // ContainsWatchtowerLabel takes a map of labels and values and tells // the consumer whether it contains a valid watchtower instance label func ContainsWatchtowerLabel(labels map[string]string) bool { val, ok := labels[watchtowerLabel] return ok && val == "true" } func (c Container) getLabelValueOrEmpty(label string) string { if val, ok := c.containerInfo.Config.Labels[label]; ok { return val } return "" } func (c Container) getLabelValue(label string) (string, bool) { val, ok := c.containerInfo.Config.Labels[label] return val, ok } func (c Container) getBoolLabelValue(label string) (bool, error) { if strVal, ok := c.containerInfo.Config.Labels[label]; ok { value, err := strconv.ParseBool(strVal) return value, err } return false, errorLabelNotFound }