Skip to content

Commit 2f17803

Browse files
authored
Fix pseudo git HTTP urls broken since 59c82659 (#4453)
* Fix pseudo git HTTP urls broken since 59c82659 Signed-off-by: Sylvain Rabot <[email protected]> * Add test for Git resources using HTTP URLs Signed-off-by: Sylvain Rabot <[email protected]>
1 parent 14cb815 commit 2f17803

File tree

2 files changed

+66
-1
lines changed

2 files changed

+66
-1
lines changed

api/krusty/remoteload_test.go

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,66 @@ spec:
7777
assert.NoError(t, fSys.RemoveAll(tmpDir.String()))
7878
}
7979

80+
func TestRemoteResourceGitHTTP(t *testing.T) {
81+
output := `apiVersion: v1
82+
kind: Pod
83+
metadata:
84+
labels:
85+
app: myapp
86+
name: dev-myapp-pod
87+
spec:
88+
containers:
89+
- image: nginx:1.7.9
90+
name: nginx
91+
`
92+
tests := []struct {
93+
input []byte
94+
}{
95+
{
96+
input: []byte(`
97+
resources:
98+
- https://github.com/kubernetes-sigs/kustomize/examples/multibases/dev/?ref=v1.0.6
99+
`),
100+
},
101+
{
102+
input: []byte(`
103+
resources:
104+
- https://github.com/kubernetes-sigs/kustomize//examples/multibases/dev/?ref=v1.0.6
105+
`),
106+
},
107+
{
108+
input: []byte(`
109+
resources:
110+
- git::https://github.com/kubernetes-sigs/kustomize/examples/multibases/dev/?ref=v1.0.6
111+
`),
112+
},
113+
{
114+
input: []byte(`
115+
resources:
116+
- git::https://github.com/kubernetes-sigs/kustomize//examples/multibases/dev/?ref=v1.0.6
117+
`),
118+
},
119+
}
120+
121+
for _, test := range tests {
122+
fSys := filesys.MakeFsOnDisk()
123+
b := krusty.MakeKustomizer(krusty.MakeDefaultOptions())
124+
tmpDir, err := filesys.NewTmpConfirmedDir()
125+
assert.NoError(t, err)
126+
assert.NoError(t, fSys.WriteFile(filepath.Join(tmpDir.String(), "kustomization.yaml"), test.input))
127+
m, err := b.Run(fSys, tmpDir.String())
128+
if utils.IsErrTimeout(err) {
129+
// Don't fail on timeouts.
130+
t.SkipNow()
131+
}
132+
assert.NoError(t, err)
133+
yml, err := m.AsYaml()
134+
assert.NoError(t, err)
135+
assert.Equal(t, output, string(yml))
136+
assert.NoError(t, fSys.RemoveAll(tmpDir.String()))
137+
}
138+
}
139+
80140
func TestRemoteResourceWithHTTPError(t *testing.T) {
81141
fSys := filesys.MakeFsOnDisk()
82142
b := krusty.MakeKustomizer(krusty.MakeDefaultOptions())

api/loader/fileloader.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
package loader
55

66
import (
7+
"errors"
78
"fmt"
89
"io/ioutil"
910
"log"
@@ -298,7 +299,7 @@ func (fl *fileLoader) errIfRepoCycle(newRepoSpec *git.RepoSpec) error {
298299
}
299300

300301
// Load returns the content of file at the given path,
301-
// else an error. Relative paths are taken relative
302+
// else an error. Relative paths are taken relative
302303
// to the root.
303304
func (fl *fileLoader) Load(path string) ([]byte, error) {
304305
if u, err := url.Parse(path); err == nil && (u.Scheme == "http" || u.Scheme == "https") {
@@ -314,6 +315,10 @@ func (fl *fileLoader) Load(path string) ([]byte, error) {
314315
}
315316
defer resp.Body.Close()
316317
if resp.StatusCode < 200 || resp.StatusCode > 299 {
318+
_, err := git.NewRepoSpecFromUrl(path)
319+
if err == nil {
320+
return nil, errors.New("URL is a git repository")
321+
}
317322
return nil, fmt.Errorf("%w: status code %d (%s)", ErrorHTTP, resp.StatusCode, http.StatusText(resp.StatusCode))
318323
}
319324
body, err := ioutil.ReadAll(resp.Body)

0 commit comments

Comments
 (0)