add multiple user agents to kaniko if upstream_client_type value is set
This commit is contained in:
parent
7adf2fcb50
commit
6daffd8dd7
|
|
@ -21,6 +21,8 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/GoogleContainerTools/kaniko/pkg/cache"
|
"github.com/GoogleContainerTools/kaniko/pkg/cache"
|
||||||
|
|
@ -43,8 +45,16 @@ type withUserAgent struct {
|
||||||
t http.RoundTripper
|
t http.RoundTripper
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
UPSTREAM_CLIENT_UA_KEY = "UPSTREAM_CLIENT_TYPE"
|
||||||
|
)
|
||||||
|
|
||||||
func (w *withUserAgent) RoundTrip(r *http.Request) (*http.Response, error) {
|
func (w *withUserAgent) RoundTrip(r *http.Request) (*http.Response, error) {
|
||||||
r.Header.Set("User-Agent", fmt.Sprintf("kaniko/%s", version.Version()))
|
ua := []string{fmt.Sprintf("kaniko/%s", version.Version())}
|
||||||
|
if upstream := os.Getenv(UPSTREAM_CLIENT_UA_KEY); upstream != "" {
|
||||||
|
ua = append(ua, upstream)
|
||||||
|
}
|
||||||
|
r.Header.Set("User-Agent", strings.Join(ua, ","))
|
||||||
return w.t.RoundTrip(r)
|
return w.t.RoundTrip(r)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,71 @@
|
||||||
|
/*
|
||||||
|
Copyright 2018 Google LLC
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package executor
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"io/ioutil"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/GoogleContainerTools/kaniko/testutil"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestHeaderAdded(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
upstream string
|
||||||
|
expected string
|
||||||
|
}{{
|
||||||
|
name: "upstream env variable set",
|
||||||
|
upstream: "skaffold-v0.25.45",
|
||||||
|
expected: "kaniko/unset,skaffold-v0.25.45",
|
||||||
|
}, {
|
||||||
|
name: "upstream env variable not set",
|
||||||
|
expected: "kaniko/unset",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, test := range tests {
|
||||||
|
|
||||||
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
rt := &withUserAgent{t: &mockRoundTripper{}}
|
||||||
|
if test.upstream != "" {
|
||||||
|
os.Setenv("UPSTREAM_CLIENT_TYPE", test.upstream)
|
||||||
|
defer func() { os.Unsetenv("UPSTREAM_CLIENT_TYPE") }()
|
||||||
|
}
|
||||||
|
req, err := http.NewRequest("GET", "dummy", nil)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("culd not create a req due to %s", err)
|
||||||
|
}
|
||||||
|
resp, err := rt.RoundTrip(req)
|
||||||
|
testutil.CheckError(t, false, err)
|
||||||
|
defer resp.Body.Close()
|
||||||
|
body, err := ioutil.ReadAll(resp.Body)
|
||||||
|
testutil.CheckErrorAndDeepEqual(t, false, err, test.expected, string(body))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
type mockRoundTripper struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *mockRoundTripper) RoundTrip(r *http.Request) (*http.Response, error) {
|
||||||
|
ua := r.UserAgent()
|
||||||
|
return &http.Response{Body: ioutil.NopCloser(bytes.NewBufferString(ua))}, nil
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue