setup-envtest

command module
v0.0.0-...-9e9ef6a Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 2, 2024 License: Apache-2.0 Imports: 14 Imported by: 3

README

Envtest Binaries Manager

This is a small tool that manages binaries for envtest. It can be used to download new binaries, list currently installed and available ones, and clean up versions.

To use it, just go-install it with Golang 1.23+ (it's a separate, self-contained module):

go install sigs.k8s.io/controller-runtime/tools/setup-envtest@latest

If you are using Golang 1.22, use the release-0.18 branch instead:

go install sigs.k8s.io/controller-runtime/tools/setup-envtest@release-0.18

For full documentation, run it with the --help flag, but here are some examples:

# download the latest envtest, and print out info about it
setup-envtest use

# download the latest 1.19 envtest, and print out the path
setup-envtest use -p path 1.19.x!

# switch to the most recent 1.21 envtest on disk
source <(setup-envtest use -i -p env 1.21.x)

# list all available local versions for darwin/amd64
setup-envtest list -i --os darwin --arch amd64

# remove all versions older than 1.16 from disk
setup-envtest cleanup <1.16

# use the value from $KUBEBUILDER_ASSETS if set, otherwise follow the normal
# logic for 'use'
setup-envtest --use-env

# use the value from $KUBEBUILDER_ASSETS if set, otherwise use the latest
# installed version
setup-envtest use -i --use-env

# sideload a pre-downloaded tarball as Kubernetes 1.16.2 into our store
setup-envtest sideload 1.16.2 < downloaded-envtest.tar.gz

# Per default envtest binaries are downloaded from:
# https://raw.githubusercontent.com/kubernetes-sigs/controller-tools/master/envtest-releases.yaml
# To download from a custom index use the following:
setup-envtest use --index https://custom.com/envtest-releases.yaml

Where does it put all those binaries?

By default, binaries are stored in a subdirectory of an OS-specific data directory, as per the OS's conventions.

On Linux, this is $XDG_DATA_HOME; on Windows, %LocalAppData; and on OSX, ~/Library/Application Support.

There's an overall folder that holds all files, and inside that is a folder for each version/platform pair. The exact directory structure is not guaranteed, except that the leaf directory will contain the names expected by envtest. You should always use setup-envtest fetch or setup-envtest switch (generally with the -p path or -p env flags) to get the directory that you should use.

Why do I have to do that source <(blah blah blah) thing

This is a normal binary, not a shell script, so we can't set the parent process's environment variables. If you use this by hand a lot and want to save the typing, you could put something like the following in your ~/.zshrc (or similar for bash/fish/whatever, modified to those):

setup-envtest() {
    if (($@[(Ie)use])); then
        source <($GOPATH/bin/setup-envtest "$@" -p env)
    else
        $GOPATH/bin/setup-envtest "$@"
    fi
}

What if I don't want to talk to the internet?

There are a few options.

First, you'll probably want to set the -i/--installed flag. If you want to avoid forgetting to set this flag, set the ENVTEST_INSTALLED_ONLY env variable, which will switch that flag on by default.

Then, you have a few options for managing your binaries:

  • If you don't really want to manage with this tool, or you want to respect the $KUBEBUILDER_ASSETS variable if it's set to something outside the store, use the use --use-env -i command.

    --use-env makes the command unconditionally use the value of KUBEBUILDER_ASSETS as long as it contains the required binaries, and -i indicates that we only ever want to work with installed binaries.

    As noted about, you can use ENVTEST_INSTALLED_ONLY=true to switch -i on by default, and you can use ENVTEST_USE_ENV=true to switch --use-env on by default.

  • If you want to use this tool, but download your gziped tarballs separately, you can use the sideload command. You'll need to use the -k/--version flag to indicate which version you're sideloading.

    After that, it'll be as if you'd installed the binaries with use.

  • If you want to talk to some internal source via HTTP, you can simply set --index The index must contain references to envtest binary archives in the same format as: https://raw.githubusercontent.com/kubernetes-sigs/controller-tools/master/envtest-releases.yaml

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL