-
Notifications
You must be signed in to change notification settings - Fork 2.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Question] Kustomize URL formats #4454
Comments
@thatsmydoing: This issue is currently awaiting triage. SIG CLI takes a lead on issue triage for this repo, but any Kubernetes member can accept issues by applying the The Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. |
In #4453, it was suggested that remote git bases should just be prefixed with a |
The Kubernetes project currently lacks enough contributors to adequately respond to all issues and PRs. This bot triages issues and PRs according to the following rules:
You can:
Please send feedback to sig-contributor-experience at kubernetes/community. /lifecycle stale |
/remove-lifecycle stale |
It seems tests have been added in #4615 |
The Kubernetes project currently lacks enough active contributors to adequately respond to all issues and PRs. This bot triages issues and PRs according to the following rules:
You can:
Please send feedback to sig-contributor-experience at kubernetes/community. /lifecycle rotten |
/remove-lifecycle rotten |
The Kubernetes project currently lacks enough contributors to adequately respond to all issues and PRs. This bot triages issues and PRs according to the following rules:
You can:
Please send feedback to sig-contributor-experience at kubernetes/community. /lifecycle stale |
/remove-lifecycle stale |
The Kubernetes project currently lacks enough contributors to adequately respond to all issues and PRs. This bot triages issues and PRs according to the following rules:
You can:
Please send feedback to sig-contributor-experience at kubernetes/community. /lifecycle stale |
/remove-lifecycle stale |
It looks like |
This issue has not been updated in over 1 year, and should be re-triaged. You can:
For more details on the triage process, see https://www.kubernetes.dev/docs/guide/issue-triage/ /remove-triage accepted |
The Kubernetes project currently lacks enough contributors to adequately respond to all issues. This bot triages un-triaged issues according to the following rules:
You can:
Please send feedback to sig-contributor-experience at kubernetes/community. /lifecycle stale |
The Kubernetes project currently lacks enough active contributors to adequately respond to all issues. This bot triages un-triaged issues according to the following rules:
You can:
Please send feedback to sig-contributor-experience at kubernetes/community. /lifecycle rotten |
The Kubernetes project currently lacks enough active contributors to adequately respond to all issues and PRs. This bot triages issues according to the following rules:
You can:
Please send feedback to sig-contributor-experience at kubernetes/community. /close not-planned |
@k8s-triage-robot: Closing this issue, marking it as "Not Planned". In response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. |
kustomize's support for URL formats is not well-specified and provides shortcuts for sources like github that do not extend to other repositories and can be cause for confusion. For kustomization v1, I think it would be a good idea to formalize it since it will be a breaking change for other fields as well.
The problems with kustomize's url formats that I see are:
git url extraction
Typically, kustomize manifests live in subdirectories of a repository so a typical url looks like
where the repository to clone is https://github.com/kubernetes-sigs/kustomize and the subdirectory to build is
examples/helloWorld
. And kustomize just assumes that the repository is always 2 subdirectories deep. This leads to problems when this isn't the case and more special cases were added that say look one after the _git directory and look for the directory that ends in .git. So we support cloning the following repositories correctly:but https://bitbucket.example.com/scm/project/repository will be treated as clone https://bitbucket.example.com/scm/project and build the subdirectory
repository
.I think the better answer here is to just use
//
to delimit the repository url and the directory (this is already supported but is still subjected to the above). In that case, there is no need for special cases as we're not guessing anymore. So that https://bitbucket.example.com/scm/project/repository will mean just clone therepository
repository and build the root. While https://bitbucket.example.com/scm/project//repository will mean clone theproject
repository and buildrepository
go-getter legacy and url magic
kustomize states that it supports "go-getter" format and previously actually did use go-getter (but not always for git cloning). For specifying a repository, all of the following are currently valid for HTTP clones
gh:github.com/kubernetes-sigs/kustomize/examples/helloWorldgit::https://github.com/kubernetes-sigs/kustomize/examples/helloWorldand the following are valid for SSH clones
git::[email protected]:kubernetes-sigs/kustomize/examples/helloWorldand probably a lot more. The logic lives in https://github.com/kubernetes-sigs/kustomize/blob/master/api/internal/git/repospec.go which greatly needs an overhaul.
What's more, most of these only apply to github.com urls, so you can say github.com/kubernetes-sigs/kustomize/examples/helloWorld but bitbucket.com/kubernetes-sigs/kustomize/examples/helloWorld does not. There's also some weird logic with
.git
being appended to the repository but not if it's an AWS or Azure code host.I think we should simply restrict the urls to one's accepted by
git clone
. Many of the above examples are not valid or wrong. Obviouslygh:
andgit::
prefixes are not clonable.git clone github.com/kubernetes-sigs/kustomize
tries to clone the local directorygithub.com/kubernetes-sigs/kustomize
git clone github.com:kubernetes-sigs/kustomize
will do an SSH clone as your current user but kustomize does an HTTPS onegit clone [email protected]/kubernetes-sigs/kustomize
is not valid as you must use:
to delimit host and directorygit clone ssh://[email protected]:kubernetes-sigs/kustomize
is not valid as you must use/
to delimit the host and directoryremote resource overlap
kustomize currently tries to load a resource as a "file" first and then as a base. kustomize also supports loading remote file resources via HTTPS so this means it's possible a resource that has
https://
can be interpreted as either a file or a base and you'd have to try both to know which is which. This does mean for bases that begin withhttps://
, kustomize will try to load it as a file first, then fail, then clone the repository and succeed. This is fine for local files and bases but has some performance penalty for remote files and bases.I'm not really sure what can be done here so long as the formats can overlap. We could say that all remote bases must have a
//
. So urls without//
are treated as files but those with//
are treated as bases. This might be acceptable since I don't believe it's common to havekustomization.yaml
at the root of a repository and for those cases we can just say add//
or//.
to the end. This is a completely breaking change though and can't be eased into like the other suggestions.The text was updated successfully, but these errors were encountered: