kustomize build
can be run on a URL. Resources can also reference other
kustomization directories via URLs too.
The URL format is an HTTPS or SSH git clone
URL with an optional directory and
some query string parameters. Kustomize does not currently support ports in the
URL. The directory is specified by appending a //
after the repo URL. The
following query string parameters can also be specified:
ref
- agit fetch
-able ref, typically a branch, tag, or full commit hash (short hashes are not supported)version
- same asref
. Ifref
is provided, this is ignored.timeout
(default27s
) - a number in seconds, or a go duration. specifies the timeout for fetching the resourcesubmodules
(defaulttrue
) - a boolean specifying whether to clone submodules or not
For example,
https://github.com/kubernetes-sigs/kustomize//examples/multibases/dev/?timeout=120&ref=v3.3.1
will essentially clone the git repo via HTTPS, checkout v3.3.1
and run
kustomize build
inside the examples/multibases/dev
directory.
SSH clones are also supported either with [email protected]:owner/repo
or
ssh://[email protected]/owner/repo
URLs.
file:///
clones are supported. For
example, file:///path/to/repo//someSubdir?ref=v3.3.1
, references the absolute
path to the repo at /path/to/repo
, and a kustomization directory
at someSubdir
within that repo. //
to delimits the root of the repo.
Kustomize will clone the repo to a temporary directory and do a clean checkout
of the ref
. This behavior differs from a direct path reference
like /path/to/repo/someSubdir
, in which case Kustomize will not use Git at
all, and process the files at the path directly.
Resources can reference remote files via their raw GitHub urls, such
as https://raw.githubusercontent.com/kubernetes-sigs/kustomize/8ea501347443c7760217f2c1817c5c60934cf6a5/examples/helloWorld/deployment.yaml
.
To try this immediately, run a build against the kustomization in the multibases example. There's one pod in the output:
target="https://github.com/kubernetes-sigs/kustomize//examples/multibases/dev/?timeout=120&ref=v3.3.1"
test 1 == \
$(kustomize build $target | grep dev-myapp-pod | wc -l); \
echo $?
Run against the overlay in that example to get three pods (the overlay combines the dev, staging and prod bases for someone who wants to send them all at the same time):
target="https://github.com/kubernetes-sigs/kustomize//examples/multibases?timeout=120&ref=v3.3.1"
test 3 == \
$(kustomize build $target | grep cluster-a-.*-myapp-pod | wc -l); \
echo $?
A remote kustomization directory resource can also be a URL:
DEMO_HOME=$(mktemp -d)
cat <<EOF >$DEMO_HOME/kustomization.yaml
resources:
- https://github.com/kubernetes-sigs/kustomize//examples/multibases?timeout=120&ref=v3.3.1
namePrefix: remote-
EOF
Build this to confirm that all three pods from the base
have the remote-
prefix.
test 3 == \
$(kustomize build $DEMO_HOME | grep remote-.*-myapp-pod | wc -l); \
echo $?
Historically, kustomize has supported a modified hashicorp/go-getter URL format.
This is still supported for backwards compatibility but is no longer recommended
to be used as kustomize supports different query parameters and the semantics of
what gets fetched in go-getter
itself are different (particularly with
subdirectories).
Here are some examples of legacy urls
DEMO_HOME=$(mktemp -d)
cat <<'EOF' >$DEMO_HOME/kustomization.yaml
resources:
# a repo with a root level kustomization.yaml
- github.com/Liujingfang1/mysql
# a repo with a root level kustomization.yaml on branch test
- github.com/Liujingfang1/mysql?ref=test
# a subdirectory in a repo on branch repoUrl2
- github.com/Liujingfang1/kustomize/examples/helloWorld?ref=repoUrl2
# a subdirectory in a repo on commit `7050a45134e9848fca214ad7e7007e96e5042c03`
- github.com/Liujingfang1/kustomize/examples/helloWorld?ref=7050a45134e9848fca214ad7e7007e96e5042c03
EOF