Unverified Commit ee8e1b4a authored by Derek Nola's avatar Derek Nola Committed by GitHub

[Release-1.27] Enable longer http timeout requests (#9445)

parent 1228fea1
...@@ -46,9 +46,9 @@ RUN --mount=type=cache,id=gomod,target=/go/pkg/mod \ ...@@ -46,9 +46,9 @@ RUN --mount=type=cache,id=gomod,target=/go/pkg/mod \
./scripts/download ./scripts/download
COPY ./cmd ./cmd COPY ./cmd ./cmd
COPY ./pkg ./pkg
COPY ./tests ./tests COPY ./tests ./tests
COPY ./.git ./.git COPY ./.git ./.git
COPY ./pkg ./pkg
RUN --mount=type=cache,id=gomod,target=/go/pkg/mod \ RUN --mount=type=cache,id=gomod,target=/go/pkg/mod \
--mount=type=cache,id=gobuild,target=/root/.cache/go-build \ --mount=type=cache,id=gobuild,target=/root/.cache/go-build \
./scripts/build ./scripts/build
......
...@@ -41,6 +41,9 @@ var ( ...@@ -41,6 +41,9 @@ var (
} }
) )
// ClientOption is a callback to mutate the http client prior to use
type ClientOption func(*http.Client)
// Info contains fields that track parsed parts of a cluster join token // Info contains fields that track parsed parts of a cluster join token
type Info struct { type Info struct {
*kubeadm.BootstrapTokenString *kubeadm.BootstrapTokenString
...@@ -233,7 +236,7 @@ func parseToken(token string) (*Info, error) { ...@@ -233,7 +236,7 @@ func parseToken(token string) (*Info, error) {
// If the CA bundle is not empty but does not contain any valid certs, it validates using // If the CA bundle is not empty but does not contain any valid certs, it validates using
// an empty CA bundle (which will always fail). // an empty CA bundle (which will always fail).
// If valid cert+key paths can be loaded from the provided paths, they are used for client cert auth. // If valid cert+key paths can be loaded from the provided paths, they are used for client cert auth.
func GetHTTPClient(cacerts []byte, certFile, keyFile string) *http.Client { func GetHTTPClient(cacerts []byte, certFile, keyFile string, option ...ClientOption) *http.Client {
if len(cacerts) == 0 { if len(cacerts) == 0 {
return defaultClient return defaultClient
} }
...@@ -250,18 +253,29 @@ func GetHTTPClient(cacerts []byte, certFile, keyFile string) *http.Client { ...@@ -250,18 +253,29 @@ func GetHTTPClient(cacerts []byte, certFile, keyFile string) *http.Client {
if err == nil { if err == nil {
tlsConfig.Certificates = []tls.Certificate{cert} tlsConfig.Certificates = []tls.Certificate{cert}
} }
client := &http.Client{
return &http.Client{
Timeout: defaultClientTimeout, Timeout: defaultClientTimeout,
Transport: &http.Transport{ Transport: &http.Transport{
DisableKeepAlives: true, DisableKeepAlives: true,
TLSClientConfig: tlsConfig, TLSClientConfig: tlsConfig,
}, },
} }
for _, o := range option {
o(client)
}
return client
}
func WithTimeout(d time.Duration) ClientOption {
return func(c *http.Client) {
c.Timeout = d
c.Transport.(*http.Transport).ResponseHeaderTimeout = d
}
} }
// Get makes a request to a subpath of info's BaseURL // Get makes a request to a subpath of info's BaseURL
func (i *Info) Get(path string) ([]byte, error) { func (i *Info) Get(path string, option ...ClientOption) ([]byte, error) {
u, err := url.Parse(i.BaseURL) u, err := url.Parse(i.BaseURL)
if err != nil { if err != nil {
return nil, err return nil, err
...@@ -272,11 +286,11 @@ func (i *Info) Get(path string) ([]byte, error) { ...@@ -272,11 +286,11 @@ func (i *Info) Get(path string) ([]byte, error) {
} }
p.Scheme = u.Scheme p.Scheme = u.Scheme
p.Host = u.Host p.Host = u.Host
return get(p.String(), GetHTTPClient(i.CACerts, i.CertFile, i.KeyFile), i.Username, i.Password, i.Token()) return get(p.String(), GetHTTPClient(i.CACerts, i.CertFile, i.KeyFile, option...), i.Username, i.Password, i.Token())
} }
// Put makes a request to a subpath of info's BaseURL // Put makes a request to a subpath of info's BaseURL
func (i *Info) Put(path string, body []byte) error { func (i *Info) Put(path string, body []byte, option ...ClientOption) error {
u, err := url.Parse(i.BaseURL) u, err := url.Parse(i.BaseURL)
if err != nil { if err != nil {
return err return err
...@@ -287,7 +301,7 @@ func (i *Info) Put(path string, body []byte) error { ...@@ -287,7 +301,7 @@ func (i *Info) Put(path string, body []byte) error {
} }
p.Scheme = u.Scheme p.Scheme = u.Scheme
p.Host = u.Host p.Host = u.Host
return put(p.String(), body, GetHTTPClient(i.CACerts, i.CertFile, i.KeyFile), i.Username, i.Password, i.Token()) return put(p.String(), body, GetHTTPClient(i.CACerts, i.CertFile, i.KeyFile, option...), i.Username, i.Password, i.Token())
} }
// setServer sets the BaseURL and CACerts fields of the Info by connecting to the server // setServer sets the BaseURL and CACerts fields of the Info by connecting to the server
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment