Add docker api version parameter (#372)

* Add docker api version parameter

* Note for minimum supported version

* Tests for EnvConfig
pull/375/head
Kaloyan Raev 5 years ago committed by Simon Aronsson
parent 7f7db72686
commit f820eb5b3a

@ -18,10 +18,6 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
// DockerAPIMinVersion is the minimum version of the docker api required to
// use watchtower
const DockerAPIMinVersion string = "1.24"
var ( var (
client container.Client client container.Client
scheduleSpec string scheduleSpec string
@ -90,7 +86,7 @@ func PreRun(cmd *cobra.Command, args []string) {
lifecycleHooks, _ = f.GetBool("enable-lifecycle-hooks") lifecycleHooks, _ = f.GetBool("enable-lifecycle-hooks")
// configure environment vars for client // configure environment vars for client
err := flags.EnvConfig(cmd, DockerAPIMinVersion) err := flags.EnvConfig(cmd)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }

@ -77,6 +77,16 @@ Environment Variable: DOCKER_HOST
Default: "unix:///var/run/docker.sock" Default: "unix:///var/run/docker.sock"
``` ```
## Docker API version
The API version to use by the Docker client for connecting to the Docker daemon. The minimum supported version is 1.24.
```
Argument: --api-version, -a
Environment Variable: DOCKER_API_VERSION
Type: String
Default: "1.24"
```
## Include stopped ## Include stopped
Will also include created and exited containers. Will also include created and exited containers.

@ -9,11 +9,16 @@ import (
"github.com/spf13/viper" "github.com/spf13/viper"
) )
// DockerAPIMinVersion is the minimum version of the docker api required to
// use watchtower
const DockerAPIMinVersion string = "1.24"
// RegisterDockerFlags that are used directly by the docker api client // RegisterDockerFlags that are used directly by the docker api client
func RegisterDockerFlags(rootCmd *cobra.Command) { func RegisterDockerFlags(rootCmd *cobra.Command) {
flags := rootCmd.PersistentFlags() flags := rootCmd.PersistentFlags()
flags.StringP("host", "H", viper.GetString("DOCKER_HOST"), "daemon socket to connect to") flags.StringP("host", "H", viper.GetString("DOCKER_HOST"), "daemon socket to connect to")
flags.BoolP("tlsverify", "v", viper.GetBool("DOCKER_TLS_VERIFY"), "use TLS and verify the remote") flags.BoolP("tlsverify", "v", viper.GetBool("DOCKER_TLS_VERIFY"), "use TLS and verify the remote")
flags.StringP("api-version", "a", viper.GetString("DOCKER_API_VERSION"), "api version to use by docker client")
} }
// RegisterSystemFlags that are used by watchtower to modify the program flow // RegisterSystemFlags that are used by watchtower to modify the program flow
@ -215,6 +220,7 @@ Should only be used for testing.
func SetDefaults() { func SetDefaults() {
viper.AutomaticEnv() viper.AutomaticEnv()
viper.SetDefault("DOCKER_HOST", "unix:///var/run/docker.sock") viper.SetDefault("DOCKER_HOST", "unix:///var/run/docker.sock")
viper.SetDefault("DOCKER_API_VERSION", DockerAPIMinVersion)
viper.SetDefault("WATCHTOWER_POLL_INTERVAL", 300) viper.SetDefault("WATCHTOWER_POLL_INTERVAL", 300)
viper.SetDefault("WATCHTOWER_TIMEOUT", time.Second*10) viper.SetDefault("WATCHTOWER_TIMEOUT", time.Second*10)
viper.SetDefault("WATCHTOWER_NOTIFICATIONS", []string{}) viper.SetDefault("WATCHTOWER_NOTIFICATIONS", []string{})
@ -225,10 +231,11 @@ func SetDefaults() {
// EnvConfig translates the command-line options into environment variables // EnvConfig translates the command-line options into environment variables
// that will initialize the api client // that will initialize the api client
func EnvConfig(cmd *cobra.Command, dockerAPIMinVersion string) error { func EnvConfig(cmd *cobra.Command) error {
var err error var err error
var host string var host string
var tls bool var tls bool
var version string
flags := cmd.PersistentFlags() flags := cmd.PersistentFlags()
@ -238,13 +245,16 @@ func EnvConfig(cmd *cobra.Command, dockerAPIMinVersion string) error {
if tls, err = flags.GetBool("tlsverify"); err != nil { if tls, err = flags.GetBool("tlsverify"); err != nil {
return err return err
} }
if version, err = flags.GetString("api-version"); err != nil {
return err
}
if err = setEnvOptStr("DOCKER_HOST", host); err != nil { if err = setEnvOptStr("DOCKER_HOST", host); err != nil {
return err return err
} }
if err = setEnvOptBool("DOCKER_TLS_VERIFY", tls); err != nil { if err = setEnvOptBool("DOCKER_TLS_VERIFY", tls); err != nil {
return err return err
} }
if err = setEnvOptStr("DOCKER_API_VERSION", dockerAPIMinVersion); err != nil { if err = setEnvOptStr("DOCKER_API_VERSION", version); err != nil {
return err return err
} }
return nil return nil

@ -0,0 +1,39 @@
package flags
import (
"os"
"testing"
"github.com/spf13/cobra"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestEnvConfig_Defaults(t *testing.T) {
cmd := new(cobra.Command)
SetDefaults()
RegisterDockerFlags(cmd)
err := EnvConfig(cmd)
require.NoError(t, err)
assert.Equal(t, "unix:///var/run/docker.sock", os.Getenv("DOCKER_HOST"))
assert.Equal(t, "", os.Getenv("DOCKER_TLS_VERIFY"))
assert.Equal(t, DockerAPIMinVersion, os.Getenv("DOCKER_API_VERSION"))
}
func TestEnvConfig_Custom(t *testing.T) {
cmd := new(cobra.Command)
SetDefaults()
RegisterDockerFlags(cmd)
err := cmd.ParseFlags([]string{"--host", "some-custom-docker-host", "--tlsverify", "--api-version", "1.99"})
require.NoError(t, err)
err = EnvConfig(cmd)
require.NoError(t, err)
assert.Equal(t, "some-custom-docker-host", os.Getenv("DOCKER_HOST"))
assert.Equal(t, "1", os.Getenv("DOCKER_TLS_VERIFY"))
assert.Equal(t, "1.99", os.Getenv("DOCKER_API_VERSION"))
}
Loading…
Cancel
Save